Advanced configuration for Postgres components on Kubernetes V10.0.7.0 and later
This section describes the default affinity, nodeSelector, and toleration settings of EDB Postgres and Operator pods and examples of how to customize them.
EDB Postgres pods
Defaults
The following are the Postgres pods default:
Note: The following are examples only and it can vary
from your pod name.
The following are the rules for Affinity:
- Required: Repels its own pods within the same hostname.
- Preferred: Repels edb-operator pods within the same hostname.
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- cloud-native-postgresql
namespaceSelector: {}
topologyKey: kubernetes.io/hostname
weight: 100
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: k8s.enterprisedb.io/cluster
operator: In
values:
- management-b6d7a59d-db
topologyKey: kubernetes.io/hostname
Tolerations:
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
NodeSelector: None
Customization
To customize affinity (which can be nodeAffinity, podAffinity, podAntiAffinity),nodeSelector, or
toleration, you need to add a template in the spec section of the ManagementCluster. This template
will help you set the desired rules for pod placement in your Kubernetes
cluster.
spec:
template:
- name: edb-cluster
affinity:
nodeAffinity:
<your settings>
podAffinity:
<your settings>
podAntiAffinity:
<your settings>
nodeSelector:
<your settings>
tolerations:
<your settings>
To customize a deployment using API ConnectCluster CR for
OpenShift or CP4i deployments, you can use the following template:
spec:
template:
# management services must be specified with prefix "mgmt-"
- name: mgmt-edb-cluster
affinity:
nodeAffinity:
<your settings>
podAffinity:
<your settings>
podAntiAffinity:
<your settings>
nodeSelector:
<your settings>
tolerations:
<your settings>
EDB operator pods
Defaults
The following are the rules for Affinity:
- Preferred: Repels its own pods within the same hostname.
- Preferred: Repels Postgres pods with podRole=instance (all Postgres master and replica pods)
within the same hostname.
spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/instance operator: In values: - management - key: app.kubernetes.io/managed-by operator: In values: - ibm-apiconnect - key: app.kubernetes.io/name operator: In values: - cloud-native-postgresql topologyKey: kubernetes.io/hostname weight: 100 - podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/instance operator: In values: - management - key: app.kubernetes.io/managed-by operator: In values: - ibm-apiconnect - key: k8s.enterprisedb.io/podRole operator: In values: - instance namespaceSelector: {} topologyKey: kubernetes.io/hostname weight: 100
Tolerations:
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
NodeSelector: None