1 # OpenDaylight Helm Chart
3 OpenDaylight Helm Chart is a packaging for kubernetes deployment.
4 The composition of this chart consist of statefulset that can scale to multiple standalone instances of OpenDaylight Pods.
8 Before deploying, there are several areas can be customized.
9 Either by editing values.yaml or using --set flag pass-in with the helm command
12 helm install sdnc opendaylight --set persistence.enabled=true
15 ### Java Memory and GC settings
17 In values.yaml, java max memory and GC settings can be customized
29 ### OpenDaylight Features
31 In values.yaml, one can customize features to be included during instance startup. By default, only restconf is included.
35 odl_basedir: /opt/opendaylight
36 #features: odl-restconf,odl-restconf-all,odl-bgpcep-pcep,odl-bgpcep-bgp,odl-bgpcep-bgp-config-example,odl-bgpcep-bmp,odl-bgpcep-bmp-config-example,odl-jolokiaa,odl-daexim-all
37 features: odl-restconf,odl-restconf-all
40 ### Container Image Version
42 The pull policy can be customized in values.yaml.
46 repository: nexus3.opendaylight.org:10001/opendaylight/opendaylight
47 pullPolicy: IfNotPresent
50 The container image version is located in Chart.yaml
54 so the combined image from above two files will be:
55 `nexus3.opendaylight.org:10001/opendaylight:14.2.0`
59 By default the OpenDaylight Pod uses ephemeral volume.
60 The data stored at /data will lost after container restarts.
62 To support data persistence, it requires kubernetes persistent storageClass. Depend on your environment, there are many implementation of storage plugin. Following is example of define a storageClass on OpenEBS storage plugin.
64 create storageClass vg01-lvmpv for OpenEBS on volume group vg01
66 kubectl apply -f - <<EOD
67 apiVersion: storage.k8s.io/v1
71 allowVolumeExpansion: true
74 provisioner: local.csi.openebs.io
78 Once storageClass is defined, adjust the values.yaml
80 - size = `adjustable based on number of devices supported`
81 - storageClass = `defined storageClass`
85 accessMode: ReadWriteOnce
88 storageClass: vg01-lvmpv
93 the generated definition can be inspected before actual deployment using --dry-run flag
95 helm install sdnc opendaylight --dry-run
100 Following will deploy a release called sdnc to default namespace with persistent volume
102 helm install sdnc opendaylight --set persistence.enabled=true
105 if need to deploy on different namespace (sdntest)
107 helm install sdnc opendaylight --set persistence.enabled=true --create-namespace -n sdntest
114 LAST DEPLOYED: Thu Oct 28 12:58:19 2021
120 1. Get the application URL by running these commands:
121 export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=opendaylight,app.kubernetes.io/instance=sdnc" -o jsonpath="{.items[0].metadata.name}")
122 export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
123 echo "Visit http://127.0.0.1:8080 to use your application"
124 kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
131 NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
132 sdnc default 1 2021-10-28 12:58:19.548011 -0400 EDT deployed opendaylight-0.1.0 14.2.0
135 Inspect Pods, by default only one instance of OpenDaylight Pods
139 NAME READY STATUS RESTARTS AGE
140 sdnc-opendaylight-0 1/1 Running 0 52s
145 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
146 odlvol-sdnc-opendaylight-0 Bound pvc-5d7ece71-088e-4dd6-9fda-67a928a51495 5Gi RWO vg01-lvmpv 77s
149 scale out to 3 standalone opendaylight instance
151 kubectl edit statefulset sdnc-opendaylight
154 update replica from 1 to 3
157 podManagementPolicy: OrderedReady
163 NAME READY STATUS RESTARTS AGE
164 sdnc-opendaylight-0 1/1 Running 0 6m37s
165 sdnc-opendaylight-1 1/1 Running 0 3m2s
166 sdnc-opendaylight-2 1/1 Running 0 2m20s
169 uninstall sdnc release
173 release "sdnc" uninstalled
176 the persistent volumes still preserved and can be reuse for next deployment
180 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
181 odlvol-sdnc-opendaylight-0 Bound pvc-5d7ece71-088e-4dd6-9fda-67a928a51495 5Gi RWO vg01-lvmpv 10m
182 odlvol-sdnc-opendaylight-1 Bound pvc-df825859-5970-453b-90df-22eb754a15f8 5Gi RWO vg01-lvmpv 6m47s
183 odlvol-sdnc-opendaylight-2 Bound pvc-e074f280-4393-4b96-b34d-5d6ab22bdf77 5Gi RWO vg01-lvmpv 6m5s
186 ### Access RESTCONF Swagger
187 base on the notes output from heml install, set up port forwarding to first instance
189 export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=opendaylight,app.kubernetes.io/instance=sdnc" -o jsonpath="{.items[0].metadata.name}")
190 export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
191 echo "Visit http://127.0.0.1:8080 to use your application"
192 kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
195 from browser, go to `http://127.0.0.1:8080/apidoc/explorer/index.html` then login with `admin/admin`