| diff --git a/ovn/templates/bin/_ovn-controller-init.sh.tpl b/ovn/templates/bin/_ovn-controller-init.sh.tpl |
| index 55cc2ecb..885204a0 100644 |
| --- a/ovn/templates/bin/_ovn-controller-init.sh.tpl |
| +++ b/ovn/templates/bin/_ovn-controller-init.sh.tpl |
| @@ -14,6 +14,8 @@ |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| +ANNOTATION_KEY="atmosphere.cloud/ovn-system-id" |
| + |
| function get_ip_address_from_interface { |
| local interface=$1 |
| local ip=$(ip -4 -o addr s "${interface}" | awk '{ print $4; exit }' | awk -F '/' 'NR==1 {print $1}') |
| @@ -75,6 +77,19 @@ function migrate_ip_from_nic { |
| set -e |
| } |
| |
| +function get_current_system_id { |
| + ovs-vsctl --if-exists get Open_vSwitch . external_ids:system-id | tr -d '"' |
| +} |
| + |
| +function get_stored_system_id { |
| + kubectl get node "$NODE_NAME" -o "jsonpath={.metadata.annotations.atmosphere\.cloud/ovn-system-id}" |
| +} |
| + |
| +function store_system_id() { |
| + local system_id=$1 |
| + kubectl annotate node "$NODE_NAME" "$ANNOTATION_KEY=$system_id" |
| +} |
| + |
| # Detect tunnel interface |
| tunnel_interface="{{- .Values.network.interface.tunnel -}}" |
| if [ -z "${tunnel_interface}" ] ; then |
| @@ -89,13 +104,25 @@ if [ -z "${tunnel_interface}" ] ; then |
| fi |
| ovs-vsctl set open . external_ids:ovn-encap-ip="$(get_ip_address_from_interface ${tunnel_interface})" |
| |
| -# Configure system ID |
| -set +e |
| -ovs-vsctl get open . external-ids:system-id |
| -if [ $? -eq 1 ]; then |
| - ovs-vsctl set open . external-ids:system-id="$(uuidgen)" |
| +# Get the stored system-id from the Kubernetes node annotation |
| +stored_system_id=$(get_stored_system_id) |
| + |
| +# Get the current system-id set in OVS |
| +current_system_id=$(get_current_system_id) |
| + |
| +if [ -n "$stored_system_id" ] && [ "$stored_system_id" != "$current_system_id" ]; then |
| + # If the annotation exists and does not match the current system-id, set the system-id to the stored one |
| + ovs-vsctl set Open_vSwitch . external_ids:system-id="$stored_system_id" |
| +elif [ -z "$current_system_id" ]; then |
| + # If no current system-id is set, generate a new one |
| + current_system_id=$(uuidgen) |
| + ovs-vsctl set Open_vSwitch . external_ids:system-id="$current_system_id" |
| + # Store the new system-id in the Kubernetes node annotation |
| + store_system_id "$current_system_id" |
| +elif [ -z "$stored_system_id" ]; then |
| + # If there is no stored system-id, store the current one |
| + store_system_id "$current_system_id" |
| fi |
| -set -e |
| |
| # Configure OVN remote |
| {{- if empty .Values.conf.ovn_remote -}} |
| @@ -125,6 +152,10 @@ else |
| ovs-vsctl set open . external-ids:ovn-cms-options={{ .Values.conf.ovn_cms_options }} |
| fi |
| |
| +{{ if .Values.conf.ovn_bridge_datapath_type -}} |
| +ovs-vsctl set open . external-ids:ovn-bridge-datapath-type="{{ .Values.conf.ovn_bridge_datapath_type }}" |
| +{{- end }} |
| + |
| # Configure hostname |
| {{- if .Values.pod.use_fqdn.compute }} |
| ovs-vsctl set open . external-ids:hostname="$(hostname -f)" |
| diff --git a/ovn/templates/clusterrole-controller.yaml b/ovn/templates/clusterrole-controller.yaml |
| new file mode 100644 |
| index 00000000..8291f65a |
| --- /dev/null |
| +++ b/ovn/templates/clusterrole-controller.yaml |
| @@ -0,0 +1,12 @@ |
| +apiVersion: rbac.authorization.k8s.io/v1 |
| +kind: ClusterRole |
| +metadata: |
| + name: ovn-controller |
| +rules: |
| +- apiGroups: |
| + - "" |
| + resources: |
| + - nodes |
| + verbs: |
| + - get |
| + - patch |
| diff --git a/ovn/templates/clusterrolebinding-controller.yaml b/ovn/templates/clusterrolebinding-controller.yaml |
| new file mode 100644 |
| index 00000000..c95ef5e9 |
| --- /dev/null |
| +++ b/ovn/templates/clusterrolebinding-controller.yaml |
| @@ -0,0 +1,15 @@ |
| +apiVersion: rbac.authorization.k8s.io/v1 |
| +kind: ClusterRoleBinding |
| +metadata: |
| + name: ovn-controller |
| +roleRef: |
| + apiGroup: rbac.authorization.k8s.io |
| + kind: ClusterRole |
| + name: ovn-controller |
| +subjects: |
| +- kind: ServiceAccount |
| + name: ovn-controller |
| + namespace: {{ .Release.Namespace }} |
| +- kind: ServiceAccount |
| + name: ovn-controller-gw |
| + namespace: {{ .Release.Namespace }} |
| diff --git a/ovn/templates/configmap-bin.yaml b/ovn/templates/configmap-bin.yaml |
| index a849dd8a..82001f99 100644 |
| --- a/ovn/templates/configmap-bin.yaml |
| +++ b/ovn/templates/configmap-bin.yaml |
| @@ -24,12 +24,6 @@ data: |
| image-repo-sync.sh: | |
| {{- include "helm-toolkit.scripts.image_repo_sync" . | indent 4 }} |
| {{- end }} |
| - ovsdb-server.sh: | |
| -{{ tuple "bin/_ovsdb-server.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} |
| - ovn-northd.sh: | |
| -{{ tuple "bin/_ovn-northd.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} |
| ovn-controller-init.sh: | |
| {{ tuple "bin/_ovn-controller-init.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} |
| - ovn-controller.sh: | |
| -{{ tuple "bin/_ovn-controller.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} |
| {{- end }} |
| diff --git a/ovn/templates/daemonset-controller.yaml b/ovn/templates/daemonset-controller.yaml |
| index 4cd5d9b2..fae94512 100644 |
| --- a/ovn/templates/daemonset-controller.yaml |
| +++ b/ovn/templates/daemonset-controller.yaml |
| @@ -12,6 +12,15 @@ See the License for the specific language governing permissions and |
| limitations under the License. |
| */}} |
| |
| +{{- define "controllerReadinessProbeTemplate" }} |
| +exec: |
| + command: |
| + - /usr/bin/ovn-kube-util |
| + - readiness-probe |
| + - -t |
| + - ovn-controller |
| +{{- end }} |
| + |
| {{- if .Values.manifests.daemonset_ovn_controller }} |
| {{- $envAll := . }} |
| |
| @@ -106,6 +106,11 @@ spec: |
| {{ tuple $envAll "ovn_controller" | include "helm-toolkit.snippets.image" | indent 10 }} |
| command: |
| - /tmp/ovn-controller-init.sh |
| + env: |
| + - name: NODE_NAME |
| + valueFrom: |
| + fieldRef: |
| + fieldPath: spec.nodeName |
| volumeMounts: |
| - name: ovn-bin |
| mountPath: /tmp/ovn-controller-init.sh |
| @@ -117,17 +122,23 @@ spec: |
| {{ tuple $envAll $envAll.Values.pod.resources.server | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} |
| {{ dict "envAll" $envAll "application" "ovn_controller" "container" "controller" | include "helm-toolkit.snippets.kubernetes_container_security_context" | indent 10 }} |
| command: |
| - - /tmp/ovn-controller.sh |
| - - start |
| - lifecycle: |
| - preStop: |
| - exec: |
| - command: |
| - - /tmp/ovn-controller.sh |
| - - stop |
| + - /root/ovnkube.sh |
| + - ovn-controller |
| +{{ dict "envAll" . "component" "ovn_controller" "container" "controller" "type" "readiness" "probeTemplate" (include "controllerReadinessProbeTemplate" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} |
| + env: |
| + - name: OVN_DAEMONSET_VERSION |
| + value: "3" |
| + - name: OVN_LOGLEVEL_CONTROLLER |
| + value: "-vconsole:info -vfile:info" |
| + - name: OVN_KUBERNETES_NAMESPACE |
| + valueFrom: |
| + fieldRef: |
| + fieldPath: metadata.namespace |
| + - name: OVN_KUBERNETES_NB_STATEFULSET |
| + value: ovn-ovsdb-nb |
| + - name: OVN_KUBERNETES_SB_STATEFULSET |
| + value: ovn-ovsdb-sb |
| + - name: OVN_SSL_ENABLE |
| + value: "no" |
| volumeMounts: |
| - - name: ovn-bin |
| - mountPath: /tmp/ovn-controller.sh |
| - subPath: ovn-controller.sh |
| - readOnly: true |
| - name: run-openvswitch |
| @@ -154,7 +154,7 @@ spec: |
| mountPath: /run/openvswitch |
| - name: logs |
| mountPath: /var/log/ovn |
| - - name: run-ovn |
| + - name: run-openvswitch |
| mountPath: /run/ovn |
| {{- if .Values.pod.sidecars.vector }} |
| - name: vector |
| diff --git a/ovn/templates/deployment-northd.yaml b/ovn/templates/deployment-northd.yaml |
| index e3afdd05..ae31b357 100644 |
| --- a/ovn/templates/deployment-northd.yaml |
| +++ b/ovn/templates/deployment-northd.yaml |
| @@ -12,18 +12,13 @@ See the License for the specific language governing permissions and |
| limitations under the License. |
| */}} |
| |
| -{{- define "livenessProbeTemplate" }} |
| +{{- define "northdReadinessProbeTemplate" }} |
| exec: |
| command: |
| - - /tmp/ovn-northd.sh |
| - - liveness |
| -{{- end }} |
| - |
| -{{- define "readinessProbeTemplate" }} |
| -exec: |
| - command: |
| - - /tmp/ovn-northd.sh |
| - - readiness |
| + - /usr/bin/ovn-kube-util |
| + - readiness-probe |
| + - -t |
| + - ovn-northd |
| {{- end }} |
| |
| {{- if .Values.manifests.deployment_northd }} |
| @@ -60,28 +55,27 @@ spec: |
| {{- tuple $envAll "ovn_northd" list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }} |
| containers: |
| - name: northd |
| + command: |
| + - /root/ovnkube.sh |
| + - run-ovn-northd |
| {{ tuple $envAll "ovn_northd" | include "helm-toolkit.snippets.image" | indent 10 }} |
| {{ tuple $envAll $envAll.Values.pod.resources.server | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} |
| {{ dict "envAll" $envAll "application" "ovn_northd" "container" "northd" | include "helm-toolkit.snippets.kubernetes_container_security_context" | indent 10 }} |
| -{{ dict "envAll" . "component" "ovn_northd" "container" "northd" "type" "liveness" "probeTemplate" (include "livenessProbeTemplate" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} |
| -{{ dict "envAll" . "component" "ovn_northd" "container" "northd" "type" "readiness" "probeTemplate" (include "readinessProbeTemplate" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} |
| - command: |
| - - /tmp/ovn-northd.sh |
| - - start |
| - lifecycle: |
| - preStop: |
| - exec: |
| - command: |
| - - /tmp/ovn-northd.sh |
| - - stop |
| - volumeMounts: |
| - - name: ovn-bin |
| - mountPath: /tmp/ovn-northd.sh |
| - subPath: ovn-northd.sh |
| - readOnly: true |
| - volumes: |
| - - name: ovn-bin |
| - configMap: |
| - name: ovn-bin |
| - defaultMode: 0555 |
| +{{ dict "envAll" . "component" "ovn_northd" "container" "northd" "type" "readiness" "probeTemplate" (include "northdReadinessProbeTemplate" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} |
| +{{ dict "envAll" . "component" "ovn_northd" "container" "northd" "type" "liveness" "probeTemplate" (include "northdReadinessProbeTemplate" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} |
| + env: |
| + - name: OVN_DAEMONSET_VERSION |
| + value: "3" |
| + - name: OVN_LOGLEVEL_NORTHD |
| + value: "-vconsole:info -vfile:info" |
| + - name: OVN_KUBERNETES_NAMESPACE |
| + valueFrom: |
| + fieldRef: |
| + fieldPath: metadata.namespace |
| + - name: OVN_KUBERNETES_NB_STATEFULSET |
| + value: ovn-ovsdb-nb |
| + - name: OVN_KUBERNETES_SB_STATEFULSET |
| + value: ovn-ovsdb-sb |
| + - name: OVN_SSL_ENABLE |
| + value: "no" |
| {{- end }} |
| diff --git a/ovn/templates/role-controller.yaml b/ovn/templates/role-controller.yaml |
| new file mode 100644 |
| index 00000000..de3cfa6d |
| --- /dev/null |
| +++ b/ovn/templates/role-controller.yaml |
| @@ -0,0 +1,11 @@ |
| +apiVersion: rbac.authorization.k8s.io/v1 |
| +kind: Role |
| +metadata: |
| + name: ovn-controller |
| +rules: |
| +- apiGroups: |
| + - discovery.k8s.io |
| + resources: |
| + - endpointslices |
| + verbs: |
| + - list |
| diff --git a/ovn/templates/role-northd.yaml b/ovn/templates/role-northd.yaml |
| new file mode 100644 |
| index 00000000..ca02fae6 |
| --- /dev/null |
| +++ b/ovn/templates/role-northd.yaml |
| @@ -0,0 +1,11 @@ |
| +apiVersion: rbac.authorization.k8s.io/v1 |
| +kind: Role |
| +metadata: |
| + name: ovn-northd |
| +rules: |
| +- apiGroups: |
| + - discovery.k8s.io |
| + resources: |
| + - endpointslices |
| + verbs: |
| + - list |
| diff --git a/ovn/templates/role-ovsdb.yaml b/ovn/templates/role-ovsdb.yaml |
| new file mode 100644 |
| index 00000000..10e0e239 |
| --- /dev/null |
| +++ b/ovn/templates/role-ovsdb.yaml |
| @@ -0,0 +1,19 @@ |
| +apiVersion: rbac.authorization.k8s.io/v1 |
| +kind: Role |
| +metadata: |
| + name: ovn-ovsdb |
| +rules: |
| +- apiGroups: |
| + - "apps" |
| + resources: |
| + - statefulsets |
| + verbs: |
| + - get |
| +- apiGroups: |
| + - "" |
| + resources: |
| + - pods |
| + - endpoints |
| + verbs: |
| + - list |
| + - get |
| diff --git a/ovn/templates/rolebinding-controller.yaml b/ovn/templates/rolebinding-controller.yaml |
| new file mode 100644 |
| index 00000000..7973c7e2 |
| --- /dev/null |
| +++ b/ovn/templates/rolebinding-controller.yaml |
| @@ -0,0 +1,13 @@ |
| +apiVersion: rbac.authorization.k8s.io/v1 |
| +kind: RoleBinding |
| +metadata: |
| + name: ovn-controller |
| +roleRef: |
| + apiGroup: rbac.authorization.k8s.io |
| + kind: Role |
| + name: ovn-controller |
| +subjects: |
| +- kind: ServiceAccount |
| + name: ovn-controller |
| +- kind: ServiceAccount |
| + name: ovn-controller-gw |
| diff --git a/ovn/templates/rolebinding-northd.yaml b/ovn/templates/rolebinding-northd.yaml |
| new file mode 100644 |
| index 00000000..428a4707 |
| --- /dev/null |
| +++ b/ovn/templates/rolebinding-northd.yaml |
| @@ -0,0 +1,11 @@ |
| +apiVersion: rbac.authorization.k8s.io/v1 |
| +kind: RoleBinding |
| +metadata: |
| + name: ovn-northd |
| +roleRef: |
| + apiGroup: rbac.authorization.k8s.io |
| + kind: Role |
| + name: ovn-northd |
| +subjects: |
| +- kind: ServiceAccount |
| + name: ovn-northd |
| diff --git a/ovn/templates/rolebinding-ovsdb.yaml b/ovn/templates/rolebinding-ovsdb.yaml |
| new file mode 100644 |
| index 00000000..f32382bc |
| --- /dev/null |
| +++ b/ovn/templates/rolebinding-ovsdb.yaml |
| @@ -0,0 +1,13 @@ |
| +apiVersion: rbac.authorization.k8s.io/v1 |
| +kind: RoleBinding |
| +metadata: |
| + name: ovn-ovsdb |
| +roleRef: |
| + apiGroup: rbac.authorization.k8s.io |
| + kind: Role |
| + name: ovn-ovsdb |
| +subjects: |
| +- kind: ServiceAccount |
| + name: ovn-ovsdb-nb |
| +- kind: ServiceAccount |
| + name: ovn-ovsdb-sb |
| diff --git a/ovn/templates/service-ovsdb-nb.yaml b/ovn/templates/service-ovsdb-nb.yaml |
| index b93da9b8..56f7cd09 100644 |
| --- a/ovn/templates/service-ovsdb-nb.yaml |
| +++ b/ovn/templates/service-ovsdb-nb.yaml |
| @@ -20,6 +20,7 @@ kind: Service |
| metadata: |
| name: {{ tuple "ovn-ovsdb-nb" "direct" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }} |
| spec: |
| + publishNotReadyAddresses: true |
| ports: |
| - name: ovsdb |
| port: {{ tuple "ovn-ovsdb-nb" "internal" "ovsdb" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }} |
| diff --git a/ovn/templates/service-ovsdb-sb.yaml b/ovn/templates/service-ovsdb-sb.yaml |
| index 70f62c6e..4a6b5864 100644 |
| --- a/ovn/templates/service-ovsdb-sb.yaml |
| +++ b/ovn/templates/service-ovsdb-sb.yaml |
| @@ -20,6 +20,7 @@ kind: Service |
| metadata: |
| name: {{ tuple "ovn-ovsdb-sb" "direct" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }} |
| spec: |
| + publishNotReadyAddresses: true |
| ports: |
| - name: ovsdb |
| port: {{ tuple "ovn-ovsdb-sb" "internal" "ovsdb" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }} |
| diff --git a/ovn/templates/statefulset-ovsdb-nb.yaml b/ovn/templates/statefulset-ovsdb-nb.yaml |
| index 04958165..98e70ada 100644 |
| --- a/ovn/templates/statefulset-ovsdb-nb.yaml |
| +++ b/ovn/templates/statefulset-ovsdb-nb.yaml |
| @@ -12,6 +12,19 @@ See the License for the specific language governing permissions and |
| limitations under the License. |
| */}} |
| |
| +{{- define "ovnnbReadinessProbeTemplate" }} |
| +exec: |
| + command: |
| + - /usr/bin/ovn-kube-util |
| + - readiness-probe |
| + - -t |
| +{{- if gt (int .Values.pod.replicas.ovn_ovsdb_nb) 1 }} |
| + - ovnnb-db-raft |
| +{{- else }} |
| + - ovnnb-db |
| +{{- end }} |
| +{{- end }} |
| + |
| {{- if .Values.manifests.statefulset_ovn_ovsdb_nb }} |
| {{- $envAll := . }} |
| |
| @@ -28,6 +41,7 @@ metadata: |
| {{ tuple $envAll "ovn" "ovn-ovsdb-nb" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} |
| spec: |
| serviceName: {{ tuple "ovn-ovsdb-nb" "direct" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }} |
| + podManagementPolicy: Parallel |
| replicas: {{ .Values.pod.replicas.ovn_ovsdb_nb }} |
| selector: |
| matchLabels: |
| @@ -49,43 +63,57 @@ spec: |
| {{- tuple $envAll "ovn_ovsdb_nb" list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }} |
| containers: |
| - name: ovsdb |
| + command: |
| + - /root/ovnkube.sh |
| +{{- if gt (int .Values.pod.replicas.ovn_ovsdb_nb) 1 }} |
| + - nb-ovsdb-raft |
| +{{- else }} |
| + - nb-ovsdb |
| +{{- end }} |
| {{ tuple $envAll "ovn_ovsdb_nb" | include "helm-toolkit.snippets.image" | indent 10 }} |
| {{ tuple $envAll $envAll.Values.pod.resources.server | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} |
| +{{ dict "envAll" . "component" "ovn_ovsdb_nb" "container" "ovsdb" "type" "readiness" "probeTemplate" (include "ovnnbReadinessProbeTemplate" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} |
| + |
| ports: |
| - containerPort: {{ tuple "ovn-ovsdb-nb" "internal" "ovsdb" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }} |
| - containerPort: {{ tuple "ovn-ovsdb-nb" "internal" "raft" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }} |
| env: |
| - - name: OVS_DATABASE |
| - value: nb |
| - - name: OVS_PORT |
| + - name: OVN_DAEMONSET_VERSION |
| + value: "3" |
| + - name: OVN_LOGLEVEL_NB |
| + value: "-vconsole:info -vfile:info" |
| + - name: OVN_KUBERNETES_NAMESPACE |
| + valueFrom: |
| + fieldRef: |
| + fieldPath: metadata.namespace |
| + - name: OVN_KUBERNETES_STATEFULSET |
| + value: ovn-ovsdb-nb |
| + - name: POD_NAME |
| + valueFrom: |
| + fieldRef: |
| + fieldPath: metadata.name |
| + - name: OVN_SSL_ENABLE |
| + value: "no" |
| + - name: ENABLE_IPSEC |
| + value: "false" |
| + - name: OVN_NB_RAFT_ELECTION_TIMER |
| + value: "1000" |
| + - name: OVN_NB_PORT |
| value: {{ tuple "ovn-ovsdb-nb" "internal" "ovsdb" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | quote }} |
| - command: |
| - - /tmp/ovsdb-server.sh |
| - - start |
| - lifecycle: |
| - preStop: |
| - exec: |
| - command: |
| - - /tmp/ovsdb-server.sh |
| - - stop |
| + - name: OVN_NB_RAFT_PORT |
| + value: {{ tuple "ovn-ovsdb-nb" "internal" "raft" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | quote }} |
| volumeMounts: |
| - - name: ovn-bin |
| - mountPath: /tmp/ovsdb-server.sh |
| - subPath: ovsdb-server.sh |
| - readOnly: true |
| - name: run-openvswitch |
| - mountPath: /run/openvswitch |
| + mountPath: /var/run/openvswitch |
| + - name: run-openvswitch |
| + mountPath: /var/run/ovn |
| - name: data |
| - mountPath: {{ $envAll.Values.volume.ovn_ovsdb_nb.path }} |
| + mountPath: /etc/ovn |
| volumes: |
| - name: run-openvswitch |
| hostPath: |
| path: /run/openvswitch |
| type: DirectoryOrCreate |
| - - name: ovn-bin |
| - configMap: |
| - name: ovn-bin |
| - defaultMode: 0555 |
| {{- if not .Values.volume.ovn_ovsdb_nb.enabled }} |
| - name: data |
| emptyDir: {} |
| diff --git a/ovn/templates/statefulset-ovsdb-sb.yaml b/ovn/templates/statefulset-ovsdb-sb.yaml |
| index 9e7b6670..694348b2 100644 |
| --- a/ovn/templates/statefulset-ovsdb-sb.yaml |
| +++ b/ovn/templates/statefulset-ovsdb-sb.yaml |
| @@ -12,6 +12,19 @@ See the License for the specific language governing permissions and |
| limitations under the License. |
| */}} |
| |
| +{{- define "ovnsbReadinessProbeTemplate" }} |
| +exec: |
| + command: |
| + - /usr/bin/ovn-kube-util |
| + - readiness-probe |
| + - -t |
| +{{- if gt (int .Values.pod.replicas.ovn_ovsdb_sb) 1 }} |
| + - ovnsb-db-raft |
| +{{- else }} |
| + - ovnsb-db |
| +{{- end }} |
| +{{- end }} |
| + |
| {{- if .Values.manifests.statefulset_ovn_ovsdb_sb }} |
| {{- $envAll := . }} |
| |
| @@ -28,6 +41,7 @@ metadata: |
| {{ tuple $envAll "ovn" "ovn-ovsdb-sb" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} |
| spec: |
| serviceName: {{ tuple "ovn-ovsdb-sb" "direct" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }} |
| + podManagementPolicy: Parallel |
| replicas: {{ .Values.pod.replicas.ovn_ovsdb_sb }} |
| selector: |
| matchLabels: |
| @@ -49,43 +63,56 @@ spec: |
| {{- tuple $envAll "ovn_ovsdb_sb" list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }} |
| containers: |
| - name: ovsdb |
| + command: |
| + - /root/ovnkube.sh |
| +{{- if gt (int .Values.pod.replicas.ovn_ovsdb_sb) 1 }} |
| + - sb-ovsdb-raft |
| +{{- else }} |
| + - sb-ovsdb |
| +{{- end }} |
| {{ tuple $envAll "ovn_ovsdb_sb" | include "helm-toolkit.snippets.image" | indent 10 }} |
| {{ tuple $envAll $envAll.Values.pod.resources.server | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} |
| +{{ dict "envAll" . "component" "ovn_ovsdb_sb" "container" "ovsdb" "type" "readiness" "probeTemplate" (include "ovnsbReadinessProbeTemplate" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} |
| ports: |
| - containerPort: {{ tuple "ovn-ovsdb-sb" "internal" "ovsdb" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }} |
| - containerPort: {{ tuple "ovn-ovsdb-sb" "internal" "raft" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }} |
| env: |
| - - name: OVS_DATABASE |
| - value: sb |
| - - name: OVS_PORT |
| + - name: OVN_DAEMONSET_VERSION |
| + value: "3" |
| + - name: OVN_LOGLEVEL_SB |
| + value: "-vconsole:info -vfile:info" |
| + - name: OVN_KUBERNETES_NAMESPACE |
| + valueFrom: |
| + fieldRef: |
| + fieldPath: metadata.namespace |
| + - name: OVN_KUBERNETES_STATEFULSET |
| + value: ovn-ovsdb-sb |
| + - name: POD_NAME |
| + valueFrom: |
| + fieldRef: |
| + fieldPath: metadata.name |
| + - name: OVN_SSL_ENABLE |
| + value: "no" |
| + - name: ENABLE_IPSEC |
| + value: "false" |
| + - name: OVN_SB_RAFT_ELECTION_TIMER |
| + value: "1000" |
| + - name: OVN_SB_PORT |
| value: {{ tuple "ovn-ovsdb-sb" "internal" "ovsdb" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | quote }} |
| - command: |
| - - /tmp/ovsdb-server.sh |
| - - start |
| - lifecycle: |
| - preStop: |
| - exec: |
| - command: |
| - - /tmp/ovsdb-server.sh |
| - - stop |
| + - name: OVN_SB_RAFT_PORT |
| + value: {{ tuple "ovn-ovsdb-sb" "internal" "raft" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | quote }} |
| volumeMounts: |
| - - name: ovn-bin |
| - mountPath: /tmp/ovsdb-server.sh |
| - subPath: ovsdb-server.sh |
| - readOnly: true |
| - name: run-openvswitch |
| - mountPath: /run/openvswitch |
| + mountPath: /var/run/openvswitch |
| + - name: run-openvswitch |
| + mountPath: /var/run/ovn |
| - name: data |
| - mountPath: {{ $envAll.Values.volume.ovn_ovsdb_sb.path }} |
| + mountPath: /etc/ovn |
| volumes: |
| - name: run-openvswitch |
| hostPath: |
| path: /run/openvswitch |
| type: DirectoryOrCreate |
| - - name: ovn-bin |
| - configMap: |
| - name: ovn-bin |
| - defaultMode: 0555 |
| {{- if not .Values.volume.ovn_ovsdb_sb.enabled }} |
| - name: data |
| emptyDir: {} |
| @@ -95,10 +122,10 @@ spec: |
| name: data |
| spec: |
| accessModes: ["ReadWriteOnce"] |
| + storageClassName: {{ $envAll.Values.volume.ovn_ovsdb_sb.class_name }} |
| resources: |
| requests: |
| storage: {{ $envAll.Values.volume.ovn_ovsdb_sb.size }} |
| - storageClassName: {{ $envAll.Values.volume.ovn_ovsdb_sb.class_name }} |
| {{- end }} |
| |
| {{- end }} |
| diff --git a/ovn/values.yaml b/ovn/values.yaml |
| index a18184ab..b07a0f5a 100644 |
| --- a/ovn/values.yaml |
| +++ b/ovn/values.yaml |
| @@ -51,12 +51,10 @@ labels: |
| |
| volume: |
| ovn_ovsdb_nb: |
| - path: /var/lib/ovn |
| enabled: true |
| class_name: general |
| size: 5Gi |
| ovn_ovsdb_sb: |
| - path: /var/lib/ovn |
| enabled: true |
| class_name: general |
| size: 5Gi |
| @@ -76,6 +74,8 @@ conf: |
| ovn_encap_type: geneve |
| ovn_bridge: br-int |
| ovn_bridge_mappings: external:br-ex |
| + # For DPDK enabled environments, enable netdev datapath type for br-int |
| + # ovn_bridge_datapath_type: netdev |
| |
| # auto_bridge_add: |
| # br-private: eth0 |
| @@ -135,13 +135,41 @@ pod: |
| readiness: |
| enabled: true |
| params: |
| - initialDelaySeconds: 5 |
| - timeoutSeconds: 10 |
| - liveness: |
| + initialDelaySeconds: 30 |
| + timeoutSeconds: 30 |
| + periodSeconds: 60 |
| + ovn_ovsdb_nb: |
| + ovsdb: |
| + readiness: |
| + enabled: true |
| + params: |
| + initialDelaySeconds: 30 |
| + timeoutSeconds: 30 |
| + periodSeconds: 60 |
| + ovn_ovsdb_sb: |
| + ovsdb: |
| + readiness: |
| + enabled: true |
| + params: |
| + initialDelaySeconds: 30 |
| + timeoutSeconds: 30 |
| + periodSeconds: 60 |
| + ovn_controller: |
| + controller: |
| + readiness: |
| + enabled: true |
| + params: |
| + initialDelaySeconds: 30 |
| + timeoutSeconds: 30 |
| + periodSeconds: 60 |
| + ovn_controller_gw: |
| + controller: |
| + readiness: |
| enabled: true |
| params: |
| - initialDelaySeconds: 5 |
| - timeoutSeconds: 10 |
| + initialDelaySeconds: 30 |
| + timeoutSeconds: 30 |
| + periodSeconds: 60 |
| dns_policy: "ClusterFirstWithHostNet" |
| replicas: |
| ovn_ovsdb_nb: 1 |
| @@ -176,18 +204,18 @@ pod: |
| ovs: |
| ovn_ovsdb_nb: |
| requests: |
| - memory: "128Mi" |
| + memory: "384Mi" |
| cpu: "100m" |
| limits: |
| memory: "1024Mi" |
| - cpu: "2000m" |
| + cpu: "1000m" |
| ovn_ovsdb_sb: |
| requests: |
| - memory: "128Mi" |
| + memory: "384Mi" |
| cpu: "100m" |
| limits: |
| memory: "1024Mi" |
| - cpu: "2000m" |
| + cpu: "1000m" |
| ovn_northd: |
| requests: |
| memory: "128Mi" |
| diff --git b/ovn/templates/bin/_ovn-controller.sh.tpl a/charts/ovn/templates/bin/_ovn-controller.sh.tpl |
| deleted file mode 100644 |
| index ecb659d2..00000000 |
| --- b/ovn/templates/bin/_ovn-controller.sh.tpl |
| +++ /dev/null |
| @@ -1,39 +0,0 @@ |
| -#!/bin/bash -xe |
| - |
| -# Copyright 2023 VEXXHOST, Inc. |
| -# |
| -# Licensed under the Apache License, Version 2.0 (the "License"); |
| -# you may not use this file except in compliance with the License. |
| -# You may obtain a copy of the License at |
| -# |
| -# http://www.apache.org/licenses/LICENSE-2.0 |
| -# |
| -# Unless required by applicable law or agreed to in writing, software |
| -# distributed under the License is distributed on an "AS IS" BASIS, |
| -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| -# See the License for the specific language governing permissions and |
| -# limitations under the License. |
| - |
| -COMMAND="${@:-start}" |
| - |
| -function start () { |
| - /usr/share/ovn/scripts/ovn-ctl start_controller \ |
| - --ovn-manage-ovsdb=no |
| - |
| - tail --follow=name /var/log/ovn/ovn-controller.log |
| -} |
| - |
| -function stop () { |
| - /usr/share/ovn/scripts/ovn-ctl stop_controller |
| - pkill tail |
| -} |
| - |
| -function liveness () { |
| - ovs-appctl -t /var/run/ovn/ovn-controller.$(cat /var/run/ovn/ovn-controller.pid).ctl status |
| -} |
| - |
| -function readiness () { |
| - ovs-appctl -t /var/run/ovn/ovn-controller.$(cat /var/run/ovn/ovn-controller.pid).ctl status |
| -} |
| - |
| -$COMMAND |
| diff --git b/ovn/templates/bin/_ovn-northd.sh.tpl a/charts/ovn/templates/bin/_ovn-northd.sh.tpl |
| deleted file mode 100644 |
| index fefd793c..00000000 |
| --- b/ovn/templates/bin/_ovn-northd.sh.tpl |
| +++ /dev/null |
| @@ -1,57 +0,0 @@ |
| -#!/bin/bash -xe |
| - |
| -# Copyright 2023 VEXXHOST, Inc. |
| -# |
| -# Licensed under the Apache License, Version 2.0 (the "License"); |
| -# you may not use this file except in compliance with the License. |
| -# You may obtain a copy of the License at |
| -# |
| -# http://www.apache.org/licenses/LICENSE-2.0 |
| -# |
| -# Unless required by applicable law or agreed to in writing, software |
| -# distributed under the License is distributed on an "AS IS" BASIS, |
| -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| -# See the License for the specific language governing permissions and |
| -# limitations under the License. |
| - |
| -COMMAND="${@:-start}" |
| - |
| -{{- $nb_svc_name := "ovn-ovsdb-nb" -}} |
| -{{- $nb_svc := (tuple $nb_svc_name "internal" . | include "helm-toolkit.endpoints.hostname_fqdn_endpoint_lookup") -}} |
| -{{- $nb_port := (tuple "ovn-ovsdb-nb" "internal" "ovsdb" . | include "helm-toolkit.endpoints.endpoint_port_lookup") -}} |
| -{{- $nb_service_list := list -}} |
| -{{- range $i := until (.Values.pod.replicas.ovn_ovsdb_nb | int) -}} |
| - {{- $nb_service_list = printf "tcp:%s-%d.%s:%s" $nb_svc_name $i $nb_svc $nb_port | append $nb_service_list -}} |
| -{{- end -}} |
| - |
| -{{- $sb_svc_name := "ovn-ovsdb-sb" -}} |
| -{{- $sb_svc := (tuple $sb_svc_name "internal" . | include "helm-toolkit.endpoints.hostname_fqdn_endpoint_lookup") -}} |
| -{{- $sb_port := (tuple "ovn-ovsdb-sb" "internal" "ovsdb" . | include "helm-toolkit.endpoints.endpoint_port_lookup") -}} |
| -{{- $sb_service_list := list -}} |
| -{{- range $i := until (.Values.pod.replicas.ovn_ovsdb_sb | int) -}} |
| - {{- $sb_service_list = printf "tcp:%s-%d.%s:%s" $sb_svc_name $i $sb_svc $sb_port | append $sb_service_list -}} |
| -{{- end }} |
| - |
| -function start () { |
| - /usr/share/ovn/scripts/ovn-ctl start_northd \ |
| - --ovn-manage-ovsdb=no \ |
| - --ovn-northd-nb-db={{ include "helm-toolkit.utils.joinListWithComma" $nb_service_list }} \ |
| - --ovn-northd-sb-db={{ include "helm-toolkit.utils.joinListWithComma" $sb_service_list }} |
| - |
| - tail --follow=name /var/log/ovn/ovn-northd.log |
| -} |
| - |
| -function stop () { |
| - /usr/share/ovn/scripts/ovn-ctl stop_northd |
| - pkill tail |
| -} |
| - |
| -function liveness () { |
| - ovs-appctl -t /var/run/ovn/ovn-northd.$(cat /var/run/ovn/ovn-northd.pid).ctl status |
| -} |
| - |
| -function readiness () { |
| - ovs-appctl -t /var/run/ovn/ovn-northd.$(cat /var/run/ovn/ovn-northd.pid).ctl status |
| -} |
| - |
| -$COMMAND |
| diff --git b/ovn/templates/bin/_ovsdb-server.sh.tpl a/charts/ovn/templates/bin/_ovsdb-server.sh.tpl |
| deleted file mode 100644 |
| index e023505b..00000000 |
| --- b/ovn/templates/bin/_ovsdb-server.sh.tpl |
| +++ /dev/null |
| @@ -1,72 +0,0 @@ |
| -#!/bin/bash -xe |
| - |
| -# Copyright 2023 VEXXHOST, Inc. |
| -# |
| -# Licensed under the Apache License, Version 2.0 (the "License"); |
| -# you may not use this file except in compliance with the License. |
| -# You may obtain a copy of the License at |
| -# |
| -# http://www.apache.org/licenses/LICENSE-2.0 |
| -# |
| -# Unless required by applicable law or agreed to in writing, software |
| -# distributed under the License is distributed on an "AS IS" BASIS, |
| -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| -# See the License for the specific language governing permissions and |
| -# limitations under the License. |
| - |
| -COMMAND="${@:-start}" |
| - |
| -OVSDB_HOST=$(hostname -f) |
| -ARGS=( |
| - --db-${OVS_DATABASE}-create-insecure-remote=yes |
| - --db-${OVS_DATABASE}-cluster-local-proto=tcp |
| - --db-${OVS_DATABASE}-cluster-local-addr=$(hostname -f) |
| -) |
| - |
| -if [[ ! $HOSTNAME == *-0 && $OVSDB_HOST =~ (.+)-([0-9]+)\. ]]; then |
| - OVSDB_BOOTSTRAP_HOST="${BASH_REMATCH[1]}-0.${OVSDB_HOST#*.}" |
| - |
| - ARGS+=( |
| - --db-${OVS_DATABASE}-cluster-remote-proto=tcp |
| - --db-${OVS_DATABASE}-cluster-remote-addr=${OVSDB_BOOTSTRAP_HOST} |
| - ) |
| -fi |
| - |
| -function start () { |
| - /usr/share/ovn/scripts/ovn-ctl start_${OVS_DATABASE}_ovsdb ${ARGS[@]} |
| - |
| - tail --follow=name /var/log/ovn/ovsdb-server-${OVS_DATABASE}.log |
| -} |
| - |
| -function stop () { |
| - /usr/share/ovn/scripts/ovn-ctl stop_${OVS_DATABASE}_ovsdb |
| - pkill tail |
| -} |
| - |
| -function liveness () { |
| - if [[ $OVS_DATABASE == "nb" ]]; then |
| - OVN_DATABASE="Northbound" |
| - elif [[ $OVS_DATABASE == "sb" ]]; then |
| - OVN_DATABASE="Southbound" |
| - else |
| - echo "OVS_DATABASE must be nb or sb" |
| - exit 1 |
| - fi |
| - |
| - ovs-appctl -t /var/run/ovn/ovn${OVS_DATABASE}_db.ctl cluster/status OVN_${OVN_DATABASE} |
| -} |
| - |
| -function readiness () { |
| - if [[ $OVS_DATABASE == "nb" ]]; then |
| - OVN_DATABASE="Northbound" |
| - elif [[ $OVS_DATABASE == "sb" ]]; then |
| - OVN_DATABASE="Southbound" |
| - else |
| - echo "OVS_DATABASE must be nb or sb" |
| - exit 1 |
| - fi |
| - |
| - ovs-appctl -t /var/run/ovn/ovn${OVS_DATABASE}_db.ctl cluster/status OVN_${OVN_DATABASE} |
| -} |
| - |
| -$COMMAND |