Skip to content

Commit f3b6460

Browse files
committed
chart: fix ovs-ovn upgrade (#3164)
Signed-off-by: 张祖建 <zhangzujian.7@gmail.com>
1 parent ff16355 commit f3b6460

File tree

8 files changed

+106
-57
lines changed

8 files changed

+106
-57
lines changed

.github/workflows/scheduled-e2e.yaml

+5-23
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ jobs:
2525
branch:
2626
- master
2727
- release-1.11
28-
- release-1.10
2928
- release-1.9
3029
- release-1.8
3130
ip-family:
@@ -115,7 +114,6 @@ jobs:
115114
branch:
116115
- master
117116
- release-1.11
118-
- release-1.10
119117
- release-1.9
120118
- release-1.8
121119
ip-family:
@@ -198,7 +196,6 @@ jobs:
198196
branch:
199197
- master
200198
- release-1.11
201-
- release-1.10
202199
- release-1.9
203200
- release-1.8
204201
ip-family:
@@ -281,7 +278,6 @@ jobs:
281278
branch:
282279
- master
283280
- release-1.11
284-
- release-1.10
285281
- release-1.9
286282
- release-1.8
287283
ip-family:
@@ -341,7 +337,6 @@ jobs:
341337
branch:
342338
- master
343339
- release-1.11
344-
- release-1.10
345340
- release-1.9
346341
- release-1.8
347342
ip-family:
@@ -425,7 +420,6 @@ jobs:
425420
branch:
426421
- master
427422
- release-1.11
428-
- release-1.10
429423
- release-1.9
430424
steps:
431425
- uses: actions/checkout@v3
@@ -547,7 +541,6 @@ jobs:
547541
branch:
548542
- master
549543
- release-1.11
550-
- release-1.10
551544
- release-1.9
552545
steps:
553546
- uses: actions/checkout@v3
@@ -598,7 +591,6 @@ jobs:
598591
branch:
599592
- master
600593
- release-1.11
601-
- release-1.10
602594
- release-1.9
603595
- release-1.8
604596
steps:
@@ -652,7 +644,6 @@ jobs:
652644
branch:
653645
- master
654646
- release-1.11
655-
- release-1.10
656647
- release-1.9
657648
- release-1.8
658649
steps:
@@ -918,7 +909,6 @@ jobs:
918909
branch:
919910
- master
920911
- release-1.11
921-
- release-1.10
922912
- release-1.9
923913
- release-1.8
924914
steps:
@@ -969,7 +959,6 @@ jobs:
969959
branch:
970960
- master
971961
- release-1.11
972-
- release-1.10
973962
- release-1.9
974963
- release-1.8
975964
steps:
@@ -1057,7 +1046,6 @@ jobs:
10571046
branch:
10581047
- master
10591048
- release-1.11
1060-
- release-1.10
10611049
- release-1.9
10621050
ssl:
10631051
- "true"
@@ -1148,8 +1136,11 @@ jobs:
11481136
matrix:
11491137
case:
11501138
- release-1.9 => release-1.11
1139+
- release-1.9 => release-1.12
11511140
- release-1.9 => master
1141+
- release-1.11 => release-1.12
11521142
- release-1.11 => master
1143+
- release-1.12 => master
11531144
steps:
11541145
- uses: actions/checkout@v3
11551146
- uses: azure/setup-helm@v3
@@ -1211,7 +1202,7 @@ jobs:
12111202
run: |
12121203
sudo pip3 install j2cli
12131204
sudo pip3 install "j2cli[yaml]"
1214-
sudo PATH=~/.local/bin:$PATH make kind-init
1205+
sudo PATH=~/.local/bin:$PATH make kind-init-ha
12151206
sudo cp -r /root/.kube/ ~/.kube/
12161207
sudo chown -R $(id -un). ~/.kube/
12171208
@@ -1227,16 +1218,7 @@ jobs:
12271218
run: |
12281219
version=$(grep -E '^VERSION="v([0-9]+\.){2}[0-9]+"$' dist/images/install.sh | head -n1 | awk -F= '{print $2}' | tr -d '"')
12291220
docker pull kubeovn/kube-ovn:$version
1230-
1231-
restart_ovs=false
1232-
v1=$(printf "$VERSION_FROM\\nrelease-1.11" | sort -Vr | head -n1)
1233-
v2=$(printf "$VERSION_TO\\nrelease-1.12" | sort -Vr | head -n1)
1234-
if [ $v1 = "release-1.11" ]; then
1235-
if [ $VERSION_TO = "master" -o $VERSION_TO = $v2 ]; then
1236-
restart_ovs=true
1237-
fi
1238-
fi
1239-
CHART_UPGRADE_RESTART_OVS=$restart_ovs VERSION=$version make kind-upgrade-chart
1221+
VERSION=$version make kind-upgrade-chart
12401222
12411223
- name: Run E2E
12421224
env:

Makefile

+17-18
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ endif
2020

2121
CONTROL_PLANE_TAINTS = node-role.kubernetes.io/master node-role.kubernetes.io/control-plane
2222

23-
CHART_UPGRADE_RESTART_OVS=$(shell echo $${CHART_UPGRADE_RESTART_OVS:-false})
24-
2523
MULTUS_VERSION = v4.0.2
2624
MULTUS_IMAGE = ghcr.io/k8snetworkplumbingwg/multus-cni:$(MULTUS_VERSION)-thick
2725
MULTUS_YAML = https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/$(MULTUS_VERSION)/deployments/multus-daemonset-thick.yml
@@ -423,30 +421,31 @@ kind-install-chart: kind-load-image kind-untaint-control-plane
423421
kubectl label node -lbeta.kubernetes.io/os=linux kubernetes.io/os=linux --overwrite
424422
kubectl label node -lnode-role.kubernetes.io/control-plane kube-ovn/role=master --overwrite
425423
kubectl label node -lovn.kubernetes.io/ovs_dp_type!=userspace ovn.kubernetes.io/ovs_dp_type=kernel --overwrite
426-
ips=$$(kubectl get node -lkube-ovn/role=master --no-headers -o wide | awk '{print $$6}') && \
424+
ips=$$(kubectl get node -lkube-ovn/role=master --no-headers -o wide | awk '{print $$6}' | tr '\n' ',' | sed 's/,$$//') && \
427425
helm install kubeovn ./charts \
428426
--set global.images.kubeovn.tag=$(VERSION) \
429-
--set replicaCount=$$(echo $$ips | awk '{print NF}') \
430-
--set MASTER_NODES="$$(echo $$ips | tr \\n ',' | sed -e 's/,$$//' -e 's/,/\\,/g')"
431-
kubectl rollout status deployment/ovn-central -n kube-system --timeout 300s
432-
kubectl rollout status deployment/kube-ovn-controller -n kube-system --timeout 120s
433-
kubectl rollout status daemonset/kube-ovn-cni -n kube-system --timeout 120s
434-
kubectl rollout status daemonset/kube-ovn-pinger -n kube-system --timeout 120s
435-
kubectl rollout status deployment/coredns -n kube-system --timeout 60s
427+
--set replicaCount=$$(echo $$ips | awk -F ',' '{print NF}') \
428+
--set MASTER_NODES="$$(echo $$ips | sed 's/,/\\,/g')"
429+
sleep 60
430+
kubectl -n kube-system rollout status --timeout=1s deployment/ovn-central
431+
kubectl -n kube-system rollout status --timeout=1s daemonset/ovs-ovn
432+
kubectl -n kube-system rollout status --timeout=1s deployment/kube-ovn-controller
433+
kubectl -n kube-system rollout status --timeout=1s daemonset/kube-ovn-cni
434+
kubectl -n kube-system rollout status --timeout=1s daemonset/kube-ovn-pinger
436435

437436
.PHONY: kind-upgrade-chart
438437
kind-upgrade-chart: kind-load-image
439-
$(eval OVN_DB_IPS = $(shell kubectl get no -lkube-ovn/role=master --no-headers -o wide | awk '{print $$6}' | tr \\n ',' | sed -e 's/,$$//' -e 's/,/\\,/g'))
438+
$(eval OVN_DB_IPS = $(shell kubectl get node -lkube-ovn/role=master --no-headers -o wide | awk '{print $$6}' | tr '\n' ',' | sed -e 's/,$$//' -e 's/,/\\,/g'))
440439
helm upgrade kubeovn ./charts \
441440
--set global.images.kubeovn.tag=$(VERSION) \
442441
--set replicaCount=$$(echo $(OVN_DB_IPS) | awk -F ',' '{print NF}') \
443-
--set MASTER_NODES='$(OVN_DB_IPS)' \
444-
--set restart_ovs=$(CHART_UPGRADE_RESTART_OVS)
445-
kubectl rollout status deployment/ovn-central -n kube-system --timeout 300s
446-
kubectl rollout status daemonset/ovs-ovn -n kube-system --timeout 120s
447-
kubectl rollout status deployment/kube-ovn-controller -n kube-system --timeout 120s
448-
kubectl rollout status daemonset/kube-ovn-cni -n kube-system --timeout 120s
449-
kubectl rollout status daemonset/kube-ovn-pinger -n kube-system --timeout 120s
442+
--set MASTER_NODES='$(OVN_DB_IPS)'
443+
sleep 90
444+
kubectl -n kube-system rollout status --timeout=1s deployment/ovn-central
445+
kubectl -n kube-system rollout status --timeout=1s daemonset/ovs-ovn
446+
kubectl -n kube-system rollout status --timeout=1s deployment/kube-ovn-controller
447+
kubectl -n kube-system rollout status --timeout=1s daemonset/kube-ovn-cni
448+
kubectl -n kube-system rollout status --timeout=1s daemonset/kube-ovn-pinger
450449

451450
.PHONY: kind-install
452451
kind-install: kind-load-image

charts/README.md

-6
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,3 @@ $ helm install --debug kubeovn ./kubeovn-helm --set MASTER_NODES=${Node0},${Node
1818
# upgrade to this version
1919
$ helm upgrade --debug kubeovn ./kubeovn-helm --set MASTER_NODES=${Node0},${Node1},${Node2}, --set replicaCount=3
2020
```
21-
22-
If you are upgrading Kube-OVN from versions prior to v1.12, you need to set `restart_ovs` to `true`:
23-
24-
```shell
25-
$ helm upgrade --debug kubeovn ./kubeovn-helm --set MASTER_NODES=${Node0},${Node1},${Node2}, --set replicaCount=3 --set restart_ovs=true
26-
```

charts/templates/post-upgrade.yaml charts/templates/upgrade-ovs-ovn.yaml

+73-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,72 @@
1-
{{ if .Values.restart_ovs }}
1+
{{ if (lookup "apps/v1" "DaemonSet" "kube-system" "ovs-ovn") }}
2+
{{ if eq (lookup "apps/v1" "DaemonSet" "kube-system" "ovs-ovn").spec.updateStrategy.type "OnDelete" }}
3+
---
4+
apiVersion: v1
5+
kind: ServiceAccount
6+
metadata:
7+
name: ovs-ovn-upgrade
8+
namespace: kube-system
9+
annotations:
10+
# This is what defines this resource as a hook. Without this line, the
11+
# job is considered part of the release.
12+
"helm.sh/hook": post-upgrade
13+
"helm.sh/hook-weight": "1"
14+
"helm.sh/hook-delete-policy": hook-succeeded
15+
---
16+
apiVersion: rbac.authorization.k8s.io/v1
17+
kind: ClusterRole
18+
metadata:
19+
annotations:
20+
rbac.authorization.k8s.io/system-only: "true"
21+
# This is what defines this resource as a hook. Without this line, the
22+
# job is considered part of the release.
23+
"helm.sh/hook": post-upgrade
24+
"helm.sh/hook-weight": "2"
25+
"helm.sh/hook-delete-policy": hook-succeeded
26+
name: system:ovs-ovn-upgrade
27+
rules:
28+
- apiGroups:
29+
- apps
30+
resources:
31+
- daemonsets
32+
resourceNames:
33+
- ovs-ovn
34+
verbs:
35+
- get
36+
- apiGroups:
37+
- ""
38+
resources:
39+
- nodes
40+
verbs:
41+
- list
42+
- apiGroups:
43+
- ""
44+
resources:
45+
- pods
46+
verbs:
47+
- list
48+
- get
49+
- delete
50+
---
51+
apiVersion: rbac.authorization.k8s.io/v1
52+
kind: ClusterRoleBinding
53+
metadata:
54+
name: ovs-ovn-upgrade
55+
annotations:
56+
# This is what defines this resource as a hook. Without this line, the
57+
# job is considered part of the release.
58+
"helm.sh/hook": post-upgrade
59+
"helm.sh/hook-weight": "3"
60+
"helm.sh/hook-delete-policy": hook-succeeded
61+
roleRef:
62+
name: system:ovs-ovn-upgrade
63+
kind: ClusterRole
64+
apiGroup: rbac.authorization.k8s.io
65+
subjects:
66+
- kind: ServiceAccount
67+
name: ovs-ovn-upgrade
68+
namespace: kube-system
69+
---
270
apiVersion: batch/v1
371
kind: Job
472
metadata:
@@ -13,7 +81,7 @@ metadata:
1381
# This is what defines this resource as a hook. Without this line, the
1482
# job is considered part of the release.
1583
"helm.sh/hook": post-upgrade
16-
"helm.sh/hook-weight": "-5"
84+
"helm.sh/hook-weight": "4"
1785
"helm.sh/hook-delete-policy": hook-succeeded
1886
spec:
1987
completions: 1
@@ -49,8 +117,8 @@ spec:
49117
hostNetwork: true
50118
nodeSelector:
51119
kubernetes.io/os: "linux"
52-
serviceAccount: ovn
53-
serviceAccountName: ovn
120+
serviceAccount: ovs-ovn-upgrade
121+
serviceAccountName: ovs-ovn-upgrade
54122
containers:
55123
- name: post-upgrade-job
56124
image: "{{ .Values.global.registry.address}}/{{ .Values.global.images.kubeovn.repository }}:{{ .Values.global.images.kubeovn.tag }}"
@@ -71,3 +139,4 @@ spec:
71139
hostPath:
72140
path: /var/log/kube-ovn
73141
{{ end }}
142+
{{ end }}

charts/values.yaml

-2
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,6 @@ imagePullSecrets: []
114114
nameOverride: ""
115115
fullnameOverride: ""
116116

117-
restart_ovs: false
118-
119117
# hybrid dpdk
120118
HYBRID_DPDK: false
121119
HUGEPAGE_SIZE_TYPE: hugepages-2Mi # Default

dist/images/start-ovs.sh

+8-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,14 @@ function quit {
5555
pid=$(/usr/share/ovn/scripts/ovn-ctl status_controller | awk '{print $NF}')
5656
if cgroup_match "${pid}" self; then
5757
/usr/share/ovn/scripts/grace_stop_ovn_controller
58-
/usr/share/openvswitch/scripts/ovs-ctl stop
58+
fi
59+
pid=$(/usr/share/openvswitch/scripts/ovs-ctl status | grep ovsdb-server | awk '{print $NF}')
60+
if cgroup_match "${pid}" self; then
61+
/usr/share/openvswitch/scripts/ovs-ctl --no-ovs-vswitchd stop
62+
fi
63+
pid=$(/usr/share/openvswitch/scripts/ovs-ctl status | grep ovs-vswitchd | awk '{print $NF}')
64+
if cgroup_match "${pid}" self; then
65+
/usr/share/openvswitch/scripts/ovs-ctl --no-ovsdb-server stop
5966
fi
6067
fi
6168

dist/images/upgrade-ovs.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ set -e
55
POD_NAMESPACE=${POD_NAMESPACE:-kube-system}
66

77
dsGenVer=`kubectl -n $POD_NAMESPACE get ds ovs-ovn -o jsonpath={.metadata.generation}`
8+
kubectl -n $POD_NAMESPACE delete pod -l app=ovs,pod-template-generation!=$dsGenVer
9+
810
for node in `kubectl get node -o jsonpath='{.items[*].metadata.name}'`; do
9-
# delete pod with old version
10-
kubectl -n $POD_NAMESPACE delete pod -l app=ovs,pod-template-generation!=$dsGenVer --field-selector spec.nodeName=$node
1111
# wait the pod with new version to be created and delete it
1212
while true; do
1313
pod=`kubectl -n $POD_NAMESPACE get pod -l app=ovs,pod-template-generation=$dsGenVer --field-selector spec.nodeName=$node -o name`

yamls/ovn.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ spec:
214214
updateStrategy:
215215
type: RollingUpdate
216216
rollingUpdate:
217-
maxSurge: 100%
217+
maxSurge: 1
218218
maxUnavailable: 0
219219
template:
220220
metadata:

0 commit comments

Comments
 (0)