Skip to content

Commit 0b53dbe

Browse files
authored
Set statefulset update and management policy explicitly (zalando#515)
* fix logging in retry * explicitly set the stateful set update strategy to onDelete * add podManagementPolicy
1 parent db72d82 commit 0b53dbe

File tree

5 files changed

+24
-1
lines changed

5 files changed

+24
-1
lines changed

docs/reference/operator_parameters.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,11 @@ configuration they are grouped under the `kubernetes` key.
226226
[topology key](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#interlude-built-in-node-labels)
227227
for pod anti affinity. The default is `kubernetes.io/hostname`.
228228

229+
* **pod_management_policy**
230+
specify the
231+
[pod management policy](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies)
232+
of stateful sets of PG clusters. The default is `ordered_ready`, the second possible value is `parallel`.
233+
229234
## Kubernetes resource requests
230235

231236
This group allows you to configure resource requests for the Postgres pods.

manifests/configmap.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ data:
4444
pod_terminate_grace_period: 5m
4545
pod_deletion_wait_timeout: 10m
4646
pod_label_wait_timeout: 10m
47+
pod_management_policy: "ordered_ready"
4748
ready_wait_interval: 3s
4849
ready_wait_timeout: 30s
4950
# master_pod_move_timeout: 10m

pkg/cluster/k8sres.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,20 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*v1beta1.State
858858

859859
numberOfInstances := c.getNumberOfInstances(spec)
860860

861+
// the operator has domain-specific logic on how to do rolling updates of PG clusters
862+
// so we do not use default rolling updates implemented by stateful sets
863+
// that leaves the legacy "OnDelete" update strategy as the only option
864+
updateStrategy := v1beta1.StatefulSetUpdateStrategy{Type: v1beta1.OnDeleteStatefulSetStrategyType}
865+
866+
var podManagementPolicy v1beta1.PodManagementPolicyType
867+
if c.OpConfig.PodManagementPolicy == "ordered_ready" {
868+
podManagementPolicy = v1beta1.OrderedReadyPodManagement
869+
} else if c.OpConfig.PodManagementPolicy == "parallel" {
870+
podManagementPolicy = v1beta1.ParallelPodManagement
871+
} else {
872+
return nil, fmt.Errorf("could not set the pod management policy to the unknown value: %v", c.OpConfig.PodManagementPolicy)
873+
}
874+
861875
statefulSet := &v1beta1.StatefulSet{
862876
ObjectMeta: metav1.ObjectMeta{
863877
Name: c.statefulSetName(),
@@ -871,6 +885,8 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*v1beta1.State
871885
ServiceName: c.serviceName(Master),
872886
Template: *podTemplate,
873887
VolumeClaimTemplates: []v1.PersistentVolumeClaim{*volumeClaimTemplate},
888+
UpdateStrategy: updateStrategy,
889+
PodManagementPolicy: podManagementPolicy,
874890
},
875891
}
876892

pkg/controller/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ func (c *Controller) moveMasterPodsOffNode(node *v1.Node) {
184184
)
185185

186186
if err != nil {
187-
c.logger.Warning("failed to move master pods from the node %q: timeout of %v minutes expired", node.Name, c.opConfig.MasterPodMoveTimeout)
187+
c.logger.Warningf("failed to move master pods from the node %q: timeout of %v minutes expired", node.Name, c.opConfig.MasterPodMoveTimeout)
188188
}
189189

190190
}

pkg/util/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ type Config struct {
109109
ClusterHistoryEntries int `name:"cluster_history_entries" default:"1000"`
110110
TeamAPIRoleConfiguration map[string]string `name:"team_api_role_configuration" default:"log_statement:all"`
111111
PodTerminateGracePeriod time.Duration `name:"pod_terminate_grace_period" default:"5m"`
112+
PodManagementPolicy string `name:"pod_management_policy" default:"ordered_ready"`
112113
ProtectedRoles []string `name:"protected_role_names" default:"admin"`
113114
PostgresSuperuserTeams []string `name:"postgres_superuser_teams" default:""`
114115
SetMemoryRequestToLimit bool `name:"set_memory_request_to_limit" defaults:"false"`

0 commit comments

Comments
 (0)