Skip to content

Commit c19ce87

Browse files
committed
Change retention policy of the OVNDBCluster PVCs to be "retained"
Synchronization of the OVN dbs with Neutron is pretty heavy and manual operation it is benefical to not delete those OVN databases when OVNDBCluster's PODs are deleted. To achieve that this patch removes `OwnerReference` attribute from the PVCs created for the OVNDBClusters so that they are not cleaned by the OpenShift's garbage collector and it also changes PersistentVolumeClaimRetentionPolicy when deleted and when scaled to the same `Retain` policy. Depends-On: openshift/release#71153 Closes: #OSPRH-19930 Signed-off-by: Slawek Kaplonski <[email protected]>
1 parent ff94a3e commit c19ce87

File tree

5 files changed

+214
-8
lines changed

5 files changed

+214
-8
lines changed

pkg/ovndbcluster/statefulset.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/openstack-k8s-operators/lib-common/modules/common/affinity"
1919
"github.com/openstack-k8s-operators/lib-common/modules/common/env"
2020
"github.com/openstack-k8s-operators/lib-common/modules/common/tls"
21+
"github.com/openstack-k8s-operators/lib-common/modules/common/util"
2122
ovnv1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1"
2223
ovn_common "github.com/openstack-k8s-operators/ovn-operator/pkg/common"
2324

