Files
openstack-helm-images/ovn/patches/ovn-kubernetes/0002-chore-northd-refactor-to-being-able-to-use-split-svc.patch
ricolin 5af9e622d2 Add OVN Kubernetes support in image build
This will allow us to move OVN to OVN Kubernetes.
Currently Centos stream9 make better platform for ovnkube
compared of ubuntu jammy. It could be just because version
compatibility as Centos stream9 supports more advance version.

Change-Id: I2ec8ebb06a1ab7dca6651f5d1d6f34e417021447
2024-11-22 15:52:49 +08:00

145 lines
4.7 KiB
Diff

From 90851bd77718bc834446ebe2ddf34b8e9383dee8 Mon Sep 17 00:00:00 2001
From: Mohammed Naser <mnaser@vexxhost.com>
Date: Thu, 18 Jan 2024 16:16:11 -0500
Subject: [PATCH 2/2] chore(northd): refactor to being able to use split svcs
---
dist/images/ovnkube.sh | 75 +++++++++++++++++++++++++++++++++---------
1 file changed, 59 insertions(+), 16 deletions(-)
diff --git a/dist/images/ovnkube.sh b/dist/images/ovnkube.sh
index 720b3e14d..1d3059cf8 100755
--- a/dist/images/ovnkube.sh
+++ b/dist/images/ovnkube.sh
@@ -200,6 +200,8 @@ metrics_exporter_port=${OVN_METRICS_EXPORTER_PORT:-9310}
ovn_kubernetes_namespace=${OVN_KUBERNETES_NAMESPACE:-ovn-kubernetes}
ovn_kubernetes_statefulset=${OVN_KUBERNETES_STATEFULSET:-ovnkube-db}
+ovn_kubernetes_nb_statefulset=${OVN_KUBERNETES_NB_STATEFULSET:-ovnkube-db}
+ovn_kubernetes_sb_statefulset=${OVN_KUBERNETES_SB_STATEFULSET:-ovnkube-db}
# namespace used for classifying host network traffic
ovn_host_network_namespace=${OVN_HOST_NETWORK_NAMESPACE:-ovn-host-network}
@@ -374,6 +376,24 @@ wait_for_event() {
done
}
+wait_for_db () {
+ local db=$1
+ local ep=$(get_ovnkube_zone_db_ep ${db})
+
+ echo "Getting the ${ep} ep"
+ # See if ep is available ...
+ IFS=" " read -a ep_hosts <<<"$(kubectl --server=${K8S_APISERVER} --token=${k8s_token} --certificate-authority=${K8S_CACERT} \
+ get endpointslice -n ${ovn_kubernetes_namespace} -l kubernetes.io/service-name=${ep} -o=jsonpath='{range .items[0].endpoints[*]}{.addresses[0]} ')"
+ if [[ ${#ep_hosts[@]} == 0 ]]; then
+ return 1
+ fi
+
+ ep_hosts_string="${ep_hosts[*]}"
+ declare -g -a "ovn_${db}db_hosts=($ep_hosts_string)"
+
+ return 0
+}
+
# The ovnkube-db kubernetes service must be populated with OVN DB service endpoints
# before various OVN K8s containers can come up. This functions checks for that.
# If OVN dbs are configured to listen only on unix sockets, then there will not be
@@ -384,15 +404,18 @@ ready_to_start_node() {
return 0
fi
- ovnkube_db_ep=$(get_ovnkube_zone_db_ep)
- echo "Getting the ${ovnkube_db_ep} ep"
- # See if ep is available ...
- IFS=" " read -a ovn_db_hosts <<<"$(kubectl --server=${K8S_APISERVER} --token=${k8s_token} --certificate-authority=${K8S_CACERT} \
- get ep -n ${ovn_kubernetes_namespace} ${ovnkube_db_ep} -o=jsonpath='{range .subsets[0].addresses[*]}{.ip}{" "}')"
- if [[ ${#ovn_db_hosts[@]} == 0 ]]; then
+ wait_for_db nb
+ if [[ $? != 0 ]]; then
+ return 1
+ fi
+
+ wait_for_db sb
+ if [[ $? != 0 ]]; then
return 1
fi
+
get_ovn_db_vars
+
return 0
}
# wait_for_event ready_to_start_node
@@ -410,17 +433,29 @@ check_ovn_daemonset_version() {
}
get_ovn_db_vars() {
+
+ index=0
ovn_nbdb_str=""
- ovn_sbdb_str=""
- for i in "${ovn_db_hosts[@]}"; do
+ for i in "${ovn_nbdb_hosts[@]}"; do
if [ -n "$ovn_nbdb_str" ]; then
ovn_nbdb_str=${ovn_nbdb_str}","
+ fi
+ host="${ovn_kubernetes_nb_statefulset}-${index}.${ovn_kubernetes_nb_statefulset}.${ovn_kubernetes_namespace}.svc.cluster.local"
+ ovn_nbdb_str=${ovn_nbdb_str}${transport}://${host}:${ovn_nb_port}
+ index=$((index + 1))
+ done
+
+ index=0
+ ovn_sbdb_str=""
+ for i in "${ovn_sbdb_hosts[@]}"; do
+ if [ -n "$ovn_sbdb_str" ]; then
ovn_sbdb_str=${ovn_sbdb_str}","
fi
- ip=$(bracketify $i)
- ovn_nbdb_str=${ovn_nbdb_str}${transport}://${ip}:${ovn_nb_port}
- ovn_sbdb_str=${ovn_sbdb_str}${transport}://${ip}:${ovn_sb_port}
+ host="${ovn_kubernetes_sb_statefulset}-${index}.${ovn_kubernetes_sb_statefulset}.${ovn_kubernetes_namespace}.svc.cluster.local"
+ ovn_sbdb_str=${ovn_sbdb_str}${transport}://${host}:${ovn_sb_port}
+ index=$((index + 1))
done
+
# OVN_NORTH and OVN_SOUTH override derived host
ovn_nbdb=${OVN_NORTH:-$ovn_nbdb_str}
ovn_sbdb=${OVN_SOUTH:-$ovn_sbdb_str}
@@ -730,7 +765,7 @@ set_ovnkube_db_ep() {
ips=("$@")
ovn_zone=$(get_node_zone)
- ovnkube_db_ep=$(get_ovnkube_zone_db_ep)
+ ovnkube_db_ep=$(get_ovnkube_zone_db_ep sb)
echo "=============== setting ${ovnkube_db_ep} endpoints to ${ips[@]}"
# create a new endpoint for the headless onvkube-db service without selectors
kubectl --server=${K8S_APISERVER} --token=${k8s_token} --certificate-authority=${K8S_CACERT} apply -f - <<EOF
@@ -779,12 +814,20 @@ function get_node_zone() {
}
function get_ovnkube_zone_db_ep() {
- zone=$(get_node_zone)
- if [ "$zone" == "global" ]; then
- echo "ovnkube-db"
+ local db=$1
+
+ if [ "$db" == "nb" ]; then
+ ep="${ovn_kubernetes_nb_statefulset}"
else
- echo "ovnkube-db-$zone"
+ ep="${ovn_kubernetes_sb_statefulset}"
fi
+
+ zone=$(get_node_zone)
+ if [ "$zone" != "global" ]; then
+ ep="${ep}-${zone}"
+ fi
+
+ echo "${ep}"
}
# v3 - run nb_ovsdb in a separate container
--
2.42.0