在管理子系统中配置区域亲和性
安装 IBM® 后 API Connect 后,可以在管理子系统中配置区域亲和性,以提高高可用性和弹性。 您可以更新顶层变更请求 (CR) 或管理 CR,以确认每个 PostgresSQL 数据库 pod 都安排在单独的可用性区域。
过程
- 运行相应的命令,将模板添加到可用的变更请求中。注: 如果顶层 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 - 要显示主 Postgres pod 的名称和节点,请在管理系统中运行以下命令。
kubectl -n <namespace> get po -l role=primary -o wide或oc get po -l role=primary -o wide注意 pod 的名称和运行区域。
- 要显示 postgres pod 复制的名称和节点,请在管理系统中运行以下命令。
kubectl -n <namespace> get po -l role=replica -o wide或oc get po -l role=replica -o wide注意 pod 的名称及其运行的区域。
注意: 识别与主系统或彼此位于同一区域的副本。 每个吊舱必须位于不同的区域。 删除与主服务器或另一个副本位于同一区域的任何 pod 和相关 PersistentVolumeClaims (PVC)。 - 要列出要删除的 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 - 要删除列出的 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> - 要验证新 pod 是否显示在正确的区域中,以替换已删除的副本,请运行以下命令。
kubectl -n <namespace> get po -l role -o wide或oc get po -l role-o wide