Install ONOS Cluster in Kubernetes

ONOS software defined networking controller can be install inside kubernetes to control the traffic via OpenFlow.


  • Running Kubernetes Cluster
  • Helm Installed
  • Dynamic Storage Provisioning in Kubernetes

Clone Helm Chart for Atomix

cd ~
git clone --branch master

Clone Helm Chart for ONOS

cd ~
git clone

Edit location of depedencies

cd onos-kubernetes/charts/onos
nano requirements.yaml

- name: atomix
  version: 0.1.2
  repository: file://../../../atomix-helm/atomix

Build depedencies

helm dependency update

Install ONOS cluster using Helm Chart

cd ~/onos-kubernetes/
helm install charts/onos --name onos --set heap=2G --set image.tag=1.14.1 --set atomix.image.tag=3.0.6 --set replicas=5 --set atomix.replicas=3 --set apps={openflow} --set atomix.persistence.size=1Gi --set atomix.persistence.storageClass=gluster-heketi-external

Check pod

btech@zu-master:~/onos-kubernetes$ kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
onos-atomix-0                1/1     Running   0          78s
onos-atomix-1                1/1     Running   0          78s
onos-atomix-2                0/1     Running   0          78s
onos-onos-5f58cd9945-ckj9q   0/1     Running   0          78s
onos-onos-5f58cd9945-g9l7d   0/1     Running   0          78s
onos-onos-5f58cd9945-jxgwc   0/1     Running   0          78s
onos-onos-5f58cd9945-l4ftn   0/1     Running   0          78s
onos-onos-5f58cd9945-p46bp   0/1     Running   0          78s

Check service

btech@zu-master:~/onos-kubernetes$ kubectl get svc
NAME                                                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                        AGE
kubernetes                                               ClusterIP        <none>        443/TCP                                        18d
onos-atomix-api                                          ClusterIP    <none>        5678/TCP                                       83s
onos-atomix-hs                                           ClusterIP   None             <none>        5679/TCP                                       83s
onos-onos-hs                                             ClusterIP   None             <none>        6653/TCP,6640/TCP,9876/TCP,8101/TCP,8181/TCP   83s

because service is headless, lets create another service nodeport.

apiVersion: v1
kind: Service
  name: onos-external
    app: onos-onos
  type: NodePort
  - name: http
    port: 8181    
    nodePort: 32700
    targetPort: 8181

create the service

btech@zu-master:~$ kubectl create -f svc-onos.yaml 
service/onos-external created
btech@zu-master:~$ kubectl get svc
NAME                                                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                        AGE
onos-external                                            NodePort    <none>        8181:32700/TCP

lets access

Comments are closed.