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