在管理子系统中配置区域亲和性

安装 IBM® 后 API Connect 后,可以在管理子系统中配置区域亲和性,以提高高可用性和弹性。 您可以更新顶层变更请求 (CR) 或管理 CR,以确认每个 PostgresSQL 数据库 pod 都安排在单独的可用性区域。

过程

  1. 运行相应的命令,将模板添加到可用的变更请求中。
    注: 如果顶层 CR 可用,请将模板添加到顶层 CR 中。 如果顶层 CR 不可用,则将模板添加到管理 CR 中。
    变更请求 命令
    顶层公约与建议委员会
    
    spec:
      template:
        - affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
                - podAffinityTerm:
                    labelSelector:
                      matchExpressions:
                        - key: k8s.enterprisedb.io/podRole
                          operator: In
                          values:
                            - instance
                    topologyKey: topology.kubernetes.io/zone
                  weight: 100
          name: mgmt-edb-cluster
    管理 CR
    
    spec:
      template:
        - affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
                - podAffinityTerm:
                    labelSelector:
                      matchExpressions:
                        - key: k8s.enterprisedb.io/podRole
                          operator: In
                          values:
                            - instance
                    topologyKey: topology.kubernetes.io/zone
                  weight: 100
          name: edb-cluster

    添加模板后,一些 pod 会重新启动。 但是,您需要进一步更新 EDB 群集。

    提示: 运行以下命令可检查是否存在顶层 CR。
    oc get apiconnectcluster
  2. 要显示主 Postgres pod 的名称和节点,请在管理系统中运行以下命令。
    kubectl -n <namespace> get po -l role=primary -o wide
    oc get po -l role=primary -o wide

    注意 pod 的名称和运行区域。

  3. 要显示 postgres pod 复制的名称和节点,请在管理系统中运行以下命令。
    kubectl -n <namespace> get po -l role=replica -o wide
    oc get po -l role=replica -o wide

    注意 pod 的名称及其运行的区域。

    注意: 识别与主系统或彼此位于同一区域的副本。 每个吊舱必须位于不同的区域。 删除与主服务器或另一个副本位于同一区域的任何 pod 和相关 PersistentVolumeClaims (PVC)。
  4. 要列出要删除的 PVC 和 PersistentVolumes (PV),请运行以下命令。
    
    kubectl get pod <pod-name> -n <namespace> -o json | jq -r '
      .spec.volumes[] 
      | select(.persistentVolumeClaim) 
      | .persistentVolumeClaim.claimName 
    ' | while read pvc; do 
      pv=$(kubectl get pvc "$pvc" -n <namespace> -o jsonpath='{.spec.volumeName}')
      echo "$pvc -> $pv"
    done
    
    oc get pod <pod-name> -o json | jq -r '
      .spec.volumes[] 
      | select(.persistentVolumeClaim) 
      | .persistentVolumeClaim.claimName 
    ' | while read pvc; do 
      pv=$(oc get pvc "$pvc" -o jsonpath='{.spec.volumeName}')
      echo "$pvc -> $pv"
    done
  5. 要删除列出的 PVC、PV 和相关 pod,请运行以下命令。
    
    kubectl n <namespace> delete pvc <pvc-name>
    kubectl n <namespace> delete pv <pv-name>
    kubectl n <namespace> delete pod <pod-name>
    
    oc delete pvc <pvc-name>
    oc delete pv <pv-name>
    oc delete pod <pod-name>
  6. 要验证新 pod 是否显示在正确的区域中,以替换已删除的副本,请运行以下命令。
    kubectl -n <namespace> get po -l role -o wide
    oc get po -l role-o wide