在 DR 环境中升级全局集群

当环境同时包含主全局集群和备用全局集群时,请使用此操作步骤。DR 特定步骤是在升级全局集群中的标准 CVO 工作流基础上执行的附加步骤。

升级操作步骤

升级前验证 DR 环境

按照常规的全局 DR 检查操作步骤,确保备用全局集群中的数据与主全局集群一致。有关 DR 拓扑和同步工作流的背景信息,请参阅全局集群灾难恢复。

如果检测到不一致,请勿在下一步卸载 etcd 同步插件,并在继续之前联系技术支持。在备用全局集群缺少主全局集群所持有的数据时卸载插件,可能导致所有者引用解析错误,并可能删除工作负载集群节点 Machine 对象,包括 Alauda OS 集群;在这种情况下,删除操作会销毁其后端虚拟机。

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

kubectl get machines.platform.tkestack.io

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

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

  1. 通过 IP 或 VIP 访问备用全局集群的 Web Console。
  2. 切换到管理员视图。
  3. 导航到Marketplace > 集群插件,并选择 global 集群。
  4. 找到 全局集群灾难恢复,然后将其卸载。
  5. 等待卸载完成后再继续。

在两个全局集群上同步升级构件

在备用全局集群和主全局集群上完成同步升级构件。在两个集群上使用相同的 registry 类型和完全一致的目标版本负载。对于外部 registry,请为两个全局集群使用的每个 registry 端点完成两种上传模式。

升级备用全局集群

如果要在备用全局集群上使用 Web Console,请验证备用集群 ProductBase 在 spec.alternativeURLs 中包含备用 VIP:

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

同步完成后,在备用全局集群上执行其余标准工作流步骤:

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

升级主全局集群

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

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

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

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

从活动集群获取活动全局集群 API 服务器的 bearer 令牌,然后使用该令牌在备用集群上创建或更新 etcd-sync-active-cluster-token Secret。仅在当前 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 访问备用全局集群的 Web Console,并切换到管理员视图。
  2. 导航到Marketplace > 集群插件,并选择 global 集群。
  3. 找到 全局集群灾难恢复,单击安装,并配置所需参数。

配置插件时:

  • 将活动全局集群 VIP设置为活动全局集群的 VIP。
  • 当端口 2379 未通过负载均衡器转发时,正确设置活动全局集群 ETCD 端点。
  • 将备用集群 ETCD 端点设置为备用集群 etcd 地址。除非本地 etcd 服务通过其他端点公开,否则使用默认值。
  • 将活动全局集群令牌 Secret设置为 etcd-sync-active-cluster-token。
  • 使用数据检查间隔的默认值。
  • 除非正在进行故障排除,否则不要启用打印详细日志。

重新安装期间,系统会先运行 etcd-sync-bootstrap Job,然后启动 etcd-sync Deployment。验证引导 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

在备用全局集群上验证同步 Pod 和当前 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:主全局集群中存在这些键,但备用集群中缺少这些键。重启当前 etcd-sync leader Pod 后通常可以解决此问题。
  • LOCAL ETCD surplus keys:备用全局集群中存在这些键,但主集群中不存在。请与运维团队一起检查这些键,然后再删除。

验证成功后,从插件设置或 release 值中移除所有剩余的旧版明文令牌配置。如果活动集群令牌或远程 etcd-ca 后续发生更改,请再次运行插件升级或重新安装工作流,以便 etcd-sync-bootstrap 刷新运行时凭据和证书。

两个全局集群在目标版本上均运行正常且同步已恢复后,继续执行升级工作负载集群或升级验证。如果 global 集群运行 Alauda OS,请先在两个 global 集群上运行Alauda OS 上的 Kubernetes 升级。