@@ -245,21 +246,18 @@ func StatefulSet(
245246

246247
// https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention
247248
statefulset.Spec.PersistentVolumeClaimRetentionPolicy = &appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy{
248-
WhenDeleted: appsv1.DeletePersistentVolumeClaimRetentionPolicyType,
249+
WhenDeleted: appsv1.RetainPersistentVolumeClaimRetentionPolicyType,
249250
WhenScaled: appsv1.RetainPersistentVolumeClaimRetentionPolicyType,
250251
}
251252

252-
blockOwnerDeletion := false
253-
ownerRef := metav1.NewControllerRef(instance, instance.GroupVersionKind())
254-
ownerRef.BlockOwnerDeletion = &blockOwnerDeletion
253+
volumeClaimLabels := util.MergeMaps(labels, map[string]string{"owner": instance.Name})
255254

256255
statefulset.Spec.VolumeClaimTemplates = []corev1.PersistentVolumeClaim{
257256
{
258257
ObjectMeta: metav1.ObjectMeta{
259-
Name: instance.Name + PVCSuffixEtcOVN,
260-
Namespace: instance.Namespace,
261-
Labels: labels,
262-
OwnerReferences: []metav1.OwnerReference{*ownerRef},
258+
Name: instance.Name + PVCSuffixEtcOVN,
259+
Namespace: instance.Namespace,
260+
Labels: volumeClaimLabels,
263261
},
264262
Spec: corev1.PersistentVolumeClaimSpec{
265263
AccessModes: []corev1.PersistentVolumeAccessMode{

tests/kuttl/common/assert_sample_deployment.yaml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# - ovsdbserver-sb-0 Service
1818
# - OVNController Daemonset created as many pods as nodes*2
1919
# - OVNControllerOVS Daemonset created as many pods as nodes*2
20+
# - 1 PVC for OVNDBCluster NB
21+
# - 1 PVC for OVNDBCluster SB
2022

2123
apiVersion: ovn.openstack.org/v1beta1
2224
kind: OVNNorthd
@@ -388,3 +390,23 @@ commands:
388390
sb_pod=$(oc get pod -n $NAMESPACE -l service=ovsdbserver-sb -o name|head -1)
389391
oc rsh -n $NAMESPACE ${sb_pod} ovn-sbctl list chassis | grep -q ${host} || exit 1
390392
exit 0
393+
---
394+
apiVersion: v1
395+
kind: PersistentVolumeClaim
396+
metadata:
397+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-0
398+
labels:
399+
owner: ovndbcluster-nb-sample
400+
service: ovsdbserver-nb
401+
status:
402+
phase: Bound
403+
---
404+
apiVersion: v1
405+
kind: PersistentVolumeClaim
406+
metadata:
407+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-0
408+
labels:
409+
owner: ovndbcluster-sb-sample
410+
service: ovsdbserver-sb
411+
status:
412+
phase: Bound

tests/kuttl/tests/ovn_db_delete/02-assert.yaml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44
# - 1 OVNDBCluster CR
55
# - 3 Pods for OVNDBCluster nb CR
6+
# - 3 PVCs for OVNDBCluster nb CR
67
#
78

89
apiVersion: ovn.openstack.org/v1beta1
@@ -45,3 +46,62 @@ spec:
4546
status:
4647
availableReplicas: 3
4748
---
49+
apiVersion: v1
50+
kind: PersistentVolumeClaim
51+
metadata:
52+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-0
53+
labels:
54+
owner: ovndbcluster-nb-sample
55+
service: ovsdbserver-nb
56+
status:
57+
phase: Bound
58+
---
59+
apiVersion: v1
60+
kind: PersistentVolumeClaim
61+
metadata:
62+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-1
63+
labels:
64+
owner: ovndbcluster-nb-sample
65+
service: ovsdbserver-nb
66+
status:
67+
phase: Bound
68+
---
69+
apiVersion: v1
70+
kind: PersistentVolumeClaim
71+
metadata:
72+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-2
73+
labels:
74+
owner: ovndbcluster-nb-sample
75+
service: ovsdbserver-nb
76+
status:
77+
phase: Bound
78+
---
79+
apiVersion: v1
80+
kind: PersistentVolumeClaim
81+
metadata:
82+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-0
83+
labels:
84+
owner: ovndbcluster-sb-sample
85+
service: ovsdbserver-sb
86+
status:
87+
phase: Bound
88+
---
89+
apiVersion: v1
90+
kind: PersistentVolumeClaim
91+
metadata:
92+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-1
93+
labels:
94+
owner: ovndbcluster-sb-sample
95+
service: ovsdbserver-sb
96+
status:
97+
phase: Bound
98+
---
99+
apiVersion: v1
100+
kind: PersistentVolumeClaim
101+
metadata:
102+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-2
103+
labels:
104+
owner: ovndbcluster-sb-sample
105+
service: ovsdbserver-sb
106+
status:
107+
phase: Bound

tests/kuttl/tests/ovn_db_delete/08-assert.yaml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
# - 1 OVNDBCluster CR
55
# - 1 Pod for OVNDBCluster nb CR
66
# - 1 Pod for OVNDBCluster sb CR
7+
# - 3 PVCs for OVNDBCluster nb CR
8+
# - 3 PVCs for OVNDBCluster sb CR
79
#
810

911
apiVersion: ovn.openstack.org/v1beta1
@@ -46,3 +48,62 @@ spec:
4648
status:
4749
availableReplicas: 1
4850
---
51+
apiVersion: v1
52+
kind: PersistentVolumeClaim
53+
metadata:
54+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-0
55+
labels:
56+
owner: ovndbcluster-nb-sample
57+
service: ovsdbserver-nb
58+
status:
59+
phase: Bound
60+
---
61+
apiVersion: v1
62+
kind: PersistentVolumeClaim
63+
metadata:
64+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-1
65+
labels:
66+
owner: ovndbcluster-nb-sample
67+
service: ovsdbserver-nb
68+
status:
69+
phase: Bound
70+
---
71+
apiVersion: v1
72+
kind: PersistentVolumeClaim
73+
metadata:
74+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-2
75+
labels:
76+
owner: ovndbcluster-nb-sample
77+
service: ovsdbserver-nb
78+
status:
79+
phase: Bound
80+
---
81+
apiVersion: v1
82+
kind: PersistentVolumeClaim
83+
metadata:
84+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-0
85+
labels:
86+
owner: ovndbcluster-sb-sample
87+
service: ovsdbserver-sb
88+
status:
89+
phase: Bound
90+
---
91+
apiVersion: v1
92+
kind: PersistentVolumeClaim
93+
metadata:
94+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-1
95+
labels:
96+
owner: ovndbcluster-sb-sample
97+
service: ovsdbserver-sb
98+
status:
99+
phase: Bound
100+
---
101+
apiVersion: v1
102+
kind: PersistentVolumeClaim
103+
metadata:
104+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-2
105+
labels:
106+
owner: ovndbcluster-sb-sample
107+
service: ovsdbserver-sb
108+
status:
109+
phase: Bound
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#
2+
# Check for:
3+
#
4+
# PVCs for OVNDBCluster nb CR is not deleted
5+
# PVCs for OVNDBCluster sb CR is not deleted
6+
#
7+
apiVersion: v1
8+
kind: PersistentVolumeClaim
9+
metadata:
10+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-0
11+
labels:
12+
owner: ovndbcluster-nb-sample
13+
service: ovsdbserver-nb
14+
status:
15+
phase: Bound
16+
---
17+
apiVersion: v1
18+
kind: PersistentVolumeClaim
19+
metadata:
20+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-1
21+
labels:
22+
owner: ovndbcluster-nb-sample
23+
service: ovsdbserver-nb
24+
status:
25+
phase: Bound
26+
---
27+
apiVersion: v1
28+
kind: PersistentVolumeClaim
29+
metadata:
30+
name: ovndbcluster-nb-sample-etc-ovn-ovsdbserver-nb-2
31+
labels:
32+
owner: ovndbcluster-nb-sample
33+
service: ovsdbserver-nb
34+
status:
35+
phase: Bound
36+
---
37+
apiVersion: v1
38+
kind: PersistentVolumeClaim
39+
metadata:
40+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-0
41+
labels:
42+
owner: ovndbcluster-sb-sample
43+
service: ovsdbserver-sb
44+
status:
45+
phase: Bound
46+
---
47+
apiVersion: v1
48+
kind: PersistentVolumeClaim
49+
metadata:
50+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-1
51+
labels:
52+
owner: ovndbcluster-sb-sample
53+
service: ovsdbserver-sb
54+
status:
55+
phase: Bound
56+
---
57+
apiVersion: v1
58+
kind: PersistentVolumeClaim
59+
metadata:
60+
name: ovndbcluster-sb-sample-etc-ovn-ovsdbserver-sb-2
61+
labels:
62+
owner: ovndbcluster-sb-sample
63+
service: ovsdbserver-sb
64+
status:
65+
phase: Bound

0 commit comments

Comments
 (0)