This tutorial will guide you through the development workflow for a SEBA component using the environment provided by SEBA in a Box.
The tutorial will use the rcord service as an example, but the same workflow can be used for each docker-based component in SEBA.
If you are working on ONOS applications, you want to take a look at this tutorial.
NOTE that the same workflow can be adapted for:
- different emulated environment (eg:
MCORD in a Box)- physical setups
In order to follow this tutorial you need to:
{% include "/partials/siab-short.md" %}
In order to move Docker images from your laptop to the SEBA in a Box environment you need a Docker registry. You can install one using helm:
helm install stable/docker-registry --set service.nodePort=30500,service.type=NodePort -n docker-registry
The registry deployed via helm is by default an insecure registry (it uses http instead of https) thus docker requires that you explicitly authorize that registry.
You can find more informations about insecure registries on the docker documentation.
To open the Docker preferences click on the icon in the status bar (top right of the screen) and select preferences.
Navigate to the Daemon tab and under Insecure registries add the ip and port of the one running on your SiaB machine:
NOTE that the docker-registry endpoint should be
myregistrydomain.com:30500wheremyregistrydomain.comis the publicipof yourSiaBmachine.
Click on Apply and Restart to apply your changes.
This needs to be done on the SiaB machine (and on you machine if it's a Linux based machine)
Edit the /etc/docker/daemon.json file and add:
{ "insecure-registries" : ["myregistrydomain.com:30500"] }
where myregistrydomain.com is the public ip of your SiaB machine.
Then restart the docker daemon with: sudo service docker restart
Once you make the appropriate changes to the code, you can buid it with:
cd ~/cord/orchestration/xos-services/rcord DOCKER_REGISTRY=myregistrydomain.com:30500/ DOCKER_REPOSITORY=xosproject/ DOCKER_TAG=candidate make docker-build ... Successfully built 14a4ec8f2906 Successfully tagged myregistrydomain.com/xosproject/rcord-synchronizer:candidate
where myregistrydomain.com is the public ip of your SiaB machine.
Note: In some cases the command to build the docker image may vary. Please check the Makefile within the repo for more informations.
To push the newly built image to your docker registry use this command:
cd ~/cord/orchestration/xos-services/rcord DOCKER_REGISTRY=myregistrydomain.com:30500/ DOCKER_REPOSITORY=xosproject/ DOCKER_TAG=candidate make docker-push docker push myregistrydomain.com:30500/xosproject/rcord-synchronizer:candidate The push refers to repository [myregistrydomain.com:30500/xosproject/rcord-synchronizer] 43b4d40e8ced: Layer already exists 70019539cd35: Layer already exists 56585fbf0fe2: Layer already exists 4929606216d8: Layer already exists 343eab13e1e3: Layer already exists ea7c8d4e60dc: Layer already exists 7d63eb9a32c4: Layer already exists bcf2f368fe23: Layer already exists candidate: digest: sha256:f5ecac2ba76c2a81a6f8b82b09e07c53f9ca2f3d272c8861ed7f5ed1ac290ac8 size: 1993
where myregistrydomain.com is the public ip of your SiaB machine.
When SiaB is installed with the make latest command, a values.yaml file is applied to all the helm install commands.
To know more about
valuesfiles, please check the official helm documentation
To customize the installation, download the default seba-ponsim-latest.yaml so that you can customize it:
curl https://raw.githubusercontent.com/opencord/helm-charts/master/configs/seba-ponsim-latest.yaml -o ~/custom.yaml
To deploy the new container you need to update the helm-chart, but first you need to customize the value file.
Open the file you downloaded in ~/custom.yaml and change the rcord section so that it looks like:
rcord: image: repository: "myregistrydomain.com:30500/xosproject/rcord-synchronizer" tag: 'candidate'
The rcord service is installed by the seba-services helm chart, so you need to upgrade it to the new version:
cd ~/cord/helm-charts helm upgrade --install seba-services xos-profiles/seba-services -f ~/custom.yaml
NOTE it's important that you upgrade the chart defining the component you are developing. For more informations about the helm charts visit the Helm reference section in the guide.
In some cases you want to restart from a clean environment using your images. If you do that it is important not to run the make reset-kubeadm command as that will completely teardown kubernetes, deleting the docker registry.
To remove all the installed containers you can instead use the make teardown-charts commands.
Once all the containers have been removed, you can reinstall everything using your value file with:
SEBAVALUES=~/custom.yaml make
NOTE that the
latesttarget is not needed as we are specifying a custom value file through theSEBAVALUESvariable.
If you are facing issues with this development workflow, please report your problem on the SEBA-dev or CORD-dev mailing lists, or contact @teone on slack.
If you're not familiar with how value files work we suggest to read the official documentation but to make it short you can look for the values.yaml file in the helm chart you are working with.
If the helm chart is installed as a requirement of another chart also look for the requirement name in the parent chart. For example the
rcordchart is installed as part ofseba-servicesand that's why we nest the customization underrcord.
We have a talk about this topic during ONF Connect 2018, you can find the recording here and the slides here.
To explain that in few words, you need a way to move the docker image from the "build" machine to the "host" machine, as described in the picture below.
If you don't want to deploy a docker-registry on the POD, you can use any docker registry. The docker-build/docker-push commands are flexible enough to accomodate that, for example you can build and push the container with these commands:
DOCKER_REPOSITORY=matteoscandolo/ DOCKER_TAG=candidate make docker-build DOCKER_REPOSITORY=matteoscandolo/ DOCKER_TAG=candidate make docker-push
And customize your value file to fetch that image:
rcord: image: repository: "matteoscandolo/rcord-synchronizer" tag: 'candidate'
Yes, you can build the docker containers directly on the SiaB host machine, just be aware that this workflow won't transfer to a multi-node cluster.
If you build the rcord-synchronizer docker image on the SiaB machine with:
DOCKER_REPOSITORY=xosproject/ DOCKER_TAG=candidate make docker-build
you can change the custom.yaml value file in this way to use it:
rcord: image: tag: 'candidate' pullPolicy: 'IfNotPresent'
For more information about this workflow we suggest to take a look at the talk mentioned in the Why do I need a remote docker-registry? section.
Yes, the workflow to test VOLTHA images is absolutely the same, but some of the commands are different.
On your local machine you can build VOLTHA images with:
cd ~/cord/incubator/voltha REPOSITORY=voltha/ TAG=candidate VOLTHA_BUILD=docker make build
Then you need to tag and push the images you want to upload with:
docker tag voltha/voltha-voltha:candidate myregistrydomain.com:30500/voltha/voltha-voltha:candidate docker push myregistrydomain.com:30500/voltha/voltha-voltha:candidate
where myregistrydomain.com is the public ip of your SiaB machine.
And update you custom.yaml value file on the SiaB machine with:
images: vcore: repository: "myregistrydomain.com:30500/voltha/voltha-voltha" tag: 'candidate'