Skip to content

Commit 940ed18

Browse files
committed
Address review
1 parent 339784f commit 940ed18

File tree

10 files changed

+97
-80
lines changed

10 files changed

+97
-80
lines changed

docs/administrator.md

+21-9
Original file line numberDiff line numberDiff line change
@@ -620,22 +620,34 @@ By default the topology key for the pod anti affinity is set to
620620
`kubernetes.io/hostname`, you can set another topology key e.g.
621621
`failure-domain.beta.kubernetes.io/zone`. See [built-in node labels](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#interlude-built-in-node-labels) for available topology keys.
622622

623-
## Pod Disruption Budget
623+
## Pod Disruption Budgets
624624

625-
By default the operator uses a PodDisruptionBudget (PDB) to protect the cluster
626-
from voluntarily disruptions and hence unwanted DB downtime. The `MinAvailable`
627-
parameter of the PDB is set to `1` which prevents killing masters in single-node
628-
clusters and/or the last remaining running instance in a multi-node cluster.
625+
By default the operator creates two PodDisruptionBudgets (PDB) to protect the cluster
626+
from voluntarily disruptions and hence unwanted DB downtime: so-called primary PDB and
627+
and PDB for critical operations.
628+
629+
### Primary PDB
630+
The `MinAvailable` parameter of this PDB is set to `1` and, if `pdb_master_label_selector`
631+
is enabled, label selector includes `spilo-role=master` condition, which prevents killing
632+
masters in single-node clusters and/or the last remaining running instance in a multi-node
633+
cluster.
634+
635+
## PDB for critical operations
636+
The `MinAvailable` parameter of this PDB is equal to the `numberOfInstances` set in the
637+
cluster manifest, while label selector includes `critical-operation=true` condition. This
638+
allows to protect all pods of a cluster, given they are labeled accordingly.
639+
For example, Operator labels all Spilo pods with `critical-operation=true` during the major
640+
version upgrade run. You may want to protect cluster pods during other critical operations
641+
by assigning the label to pods yourself or using other means of automation.
629642

630643
The PDB is only relaxed in two scenarios:
631644

632645
* If a cluster is scaled down to `0` instances (e.g. for draining nodes)
633646
* If the PDB is disabled in the configuration (`enable_pod_disruption_budget`)
634647

635-
The PDB is still in place having `MinAvailable` set to `0`. If enabled it will
636-
be automatically set to `1` on scale up. Disabling PDBs helps avoiding blocking
637-
Kubernetes upgrades in managed K8s environments at the cost of prolonged DB
638-
downtime. See PR [#384](https://github.com/zalando/postgres-operator/pull/384)
648+
The PDBs are still in place having `MinAvailable` set to `0`. Disabling PDBs
649+
helps avoiding blocking Kubernetes upgrades in managed K8s environments at the
650+
cost of prolonged DB downtime. See PR [#384](https://github.com/zalando/postgres-operator/pull/384)
639651
for the use case.
640652

641653
## Add cluster-specific labels

docs/quickstart.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ kubectl delete postgresql acid-minimal-cluster
230230
```
231231

232232
This should remove the associated StatefulSet, database Pods, Services and
233-
Endpoints. The PersistentVolumes are released and the PodDisruptionBudget is
233+
Endpoints. The PersistentVolumes are released and the PodDisruptionBudgets are
234234
deleted. Secrets however are not deleted and backups will remain in place.
235235

236236
When deleting a cluster while it is still starting up or got stuck during that

docs/reference/operator_parameters.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,13 @@ configuration they are grouped under the `kubernetes` key.
334334
pod namespace).
335335

336336
* **pdb_name_format**
337-
defines the template for PDB (Pod Disruption Budget) names created by the
337+
defines the template for primary PDB (Pod Disruption Budget) name created by the
338338
operator. The default is `postgres-{cluster}-pdb`, where `{cluster}` is
339339
replaced by the cluster name. Only the `{cluster}` placeholders is allowed in
340340
the template.
341341

342342
* **pdb_master_label_selector**
343-
By default the PDB will match the master role hence preventing nodes to be
343+
By default the primary PDB will match the master role hence preventing nodes to be
344344
drained if the node_readiness_label is not used. If this option if set to
345345
`false` the `spilo-role=master` selector will not be added to the PDB.
346346

e2e/tests/test_e2e.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2547,9 +2547,9 @@ def check_cluster_child_resources_owner_references(self, cluster_name, cluster_n
25472547
self.assertTrue(self.has_postgresql_owner_reference(config_ep.metadata.owner_references, inverse), "config endpoint owner reference check failed")
25482548

25492549
pdb = k8s.api.policy_v1.read_namespaced_pod_disruption_budget("postgres-{}-pdb".format(cluster_name), cluster_namespace)
2550-
self.assertTrue(self.has_postgresql_owner_reference(pdb.metadata.owner_references, inverse), "pod disruption budget owner reference check failed")
2550+
self.assertTrue(self.has_postgresql_owner_reference(pdb.metadata.owner_references, inverse), "primary pod disruption budget owner reference check failed")
25512551

2552-
pdb = k8s.api.policy_v1.read_namespaced_pod_disruption_budget("postgres-{}-critical-operation-pdb".format(cluster_name), cluster_namespace)
2552+
pdb = k8s.api.policy_v1.read_namespaced_pod_disruption_budget("postgres-{}-critical-op-pdb".format(cluster_name), cluster_namespace)
25532553
self.assertTrue(self.has_postgresql_owner_reference(pdb.metadata.owner_references, inverse), "pod disruption budget for critical operations owner reference check failed")
25542554

25552555
pg_secret = k8s.api.core_v1.read_namespaced_secret("postgres.{}.credentials.postgresql.acid.zalan.do".format(cluster_name), cluster_namespace)

pkg/cluster/cluster.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ type kubeResources struct {
6666
Secrets map[types.UID]*v1.Secret
6767
Statefulset *appsv1.StatefulSet
6868
VolumeClaims map[types.UID]*v1.PersistentVolumeClaim
69-
GeneralPodDisruptionBudget *policyv1.PodDisruptionBudget
69+
PrimaryPodDisruptionBudget *policyv1.PodDisruptionBudget
7070
CriticalOpPodDisruptionBudget *policyv1.PodDisruptionBudget
7171
LogicalBackupJob *batchv1.CronJob
7272
Streams map[string]*zalandov1.FabricEventStream
@@ -1735,7 +1735,7 @@ func (c *Cluster) GetStatus() *ClusterStatus {
17351735
MasterService: c.GetServiceMaster(),
17361736
ReplicaService: c.GetServiceReplica(),
17371737
StatefulSet: c.GetStatefulSet(),
1738-
GeneralPodDisruptionBudget: c.GetGeneralPodDisruptionBudget(),
1738+
PrimaryPodDisruptionBudget: c.GetPrimaryPodDisruptionBudget(),
17391739
CriticalOpPodDisruptionBudget: c.GetCriticalOpPodDisruptionBudget(),
17401740
CurrentProcess: c.GetCurrentProcess(),
17411741

pkg/cluster/k8sres.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,12 @@ func (c *Cluster) servicePort(role PostgresRole) int32 {
109109
return pgPort
110110
}
111111

112-
func (c *Cluster) generalPodDisruptionBudgetName() string {
112+
func (c *Cluster) PrimaryPodDisruptionBudgetName() string {
113113
return c.OpConfig.PDBNameFormat.Format("cluster", c.Name)
114114
}
115115

116116
func (c *Cluster) criticalOpPodDisruptionBudgetName() string {
117-
pdbTemplate := config.StringTemplate("postgres-{cluster}-critical-operation-pdb")
117+
pdbTemplate := config.StringTemplate("postgres-{cluster}-critical-op-pdb")
118118
return pdbTemplate.Format("cluster", c.Name)
119119
}
120120

@@ -2212,7 +2212,7 @@ func (c *Cluster) generateStandbyEnvironment(description *acidv1.StandbyDescript
22122212
return result
22132213
}
22142214

2215-
func (c *Cluster) generateGeneralPodDisruptionBudget() *policyv1.PodDisruptionBudget {
2215+
func (c *Cluster) generatePrimaryPodDisruptionBudget() *policyv1.PodDisruptionBudget {
22162216
minAvailable := intstr.FromInt(1)
22172217
pdbEnabled := c.OpConfig.EnablePodDisruptionBudget
22182218
pdbMasterLabelSelector := c.OpConfig.PDBMasterLabelSelector
@@ -2230,7 +2230,7 @@ func (c *Cluster) generateGeneralPodDisruptionBudget() *policyv1.PodDisruptionBu
22302230

22312231
return &policyv1.PodDisruptionBudget{
22322232
ObjectMeta: metav1.ObjectMeta{
2233-
Name: c.generalPodDisruptionBudgetName(),
2233+
Name: c.PrimaryPodDisruptionBudgetName(),
22342234
Namespace: c.Namespace,
22352235
Labels: c.labelsSet(true),
22362236
Annotations: c.annotationsSet(nil),
@@ -2255,7 +2255,7 @@ func (c *Cluster) generateCriticalOpPodDisruptionBudget() *policyv1.PodDisruptio
22552255
}
22562256

22572257
labels := c.labelsSet(false)
2258-
labels["critical-operaton"] = "true"
2258+
labels["critical-operation"] = "true"
22592259

22602260
return &policyv1.PodDisruptionBudget{
22612261
ObjectMeta: metav1.ObjectMeta{

pkg/cluster/k8sres_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -2349,7 +2349,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
23492349
}
23502350
}
23512351

2352-
testLabelsAndSelectors := func(isGeneral bool) func(cluster *Cluster, podDisruptionBudget *policyv1.PodDisruptionBudget) error {
2352+
testLabelsAndSelectors := func(isPrimary bool) func(cluster *Cluster, podDisruptionBudget *policyv1.PodDisruptionBudget) error {
23532353
return func(cluster *Cluster, podDisruptionBudget *policyv1.PodDisruptionBudget) error {
23542354
masterLabelSelectorDisabled := cluster.OpConfig.PDBMasterLabelSelector != nil && !*cluster.OpConfig.PDBMasterLabelSelector
23552355
if podDisruptionBudget.ObjectMeta.Namespace != "myapp" {
@@ -2360,15 +2360,15 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
23602360
return fmt.Errorf("Labels incorrect, got %#v, expected %#v", podDisruptionBudget.Labels, expectedLabels)
23612361
}
23622362
if !masterLabelSelectorDisabled {
2363-
if isGeneral {
2363+
if isPrimary {
23642364
expectedLabels := &metav1.LabelSelector{
23652365
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"}}
23662366
if !reflect.DeepEqual(podDisruptionBudget.Spec.Selector, expectedLabels) {
23672367
return fmt.Errorf("MatchLabels incorrect, got %#v, expected %#v", podDisruptionBudget.Spec.Selector, expectedLabels)
23682368
}
23692369
} else {
23702370
expectedLabels := &metav1.LabelSelector{
2371-
MatchLabels: map[string]string{"cluster-name": "myapp-database", "critical-operaton": "true"}}
2371+
MatchLabels: map[string]string{"cluster-name": "myapp-database", "critical-operation": "true"}}
23722372
if !reflect.DeepEqual(podDisruptionBudget.Spec.Selector, expectedLabels) {
23732373
return fmt.Errorf("MatchLabels incorrect, got %#v, expected %#v", podDisruptionBudget.Spec.Selector, expectedLabels)
23742374
}
@@ -2503,7 +2503,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
25032503
}
25042504

25052505
for _, tt := range tests {
2506-
result := tt.spec.generateGeneralPodDisruptionBudget()
2506+
result := tt.spec.generatePrimaryPodDisruptionBudget()
25072507
for _, check := range tt.check {
25082508
err := check(tt.spec, result)
25092509
if err != nil {
@@ -2530,7 +2530,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
25302530
eventRecorder),
25312531
check: []func(cluster *Cluster, podDisruptionBudget *policyv1.PodDisruptionBudget) error{
25322532
testPodDisruptionBudgetOwnerReference,
2533-
hasName("postgres-myapp-database-critical-operation-pdb"),
2533+
hasName("postgres-myapp-database-critical-op-pdb"),
25342534
hasMinAvailable(3),
25352535
testLabelsAndSelectors(false),
25362536
},
@@ -2547,7 +2547,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
25472547
eventRecorder),
25482548
check: []func(cluster *Cluster, podDisruptionBudget *policyv1.PodDisruptionBudget) error{
25492549
testPodDisruptionBudgetOwnerReference,
2550-
hasName("postgres-myapp-database-critical-operation-pdb"),
2550+
hasName("postgres-myapp-database-critical-op-pdb"),
25512551
hasMinAvailable(0),
25522552
testLabelsAndSelectors(false),
25532553
},
@@ -2564,7 +2564,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
25642564
eventRecorder),
25652565
check: []func(cluster *Cluster, podDisruptionBudget *policyv1.PodDisruptionBudget) error{
25662566
testPodDisruptionBudgetOwnerReference,
2567-
hasName("postgres-myapp-database-critical-operation-pdb"),
2567+
hasName("postgres-myapp-database-critical-op-pdb"),
25682568
hasMinAvailable(0),
25692569
testLabelsAndSelectors(false),
25702570
},
@@ -2581,7 +2581,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
25812581
eventRecorder),
25822582
check: []func(cluster *Cluster, podDisruptionBudget *policyv1.PodDisruptionBudget) error{
25832583
testPodDisruptionBudgetOwnerReference,
2584-
hasName("postgres-myapp-database-critical-operation-pdb"),
2584+
hasName("postgres-myapp-database-critical-op-pdb"),
25852585
hasMinAvailable(3),
25862586
testLabelsAndSelectors(false),
25872587
},

pkg/cluster/resources.go

+43-38
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,13 @@ const (
2323
)
2424

2525
func (c *Cluster) listResources() error {
26-
if c.GeneralPodDisruptionBudget != nil {
27-
c.logger.Infof("found general pod disruption budget: %q (uid: %q)", util.NameFromMeta(c.GeneralPodDisruptionBudget.ObjectMeta), c.GeneralPodDisruptionBudget.UID)
26+
if c.PrimaryPodDisruptionBudget != nil {
27+
c.logger.Infof("found primary pod disruption budget: %q (uid: %q)", util.NameFromMeta(c.PrimaryPodDisruptionBudget.ObjectMeta), c.PrimaryPodDisruptionBudget.UID)
28+
}
29+
30+
if c.CriticalOpPodDisruptionBudget != nil {
31+
c.logger.Infof("found pod disruption budget for critical operations: %q (uid: %q)", util.NameFromMeta(c.CriticalOpPodDisruptionBudget.ObjectMeta), c.CriticalOpPodDisruptionBudget.UID)
32+
2833
}
2934

3035
if c.Statefulset != nil {
@@ -417,30 +422,30 @@ func (c *Cluster) generateEndpointSubsets(role PostgresRole) []v1.EndpointSubset
417422
return result
418423
}
419424

420-
func (c *Cluster) createGeneralPodDisruptionBudget() error {
421-
c.logger.Debug("creating general pod disruption budget")
422-
if c.GeneralPodDisruptionBudget != nil {
423-
return fmt.Errorf("general pod disruption budget already exists in the cluster")
425+
func (c *Cluster) createPrimaryPodDisruptionBudget() error {
426+
c.logger.Debug("creating primary pod disruption budget")
427+
if c.PrimaryPodDisruptionBudget != nil {
428+
return fmt.Errorf("primary pod disruption budget already exists in the cluster")
424429
}
425430

426-
podDisruptionBudgetSpec := c.generateGeneralPodDisruptionBudget()
431+
podDisruptionBudgetSpec := c.generatePrimaryPodDisruptionBudget()
427432
podDisruptionBudget, err := c.KubeClient.
428433
PodDisruptionBudgets(podDisruptionBudgetSpec.Namespace).
429434
Create(context.TODO(), podDisruptionBudgetSpec, metav1.CreateOptions{})
430435

431436
if err != nil {
432437
return err
433438
}
434-
c.logger.Infof("pod disruption budget %q has been successfully created", util.NameFromMeta(podDisruptionBudget.ObjectMeta))
435-
c.GeneralPodDisruptionBudget = podDisruptionBudget
439+
c.logger.Infof("primary pod disruption budget %q has been successfully created", util.NameFromMeta(podDisruptionBudget.ObjectMeta))
440+
c.PrimaryPodDisruptionBudget = podDisruptionBudget
436441

437442
return nil
438443
}
439444

440445
func (c *Cluster) createCriticalOpPodDisruptionBudget() error {
441446
c.logger.Debug("creating pod disruption budget for critical operations")
442447
if c.CriticalOpPodDisruptionBudget != nil {
443-
return fmt.Errorf("pod disruption budget for critical operations already exists in the cluster")
448+
return fmt.Errorf("pod disruption budget for critical operations already exists in the cluster")
444449
}
445450

446451
podDisruptionBudgetSpec := c.generateCriticalOpPodDisruptionBudget()
@@ -451,7 +456,7 @@ func (c *Cluster) createCriticalOpPodDisruptionBudget() error {
451456
if err != nil {
452457
return err
453458
}
454-
c.logger.Infof("pod disruption budget %q has been successfully created", util.NameFromMeta(podDisruptionBudget.ObjectMeta))
459+
c.logger.Infof("pod disruption budget for critical operations %q has been successfully created", util.NameFromMeta(podDisruptionBudget.ObjectMeta))
455460
c.CriticalOpPodDisruptionBudget = podDisruptionBudget
456461

457462
return nil
@@ -460,9 +465,9 @@ func (c *Cluster) createCriticalOpPodDisruptionBudget() error {
460465
func (c *Cluster) createPodDisruptionBudgets() error {
461466
errors := make([]string, 0)
462467

463-
err := c.createGeneralPodDisruptionBudget()
468+
err := c.createPrimaryPodDisruptionBudget()
464469
if err != nil {
465-
errors = append(errors, fmt.Sprintf("could not create general pod disruption budget: %v", err))
470+
errors = append(errors, fmt.Sprintf("could not create primary pod disruption budget: %v", err))
466471
}
467472

468473
err = c.createCriticalOpPodDisruptionBudget()
@@ -476,23 +481,23 @@ func (c *Cluster) createPodDisruptionBudgets() error {
476481
return nil
477482
}
478483

479-
func (c *Cluster) updateGeneralPodDisruptionBudget(pdb *policyv1.PodDisruptionBudget) error {
480-
c.logger.Debug("updating general pod disruption budget")
481-
if c.GeneralPodDisruptionBudget == nil {
482-
return fmt.Errorf("there is no general pod disruption budget in the cluster")
484+
func (c *Cluster) updatePrimaryPodDisruptionBudget(pdb *policyv1.PodDisruptionBudget) error {
485+
c.logger.Debug("updating primary pod disruption budget")
486+
if c.PrimaryPodDisruptionBudget == nil {
487+
return fmt.Errorf("there is no primary pod disruption budget in the cluster")
483488
}
484489

485-
if err := c.deleteGeneralPodDisruptionBudget(); err != nil {
486-
return fmt.Errorf("could not delete general pod disruption budget: %v", err)
490+
if err := c.deletePrimaryPodDisruptionBudget(); err != nil {
491+
return fmt.Errorf("could not delete primary pod disruption budget: %v", err)
487492
}
488493

489494
newPdb, err := c.KubeClient.
490495
PodDisruptionBudgets(pdb.Namespace).
491496
Create(context.TODO(), pdb, metav1.CreateOptions{})
492497
if err != nil {
493-
return fmt.Errorf("could not create general pod disruption budget: %v", err)
498+
return fmt.Errorf("could not create primary pod disruption budget: %v", err)
494499
}
495-
c.GeneralPodDisruptionBudget = newPdb
500+
c.PrimaryPodDisruptionBudget = newPdb
496501

497502
return nil
498503
}
@@ -518,25 +523,25 @@ func (c *Cluster) updateCriticalOpPodDisruptionBudget(pdb *policyv1.PodDisruptio
518523
return nil
519524
}
520525

521-
func (c *Cluster) deleteGeneralPodDisruptionBudget() error {
522-
c.logger.Debug("deleting general pod disruption budget")
523-
if c.GeneralPodDisruptionBudget == nil {
524-
c.logger.Debug("there is no general pod disruption budget in the cluster")
526+
func (c *Cluster) deletePrimaryPodDisruptionBudget() error {
527+
c.logger.Debug("deleting primary pod disruption budget")
528+
if c.PrimaryPodDisruptionBudget == nil {
529+
c.logger.Debug("there is no primary pod disruption budget in the cluster")
525530
return nil
526531
}
527532

528-
pdbName := util.NameFromMeta(c.GeneralPodDisruptionBudget.ObjectMeta)
533+
pdbName := util.NameFromMeta(c.PrimaryPodDisruptionBudget.ObjectMeta)
529534
err := c.KubeClient.
530-
PodDisruptionBudgets(c.GeneralPodDisruptionBudget.Namespace).
531-
Delete(context.TODO(), c.GeneralPodDisruptionBudget.Name, c.deleteOptions)
535+
PodDisruptionBudgets(c.PrimaryPodDisruptionBudget.Namespace).
536+
Delete(context.TODO(), c.PrimaryPodDisruptionBudget.Name, c.deleteOptions)
532537
if k8sutil.ResourceNotFound(err) {
533-
c.logger.Debugf("PodDisruptionBudget %q has already been deleted", util.NameFromMeta(c.GeneralPodDisruptionBudget.ObjectMeta))
538+
c.logger.Debugf("PodDisruptionBudget %q has already been deleted", util.NameFromMeta(c.PrimaryPodDisruptionBudget.ObjectMeta))
534539
} else if err != nil {
535-
return fmt.Errorf("could not delete general pod disruption budget: %v", err)
540+
return fmt.Errorf("could not delete primary pod disruption budget: %v", err)
536541
}
537542

538-
c.logger.Infof("pod disruption budget %q has been deleted", util.NameFromMeta(c.GeneralPodDisruptionBudget.ObjectMeta))
539-
c.GeneralPodDisruptionBudget = nil
543+
c.logger.Infof("pod disruption budget %q has been deleted", util.NameFromMeta(c.PrimaryPodDisruptionBudget.ObjectMeta))
544+
c.PrimaryPodDisruptionBudget = nil
540545

541546
err = retryutil.Retry(c.OpConfig.ResourceCheckInterval, c.OpConfig.ResourceCheckTimeout,
542547
func() (bool, error) {
@@ -550,7 +555,7 @@ func (c *Cluster) deleteGeneralPodDisruptionBudget() error {
550555
return false, err2
551556
})
552557
if err != nil {
553-
return fmt.Errorf("could not delete general pod disruption budget: %v", err)
558+
return fmt.Errorf("could not delete primary pod disruption budget: %v", err)
554559
}
555560

556561
return nil
@@ -597,7 +602,7 @@ func (c *Cluster) deleteCriticalOpPodDisruptionBudget() error {
597602
func (c *Cluster) deletePodDisruptionBudgets() error {
598603
errors := make([]string, 0)
599604

600-
if err := c.deleteGeneralPodDisruptionBudget(); err != nil {
605+
if err := c.deletePrimaryPodDisruptionBudget(); err != nil {
601606
errors = append(errors, fmt.Sprintf("%v", err))
602607
}
603608

@@ -827,12 +832,12 @@ func (c *Cluster) GetStatefulSet() *appsv1.StatefulSet {
827832
return c.Statefulset
828833
}
829834

830-
// GetPodDisruptionBudget returns cluster's general kubernetes PodDisruptionBudget
831-
func (c *Cluster) GetGeneralPodDisruptionBudget() *policyv1.PodDisruptionBudget {
832-
return c.GeneralPodDisruptionBudget
835+
// GetPrimaryPodDisruptionBudget returns cluster's primary kubernetes PodDisruptionBudget
836+
func (c *Cluster) GetPrimaryPodDisruptionBudget() *policyv1.PodDisruptionBudget {
837+
return c.PrimaryPodDisruptionBudget
833838
}
834839

835-
// GetPodDisruptionBudget returns cluster's kubernetes PodDisruptionBudget for critical operations
840+
// GetCriticalOpPodDisruptionBudget returns cluster's kubernetes PodDisruptionBudget for critical operations
836841
func (c *Cluster) GetCriticalOpPodDisruptionBudget() *policyv1.PodDisruptionBudget {
837842
return c.CriticalOpPodDisruptionBudget
838843
}

0 commit comments

Comments
 (0)