在 DR 环境中升级 global 集群

当环境同时包含主 global 集群和备用 global 集群时,请使用此操作步骤。DR 特定步骤是在 Upgrade the global cluster 中标准 CVO 工作流的基础上附加的。

升级操作步骤

在升级前验证 DR 环境

按照常规的 global DR 检查操作步骤,确保 备用 global 集群 中的数据与 主 global 集群 保持一致。有关 DR 拓扑和同步工作流的背景信息,请参见 Global Cluster Disaster Recovery

如果检测到不一致,请不要在下一步中卸载 etcd 同步插件,并在继续之前联系技术支持。当备用 global 集群缺少主集群持有的数据时,卸载该插件可能会导致 owner reference 解析错误,并且工作负载集群的 Machine 对象——包括 immutable-OS 集群,在这些集群中这会销毁其底层虚拟机——可能会被删除。

两个 global 集群上运行以下命令,确保没有处于非运行状态的 Machine 节点:

kubectl get machines.platform.tkestack.io

如果存在此类节点,请先解决这些问题再继续。

从备用 global 集群卸载 etcd 同步插件

  1. 通过 IP 或 VIP 访问 备用 global 集群 的 Web Console。
  2. 切换到 Administrator 视图。
  3. 导航到 Marketplace > Cluster Plugins 并选择 global 集群。
  4. 找到 etcd Synchronizer 并将其卸载。
  5. 等待卸载完成后再继续。

在两个 global 集群上同步升级工件

在备用 global 集群和主 global 集群上都完成 Sync upgrade artifacts。在两个集群上使用相同的 registry 类型和完全一致的目标版本负载。对于外部 registry,请为两个 global 集群使用的每个 registry endpoint 完成两种上传模式。

升级备用 global 集群

如果您将使用备用 global 集群上的 Web Console,请验证备用集群 ProductBasespec.alternativeURLs 中包含备用 VIP:

apiVersion: product.alauda.io/v1alpha2
kind: ProductBase
metadata:
  name: base
spec:
  alternativeURLs:
    - https://<standby-cluster-vip>

同步完成后,在 备用 global 集群 上执行剩余的标准工作流步骤:

  1. 运行预检检查。
  2. 部署 cluster version operator。
  3. 请求升级。
  4. 观察执行过程,直到备用 global 集群达到目标版本。

升级主 global 集群

在备用 global 集群达到目标版本后,在 主 global 集群 上执行剩余的标准工作流步骤:

  1. 运行预检检查。
  2. 部署 cluster version operator。
  3. 请求升级。
  4. 观察执行过程,直到主 global 集群达到目标版本。

重新安装 etcd 同步插件并验证同步状态

在重新安装插件之前,请验证在使用端口转发模式时,端口 2379 是否已从两个 global 集群的 VIP 正确转发到各自的控制平面节点。如果备用 global 集群能够直接访问活动 global 集群,则不需要通过负载均衡器进行端口转发。

从活动集群获取活动 global 集群 API server 的 bearer token,然后使用它在备用集群上创建或更新 etcd-sync-active-cluster-token Secret。请仅将 token 保留在当前 shell 中,并在创建 Secret 后将其清除。

# Run on the active cluster and copy the output without storing it in a document.
kubectl -n cpaas-system get secret k8sadmin -o jsonpath='{.data.token}' | base64 -d

在备用集群上运行:

read -rsp "Active global cluster token: " ACTIVE_CLUSTER_TOKEN
printf '\n'
kubectl -n cpaas-system create secret generic etcd-sync-active-cluster-token \
  --from-literal=token="${ACTIVE_CLUSTER_TOKEN}" \
  --dry-run=client -o yaml | kubectl apply -f -
unset ACTIVE_CLUSTER_TOKEN

要重新安装该插件:

  1. 通过其 VIP 访问 备用 global 集群 的 Web Console,并切换到 Administrator 视图。
  2. 导航到 Marketplace > Cluster Plugins 并选择 global 集群。
  3. 找到 etcd Synchronizer,单击 Install,并配置所需参数。

配置插件时:

  • Active Global Cluster VIP 设置为活动 global 集群的 VIP。
  • 当端口 2379 未通过负载均衡器转发时,请正确设置 Active Global Cluster ETCD Endpoints
  • Standby Cluster ETCD Endpoints 设置为备用集群 etcd 地址。除非本地 etcd service 通过不同的 endpoint 暴露,否则请使用默认值。
  • Active Global Cluster Token Secret 设置为 etcd-sync-active-cluster-token
  • 使用 Data Check Interval 的默认值。
  • 除非您正在排查问题,否则请保持 Print detail logs 处于禁用状态。

在重新安装期间,系统会在 etcd-sync Deployment 启动之前运行 etcd-sync-bootstrap Job。验证 bootstrap Job 和运行时资源:

kubectl get job -n cpaas-system etcd-sync-bootstrap
kubectl logs -n cpaas-system job/etcd-sync-bootstrap
kubectl get secret -n cpaas-system remote-etcd-ca
kubectl get issuer -n cpaas-system remote-etcd-issuer
kubectl get certificate -n cpaas-system remote-etcd-client
kubectl get secret -n cpaas-system remote-etcd-client

验证备用 global 集群上的同步 Pods 和当前 leader:

kubectl get po -n cpaas-system -l app=etcd-sync
kubectl get lease -n cpaas-system etcd-sync-mirror
leader_pod=$(kubectl get lease -n cpaas-system etcd-sync-mirror -o jsonpath='{.spec.holderIdentity}')
kubectl logs -n cpaas-system "$leader_pod" | grep -E "Acquired leader lease|Start Sync update"

如果需要重新同步具有 ownerReference 依赖关系的资源,请在出现 Start Sync update 后重新创建当前 leader Pod:

leader_pod=$(kubectl get lease -n cpaas-system etcd-sync-mirror -o jsonpath='{.spec.holderIdentity}')
kubectl delete po -n cpaas-system "$leader_pod"

检查同步状态:

mirror_svc=$(kubectl get svc -n cpaas-system etcd-sync-monitor -o jsonpath='{.spec.clusterIP}')
ipv6_regex="^[0-9a-fA-F:]+$"
if [[ $mirror_svc =~ $ipv6_regex ]]; then
  mirror_host="[$mirror_svc]"
else
  mirror_host="$mirror_svc"
fi
curl -g "http://${mirror_host}/check"
  • LOCAL ETCD missed keys:这些键存在于主 global 集群中,但在备用集群中缺失。通常在重启当前 etcd-sync leader Pod 后可以解决。
  • LOCAL ETCD surplus keys:这些键存在于备用 global 集群中,但在主集群中不存在。在删除这些键之前,请与您的运维团队一起审查。

验证成功后,从插件设置或 release values 中移除任何剩余的旧式纯 token 配置。如果活动集群 token 或远程 etcd-ca 之后发生更改,请再次运行插件升级或重新安装工作流,以便 etcd-sync-bootstrap 刷新运行时凭据和证书。

在两个 global 集群都以目标版本保持健康且同步已恢复后,请继续执行 Upgrade Workload ClustersUpgrade Validation