Deploy OOM and SDC (or ONAP) on a single VM with microk8s - Honolulu Setup
- 1 Introduction
- 2 Minimum Requirements
- 3 Overall Procedure
- 4 1) Install/Upgrade Microk8s with appropriate version
- 5 2) Install/remove Helm with appropriate version
- 6 3) Tweak Microk8s
- 7 4) Download OOM repo
- 8 5) Install the needed Helm plugins
- 9 6) Install the chartmuseum repository
- 10 7) Install docker
- 11 8) Build all oom charts and store them in the chart repo
- 12 9) Tweak oom override file to fine tune deployment based on your VM capacity and component needs
- 13 10) Enable UI access
- 14 11) Full Deployment Override on a single VM
- 15 12) Run testsuites
Introduction
This tutorial is going to explain how to setup a local Kubernetes cluster and minimal helm setup to run and deploy SDC (but can be extended to several/all ONAP components) on a single host.
The rationale for this tutorial is to spin up a development environment quickly and efficiently without the hassle of setting up a multi node cluster/Network file share that are needed in a full deployment.
This was a trial in G release but is now extended to the requirements of H release.
WARNING :
There are limitations in using this setup, the purpose is to allow for developers to quickly get access to a working environment 'the way their component is supposed to be deployed'
This is not meant for production obviously, and the tweaks that are done to the OOM/K8s setup are most likely going to evolve with further releases.
Minimum Requirements
One VM running Ubuntu 20.04 LTS (should also work on 18.04), with internet access to download charts/containers and the oom repo
Root/sudo privileges
Sufficient RAM depending on how many components you want to deploy
Around 20G of RAM allows for a few components, the minimal setup for SDC is enabling :
Shared Cassandra
AAF
Portal (if you need UI access)
SDC
This was tested with a huge VM - 128G of RAM and 12 VCPU, running most of the components in Honolulu development.
This was tested with a small VM to run components on a local Laptop (need enough ram to create a 20G Ram VM using VBox, VMWare...)
above 160G available storage should be sufficient, mostly depends on how many components you want to enable in OOM charts.
Storage is required mostly to store container images
Overall Procedure
Install/remove Microk8s with appropriate version
Install/remove Helm with appropriate version
Tweak Microk8s
Download oom repo
Install the needed Helm plugins
Install ChartMuseum as a local helm repo
Install docker (now needed to build oom charts)
Build all oom charts and store them in the chart repo
Tweak oom override file to fine tune deployment based on your VM capacity and component needs
Deploy/Undeploy charts
Enable local UI access
Full Deployment Override on a single VM
Run testsuites
1) Install/Upgrade Microk8s with appropriate version
Why Microk8s ?
Microk8s is a bundled lightweight version of kubernetes maintained by Canonical, it has the advantage to be well integrated with snap on Ubuntu, which makes it super easy to manage/upgrade/work with
More info on : https://microk8s.io/docs
There are 2 things to know with microk8s :
1) it is wrapped by snap, which is nice but you need to understand that it's not exactly the same as having a proper k8s installation (more info below on some specific commands)
2) it is not using docker as the container runtime, it's using containerd, it's not an issue, just be aware of that as you won't see containers using classic docker commands
How to remove/install microk8s ?
If you have a previous version of microk8s, you first need to uninstall it (upgrade is possible but it is not recommended between major versions so I recommend to uninstall as it's fast and safe)
sudo snap remove microk8s
You need to select the appropriate version to install, to see all possible version do :
sudo snap info microk8s
this tutorial is focused on Honolulu release so we will use k8s version 1.19, to do so, you just need to select the appropriate channel
sudo snap install microk8s --classic --channel=1.18/stable
sudo snap refresh microk8s --classic --channel=1.19/stable
Or (when the master node bug will be fixed on 1.19 kubernetes snap install)
sudo snap install microk8s --classic --channel=1.19/stable
You may need to change your firewall configuration to allow pod to pod communication and pod to internet communication :
Addons ?
MicroK8s is lightweight but comes with several possible addons, OOM and ONAP requires just a few to be enabled, you can choose to enable more if you want to
DNS addon : we need the DNS addon so that pods can 'see' each other by host name.
Storage addon : we will enable the default Host storage class, this allows local volume storage that are used by some pods to exchange folders between containers.
that's it, you should have a running k8s cluster, ready to host ONAP pods
I recommend to get familiar with microk8s, here are a few useful commands but you can read more on the microk8s website :
microk8s status: Provides an overview of the MicroK8s state (running / not running) as well as the set of enabled addons
microk8s enable: Enables an addon
microk8s disable: Disables an addon
microk8s kubectl: Interact with kubernetes
microk8s config: Shows the kubernetes config file
microk8s inspect: Performs a quick inspection of the MicroK8s intallation
microk8s reset: Resets the infrastructure to a clean state → very useful for a dev lab
microk8s stop: Stops all kubernetes services
microk8s start: Starts MicroK8s after it is being stopped
2) Install/remove Helm with appropriate version
Helm is the package manager for k8s, we require a specific version for each ONAP release, the best is to look at the OOM guides to see which one is required (link to add)
For the Honolulu release we need Helm 3 - A significant improvement with Helm3 is that it does not require a specific pod running in the kubernetes cluster (no more Tiller pod)
As Helm is self contained, it's pretty straightforward to install/upgrade, we can also use snap to install the right version
Note: You may encounter some log issues when installing helm with snap
Normally the helm logs are available in "~/.local/share/helm/plugins/deploy/cache/onap/logs", if you notice that the log files are all equal to 0, you can uninstall the helm with snap and reinstall it manually
3) Tweak Microk8s
The below tweaks are not strictly necessary, but they help in making the setup more simple and flexible.
A) Increase the max number of pods & Add priviledged config
As ONAP may deploy a significant amount of pods, we need to inform kubelet to allow more than the basic configuration (as we plan an all in box setup), if you only plan to run a limited number of components, this is not needed
to change the max number of pods, we need to add a parameter to the startup line of kubelet.
1. Edit the file located at :
add the following line at the end :
save the file and restart kubelet to apply the change :
2. Edit the file located at :
add the following line at the end :
save the file and restart kubelet to apply the change :
B) run a local copy of kubectl
Microk8s comes bundled with kubectl, you can interact with it by doing:
to make things simpler as we will most likely interact a lot with kubectl, let's install a local copy of kubectl so we can use it to interact with the kubernetes cluster in a more straightforward way
We need kubectl 1.19 to match the cluster we have installed, let's again use snap to quickly choose and install the one we need
Now we need to provide our local kubectl client with a proper config file so that it can access the cluster, microk8s allows to retrieve the cluster config very easily
Simply create a .kube folder in your home directory and dump the config there
the last line is there to avoid helm complaining about too open permission
you should now have helm and kubectl ready to interact with each other, you can verify this by trying :
this should output both the local client and server version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19+", GitVersion:"v1.19.7-34+02d22c9f4fb254", GitCommit:"02d22c9f4fb2545422b2b28e2152b1788fc27c2f", GitTreeState:"clean", BuildDate:"2021-02-11T20:13:16Z", GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"}
4) Download OOM repo
OOM provides a couple of plugins that we need to install for helm, the easiest is to get them straight from the repository.
Since we will also build the charts locally, it's the right time to download a local copy, you'll need to install git if it's not available yet on your machine
the example below pulls the latest version from master, it's probably wiser to select the right version (honolulu branch or a specific review you want to test)
5) Install the needed Helm plugins
Onap deployments are using the deploy and undeploy plugins for helm
to install them just run :
this will copy the plugins into your home directory .helm folder and make them available as helm commands
Another plugin we need is the push plugin, with helm3 there is no more an embedded repo to use.
Once all plugins are installed, you should see them as available helm commands when doing :
6) Install the chartmuseum repository
To align with how the previous release were deployed, we will setup a local chart repository.
To do, download the chartmuseum script and run it as a background task
you should see the chartmuseum repo starting locally, you can press enter to come back to your terminal
you can now inform helm that a local repo is available for use :
Note this is a very basic setup, meaning you'll need to startup your local repo if you shut down your VM or if you exit this terminal, there are other ways to do it, like using a docker compose to ensure 'it's always on'
Also, you can setup a local database for Helm to store it's deployment (more info on Helm website), this is useful if you want to upgrade and undeploy charts, now on this setup which is aimed for developpers, the approach is a clean install and wipe if we need to change something so we won't describe this part here, see last point on how to deploy/undeploy with this setup
7) Install docker
During the processing of the oom helm charts (oom-cert-service component of platform), docker is needed as it is used to create certificates.
Follow the docker install instructions for Ubuntu here : https://docs.docker.com/engine/install/ubuntu/
unless you already have docker, in which case you can skip this part altogether.
Or use snap:
8) Build all oom charts and store them in the chart repo
You should be ready to build all helm charts, go into the oom/kubernetes folder and run a full make
Ensure you have "make" installed:
Then build OOM
You can speed up the make skipping the linting of the charts
You'll notice quite a few message popping into your terminal running the chartmuseum, showing that it accepts and store the generated charts, that's normal, if you want, just open another terminal to run the helm commands
Once the build completes, you should be ready to deploy ONAP
9) Tweak oom override file to fine tune deployment based on your VM capacity and component needs
Before deploying, it's good to decide which ONAP components you need and create an override file. The override file will tune your deployment to your specific needs.
We have a few considerations to take on our stand alone VM :
1) CPU/Memory might be limited, so be careful on what you enable / disable. K8S 1.19 now properly enforce CPU and memory requests/limits so it is important to define/override them correctly
2) Timeouts : the more component you enable, the more the liveness probes and readiness probes timeouts may have to be increased, knowing that we will most likely over commit the VM CPU.
First, here is a very basic override file to enable a very small setup with SDC, we will only enable aaf, portal, SDC and cassandra shared, this should work on a laptop with enough ram :
copy the content below to a file called onap-honolulu.yaml
You'll notice the tweaks to the timeouts and memory settings and limits, this is mostly what you have to adapt depending on your needs
Once the file is ready you can deploy :
1) First you need to ensure that the onap namespace exists (it now must be created prior deployment)
2) Launch the chart deployment, pay attention to the last parameter, it must point to your override file create above
The deployment can take a while depending on how many charts you've enabled.
You should see all pods starting up and you should be able to see logs using kubectl, dive into containers etc...
How to undeploy and start fresh
The easiest is to use kubectl, you can clean up the cluster in 3 commands :
don't forget to create the namespace again before deploying again (helm won't complain if it is not there, but you'll end up with an empty cluster after if finishes)
Note : you could also reset the K8S cluster by using the microk8s feature : microk8s reset
but that's a more drastic approach, you would need to reinstall the addons, dump again the config for kubectl etc.... this can be useful if you get weird behavior though.
10) Enable UI access
Once all pods are running and all jobs are completed,
You may want to connect to the ONAP UIs locally, to do so you first need to add the following to your /etc/host (adapt the IP address if you use a remote VM)
You can then access the portal UI by opening your browser to :
https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/login.htm
user/pass is cs0008/demo123456!
Note : Since SDC (and other UIs) are embedded into the portal UI frame, you browser may complain about trusting its certificate, to work around this issue, open the SDC UI directly first (to get your browser to accept the certificate), once done you should be able to open the SDC UI through the portal. To do so, open another tab of your browser to :
https://sdc.api.fe.simpledemo.onap.org:30207/
https://sdc.workflow.plugin.simpledemo.onap.org:30256/
Note : you need to repeat the above for each deployment, as certificates are generated by AAF during startup, certificates will change each time you deploy
You should now be able to use SDC :
11) Full Deployment Override on a single VM
Below is a full blown override file used to run mostly all Honolulu components, this was tested working on Windriver Lab on a VM with 12VCpu and 128G Ram
If you want to use SO / Robot - you need to fill in proper properties in the override, this depends on your openstack instance / tenant
12) Run testsuites
If you have deployed the robot pod, you can perform some tests using the provided scripts in the oom repo
go to the oom/kubernetes/robot folder and run ete-k8s.sh to see the available test suites
to run a specific test suite, just provide the namespace and the testsuite tag, below is testing distribution with SDC (beware that some tests require the availability of several components to succeed)
the script will contact the robot pod within the cluster and execute the tests (may take a while)
if you have enabled UI access you can see the test logs in a browser by connecting to
https://robot-onap.onap.org:30209
(user/pass is test/test)
browse to the test suite you have started and open the folder, click the report.html to see robot test results