Skip to content

Commit 7f3adfa

Browse files
authored
Make pod anti affinity topology key configurable (#606)
1 parent d77cf8a commit 7f3adfa

File tree

2 files changed

+132
-113
lines changed

2 files changed

+132
-113
lines changed

main.go

Lines changed: 115 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -47,54 +47,56 @@ import (
4747
const (
4848
// envPrefix = "pg"
4949

50-
metricsAddrSvcMgrFlg = "metrics-addr-svc-mgr"
51-
metricsAddrCtrlMgrFlg = "metrics-addr-ctrl-mgr"
52-
enableLeaderElectionFlg = "enable-leader-election"
53-
partitionIDFlg = "partition-id"
54-
tenantFlg = "tenant"
55-
ctrlPlaneKubeConfifgFlg = "controlplane-kubeconfig"
56-
loadBalancerIPFlg = "load-balancer-ip"
57-
portRangeStartFlg = "port-range-start"
58-
portRangeSizeFlg = "port-range-size"
59-
customPSPNameFlg = "custom-psp-name"
60-
storageClassFlg = "storage-class"
61-
postgresImageFlg = "postgres-image"
62-
etcdHostFlg = "etcd-host"
63-
crdRegistrationFlg = "enable-crd-registration"
64-
operatorImageFlg = "operator-image"
65-
pgParamBlockListFlg = "postgres-param-blocklist" // nolint
66-
majorVersionUpgradeModeFlg = "major-version-upgrade-mode"
67-
standbyClustersSourceRangesFlg = "standby-clusters-source-ranges"
68-
postgresletNamespaceFlg = "postgreslet-namespace"
69-
sidecarsCMNameFlg = "sidecars-configmap-name"
70-
enableNetPolFlg = "enable-netpol"
71-
enablePodAntiaffinityFlg = "enable-pod-antiaffinity"
72-
patroniRetryTimeoutFlg = "patroni-retry-timeout"
73-
enableStandbyLeaderSelectorFlg = "enable-standby-leader-selector"
74-
ControlPlaneNamespaceFlg = "control-plane-namespace"
75-
enableLegacyStandbySelectorFlg = "enable-legacy-standby-selector"
76-
deployEtcdFlg = "deploy-etcd"
77-
etcdImageFlg = "etcd-image"
78-
etcdBackupSidecarImageFlg = "etcd-backup-sidecar-image"
79-
etcdBackupSecretNameFlg = "etcd-backup-secret-name" // nolint
80-
etcdPSPNameFlg = "etcd-psp-name"
81-
replicationChangeRequeueTimeFlg = "replication-change-requeue-time-in-seconds"
82-
postgresletFullnameFlg = "postgreslet-fullname"
83-
enableLBSourceRangesFlg = "enable-lb-source-ranges"
84-
enableRandomStorageEncryptionSecretFlg = "enable-random-storage-encryption-secret"
85-
enableWalGEncryptionFlg = "enable-walg-encryption"
86-
enableForceSharedIPFlg = "enable-force-shared-ip"
87-
initDBJobCMNameFlg = "initdb-job-configmap-name"
88-
enableBootstrapStandbyFromS3Flg = "enable-bootsrtap-standby-from-s3"
89-
enableSuperUserForDBOFlg = "enable-superuser-for-dbo"
90-
tlsClusterIssuerFlg = "tls-cluster-issuer"
91-
tlsSubDomainFlg = "tls-sub-domain"
92-
enablePatroniFailsafeModeFlg = "enable-patroni-failsafe-mode"
93-
enableFsGroupChangePolicyWebhookFlg = "enable-fsgroup-change-policy-webhook"
94-
enableWalGExporterFlg = "enable-walg-exporter"
95-
walGExporterImageFlg = "walg-exporter-image"
96-
walGExporterCPULimitFlg = "walg-exporter-cpu-limit"
97-
walGExporterMemoryLimitFlg = "walg-exporter-memory-limit"
50+
metricsAddrSvcMgrFlg = "metrics-addr-svc-mgr"
51+
metricsAddrCtrlMgrFlg = "metrics-addr-ctrl-mgr"
52+
enableLeaderElectionFlg = "enable-leader-election"
53+
partitionIDFlg = "partition-id"
54+
tenantFlg = "tenant"
55+
ctrlPlaneKubeConfifgFlg = "controlplane-kubeconfig"
56+
loadBalancerIPFlg = "load-balancer-ip"
57+
portRangeStartFlg = "port-range-start"
58+
portRangeSizeFlg = "port-range-size"
59+
customPSPNameFlg = "custom-psp-name"
60+
storageClassFlg = "storage-class"
61+
postgresImageFlg = "postgres-image"
62+
etcdHostFlg = "etcd-host"
63+
crdRegistrationFlg = "enable-crd-registration"
64+
operatorImageFlg = "operator-image"
65+
pgParamBlockListFlg = "postgres-param-blocklist" // nolint
66+
majorVersionUpgradeModeFlg = "major-version-upgrade-mode"
67+
standbyClustersSourceRangesFlg = "standby-clusters-source-ranges"
68+
postgresletNamespaceFlg = "postgreslet-namespace"
69+
sidecarsCMNameFlg = "sidecars-configmap-name"
70+
enableNetPolFlg = "enable-netpol"
71+
enablePodAntiaffinityFlg = "enable-pod-antiaffinity"
72+
patroniRetryTimeoutFlg = "patroni-retry-timeout"
73+
enableStandbyLeaderSelectorFlg = "enable-standby-leader-selector"
74+
ControlPlaneNamespaceFlg = "control-plane-namespace"
75+
enableLegacyStandbySelectorFlg = "enable-legacy-standby-selector"
76+
deployEtcdFlg = "deploy-etcd"
77+
etcdImageFlg = "etcd-image"
78+
etcdBackupSidecarImageFlg = "etcd-backup-sidecar-image"
79+
etcdBackupSecretNameFlg = "etcd-backup-secret-name" // nolint
80+
etcdPSPNameFlg = "etcd-psp-name"
81+
replicationChangeRequeueTimeFlg = "replication-change-requeue-time-in-seconds"
82+
postgresletFullnameFlg = "postgreslet-fullname"
83+
enableLBSourceRangesFlg = "enable-lb-source-ranges"
84+
enableRandomStorageEncryptionSecretFlg = "enable-random-storage-encryption-secret"
85+
enableWalGEncryptionFlg = "enable-walg-encryption"
86+
enableForceSharedIPFlg = "enable-force-shared-ip"
87+
initDBJobCMNameFlg = "initdb-job-configmap-name"
88+
enableBootstrapStandbyFromS3Flg = "enable-bootsrtap-standby-from-s3"
89+
enableSuperUserForDBOFlg = "enable-superuser-for-dbo"
90+
tlsClusterIssuerFlg = "tls-cluster-issuer"
91+
tlsSubDomainFlg = "tls-sub-domain"
92+
enablePatroniFailsafeModeFlg = "enable-patroni-failsafe-mode"
93+
enableFsGroupChangePolicyWebhookFlg = "enable-fsgroup-change-policy-webhook"
94+
enableWalGExporterFlg = "enable-walg-exporter"
95+
walGExporterImageFlg = "walg-exporter-image"
96+
walGExporterCPULimitFlg = "walg-exporter-cpu-limit"
97+
walGExporterMemoryLimitFlg = "walg-exporter-memory-limit"
98+
podAntiaffinityPreferredDuringSchedulingFlg = "pod-antiaffinity-preferred-during-scheduling"
99+
podAntiaffinityTopologyKeyFlg = "pod-antiaffinity-topology-key"
98100
)
99101

100102
var (
@@ -117,49 +119,51 @@ func init() {
117119
func main() {
118120

119121
var (
120-
metricsAddrCtrlMgr string
121-
metricsAddrSvcMgr string
122-
partitionID string
123-
tenant string
124-
ctrlClusterKubeconfig string
125-
pspName string
126-
lbIP string
127-
storageClass string
128-
postgresImage string
129-
etcdHost string
130-
operatorImage string
131-
majorVersionUpgradeMode string
132-
postgresletNamespace string
133-
sidecarsCMName string
134-
controlPlaneNamespace string
135-
etcdImage string
136-
etcdBackupSidecarImage string
137-
etcdBackupSecretName string
138-
etcdPSPName string
139-
postgresletFullname string
140-
initDBJobCMName string
141-
tlsClusterIssuer string
142-
tlsSubDomain string
143-
walGExporterImage string
144-
walGExporterCPULimit string
145-
walGExporterMemoryLimit string
146-
147-
enableLeaderElection bool
148-
enableCRDRegistration bool
149-
enableNetPol bool
150-
enablePodAntiaffinity bool
151-
enableStandbyLeaderSelector bool
152-
enableLegacyStandbySelector bool
153-
deployEtcd bool
154-
enableLBSourceRanges bool
155-
enableRandomStorageEncryptionSecret bool
156-
enableWalGEncryption bool
157-
enableForceSharedIP bool
158-
enableBootstrapStandbyFromS3 bool
159-
enableSuperUserForDBO bool
160-
enablePatroniFailsafeMode bool
161-
enableFsGroupChangePolicyWebhook bool
162-
enableWalGExporter bool
122+
metricsAddrCtrlMgr string
123+
metricsAddrSvcMgr string
124+
partitionID string
125+
tenant string
126+
ctrlClusterKubeconfig string
127+
pspName string
128+
lbIP string
129+
storageClass string
130+
postgresImage string
131+
etcdHost string
132+
operatorImage string
133+
majorVersionUpgradeMode string
134+
postgresletNamespace string
135+
sidecarsCMName string
136+
controlPlaneNamespace string
137+
etcdImage string
138+
etcdBackupSidecarImage string
139+
etcdBackupSecretName string
140+
etcdPSPName string
141+
postgresletFullname string
142+
initDBJobCMName string
143+
tlsClusterIssuer string
144+
tlsSubDomain string
145+
walGExporterImage string
146+
walGExporterCPULimit string
147+
walGExporterMemoryLimit string
148+
podAntiaffinityTopologyKey string
149+
150+
enableLeaderElection bool
151+
enableCRDRegistration bool
152+
enableNetPol bool
153+
enablePodAntiaffinity bool
154+
enableStandbyLeaderSelector bool
155+
enableLegacyStandbySelector bool
156+
deployEtcd bool
157+
enableLBSourceRanges bool
158+
enableRandomStorageEncryptionSecret bool
159+
enableWalGEncryption bool
160+
enableForceSharedIP bool
161+
enableBootstrapStandbyFromS3 bool
162+
enableSuperUserForDBO bool
163+
enablePatroniFailsafeMode bool
164+
enableFsGroupChangePolicyWebhook bool
165+
enableWalGExporter bool
166+
podAntiaffinityPreferredDuringScheduling bool
163167

164168
portRangeStart int32
165169
portRangeSize int32
@@ -261,6 +265,11 @@ func main() {
261265
viper.SetDefault(enablePodAntiaffinityFlg, false)
262266
enablePodAntiaffinity = viper.GetBool(enablePodAntiaffinityFlg)
263267

268+
viper.SetDefault(podAntiaffinityPreferredDuringSchedulingFlg, false)
269+
podAntiaffinityPreferredDuringScheduling = viper.GetBool(podAntiaffinityPreferredDuringSchedulingFlg)
270+
271+
podAntiaffinityTopologyKey = viper.GetString(podAntiaffinityTopologyKeyFlg)
272+
264273
// hard coded value
265274
patroniLoopWait = databasev1.DefaultPatroniParamValueLoopWait
266275

@@ -369,6 +378,8 @@ func main() {
369378
sidecarsCMNameFlg, sidecarsCMName,
370379
enableNetPolFlg, enableNetPol,
371380
enablePodAntiaffinityFlg, enablePodAntiaffinity,
381+
podAntiaffinityPreferredDuringSchedulingFlg, podAntiaffinityPreferredDuringScheduling,
382+
podAntiaffinityTopologyKeyFlg, podAntiaffinityTopologyKey,
372383
patroniRetryTimeoutFlg, patroniRetryTimeout,
373384
enableStandbyLeaderSelectorFlg, enableStandbyLeaderSelector,
374385
ControlPlaneNamespaceFlg, controlPlaneNamespace,
@@ -455,17 +466,19 @@ func main() {
455466
}
456467

457468
var opMgrOpts operatormanager.Options = operatormanager.Options{
458-
PspName: pspName,
459-
OperatorImage: operatorImage,
460-
DockerImage: postgresImage,
461-
EtcdHost: etcdHost,
462-
CRDRegistration: enableCRDRegistration,
463-
MajorVersionUpgradeMode: majorVersionUpgradeMode,
464-
PostgresletNamespace: postgresletNamespace,
465-
SidecarsConfigMapName: sidecarsCMName,
466-
PodAntiaffinity: enablePodAntiaffinity,
467-
PartitionID: partitionID,
468-
PatroniFailsafeMode: enablePatroniFailsafeMode,
469+
PspName: pspName,
470+
OperatorImage: operatorImage,
471+
DockerImage: postgresImage,
472+
EtcdHost: etcdHost,
473+
CRDRegistration: enableCRDRegistration,
474+
MajorVersionUpgradeMode: majorVersionUpgradeMode,
475+
PostgresletNamespace: postgresletNamespace,
476+
SidecarsConfigMapName: sidecarsCMName,
477+
PodAntiaffinity: enablePodAntiaffinity,
478+
PartitionID: partitionID,
479+
PatroniFailsafeMode: enablePatroniFailsafeMode,
480+
PodAntiaffinityPreferredDuringScheduling: podAntiaffinityPreferredDuringScheduling,
481+
PodAntiaffinityTopologyKey: podAntiaffinityTopologyKey,
469482
}
470483
opMgr, err := operatormanager.New(svcClusterConf, "external/svc-postgres-operator.yaml", scheme, ctrl.Log.WithName("OperatorManager"), opMgrOpts)
471484
if err != nil {

pkg/operatormanager/operatormanager.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,19 @@ var operatorPodMatchingLabels = client.MatchingLabels{operatorPodLabelName: oper
5959

6060
// Options
6161
type Options struct {
62-
PspName string
63-
OperatorImage string
64-
DockerImage string
65-
EtcdHost string
66-
CRDRegistration bool
67-
MajorVersionUpgradeMode string
68-
PostgresletNamespace string
69-
SidecarsConfigMapName string
70-
PodAntiaffinity bool
71-
PartitionID string
72-
PatroniFailsafeMode bool
62+
PspName string
63+
OperatorImage string
64+
DockerImage string
65+
EtcdHost string
66+
CRDRegistration bool
67+
MajorVersionUpgradeMode string
68+
PostgresletNamespace string
69+
SidecarsConfigMapName string
70+
PodAntiaffinity bool
71+
PartitionID string
72+
PatroniFailsafeMode bool
73+
PodAntiaffinityPreferredDuringScheduling bool
74+
PodAntiaffinityTopologyKey string
7375
}
7476

7577
// OperatorManager manages the operator
@@ -435,6 +437,10 @@ func (m *OperatorManager) editConfigMap(cm *corev1.ConfigMap, namespace string,
435437
cm.Data["replication_username"] = pg.PostgresConfigReplicationUsername
436438

437439
cm.Data["enable_pod_antiaffinity"] = strconv.FormatBool(options.PodAntiaffinity)
440+
cm.Data["pod_antiaffinity_preferred_during_scheduling"] = strconv.FormatBool(options.PodAntiaffinityPreferredDuringScheduling)
441+
if options.PodAntiaffinityTopologyKey != "" {
442+
cm.Data["pod_antiaffinity_topology_key"] = options.PodAntiaffinityTopologyKey
443+
}
438444

439445
cm.Data["secret_name_template"] = "{username}.{cluster}.credentials"
440446
cm.Data["master_dns_name_format"] = "{cluster}.{team}.{hostedzone}"

0 commit comments

Comments
 (0)