SDN-C Clustering on Kubernetes
About the SDN-C Clustering
The following diagram illustrates the desired SDN-C cluster deployment (as described in https://lf-onap.atlassian.net/browse/SDNC-163) from POD and SERVICE view, which will have:
2 DB pods
3 sdnc (ODL) pods
1 admin (portal) pod
1 dgbuilder pod
SDN-C DB Clustering details
See details from SDN-C DB (MySQL) Clustered Deployment.
Deployment Setup Steps
You can use Rancher or kubeadm to deploy your Kubernetes cluster:
Additional Information
SDN-C Startup Order
Troubleshoot SDN-C pods are not start up in order
Usually, this is caused by init-container malfuntion. You can troubleshoot it by the following steps:
Do a describe of the pod using command kubectl describe pod <pod-name>, to ensure the Init Container section is presented as your defined in your yaml template.
If it does not exist, it is possible that your Kubernetes version supports a different format for the init-containers:
init-containers syntax supported by Kubernetes 1.5, 1.6 and 1.7 and not supported by Kubernetes 1.8 and greater | initContainers syntax supported from Kubernetes 1.6 and greater |
---|---|
Init container is defined under spec.template.metadata.annotations."pod.beta.kubernetes.io/init-containers An example of init container by beta annotationapiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: sdnc
...
spec:
...
template:
metadata:
...
annotations:
pod.beta.kubernetes.io/init-containers: '[
{
"args": [
"--container-name",
"sdnc-db-container"
],
"command": [
"/root/ready.py"
],
"env": [
{
"name": "NAMESPACE",
"valueFrom": {
"fieldRef": {
"apiVersion": "v1",
"fieldPath": "metadata.namespace"
}
}
}
],
"image": "{{ .Values.image.readiness }}",
"imagePullPolicy": "{{ .Values.pullPolicy }}",
"name": "sdnc-readiness"
}
]'
spec:
containers:
... | Init container is defined under spec.template.spec.initContainers An example of init container by spec.initContainersapiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: sdnc
...
spec:
...
template:
...
spec:
initContainers:
- command:
- /root/ready.py
- "--container-name"
- "sdnc-db-container"
env:
- name: NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: "{{ .Values.image.readiness }}"
imagePullPolicy: {{ .Values.pullPolicy }}
name: sdnc-readiness
containers:
... |
Restart Dead Instance (start a new one in its place)
When a pod is dead, Kubernetes automatically starts a new one to replace the dead pod.
Examples:
Pod-level restart:
Container-level restart:
Source Code
The source code is currently temporary shared through gerrit topic SDNC-163 until it is commited into gerrit.