多集群波次发布与区域恢复

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
AWS Amazon Web Services 亚马逊云服务
CI Continuous Integration 持续集成
DB Database 数据库
DNS Domain Name System 域名系统
GCP Google Cloud Platform Google 云平台
RPO Recovery Point Objective 恢复点目标,可接受的数据丢失时间范围
TTL Time To Live 存活时间;具体指缓存有效期或记录过期时间

前置:多集群、每集群已完成 Canary,全局入口能独立关闭区域流量。实验用两个真实预生产集群,各自独立 metrics/Secret/context;共享数据服务需兼容两版和跨区延迟。

1. 定义波次与唯一发布者#

在 Git 固定同一个签名 image digest 和配置版本:预生产→低风险区域 A→区域 B→其余区域。CI 设置环境锁,一次仅一个集群;停止自动遍历全部集群。记录每区上一个 digest、入口权重、DB schema、队列消息版本。

export CTX_A='REPLACE_STAGING_CONTEXT_A'
export CTX_B='REPLACE_STAGING_CONTEXT_B'
export NEW_IMAGE='REPLACE_APPROVED_IMAGE_AT_DIGEST'
kubectl --context "$CTX_A" -n orders get deployment orders-candidate
kubectl --context "$CTX_B" -n orders get deployment orders-candidate

2. 发布 A,并隔离 B#

kubectl --context "$CTX_A" -n orders set image deployment/orders-candidate "api=$NEW_IMAGE"
kubectl --context "$CTX_A" -n orders rollout status deployment/orders-candidate --timeout=10m

使用 Canary 篇每档流量步骤,但每条 kubectl 必须显式加 --context "$CTX_A";门禁 PROM_URL 指向 A,指标必须按 cluster 过滤。使用对应区域域名跑真实订单,并测跨区客户端、数据复制延迟、故障转移与队列积压。保持 B 的 candidate/stable 版本完全不变,保存其 digest 作为证据。

A 通过完整峰值/约定观察窗口后,才对 B 执行同样 set image、权重、门禁;不复用 A 的 Analysis/压测结果作为 B 的通过依据。

3. 中途故障演练#

在 A 候选版本注入预生产故障;应停止整个 wave,禁止启动 B。

kubectl --context "$CTX_A" apply -f route-stable.yaml
kubectl --context "$CTX_A" -n orders get httproute orders-release -o yaml
kubectl --context "$CTX_B" -n orders get deployment orders-candidate -o jsonpath='{.spec.template.spec.containers[0].image}'

若 A 整区不可用,按 AWS 灾备 或 GCP DNS 路由 的实际入口操作摘除 A,确认 B 有容量、数据满足 RPO 后再接流。DNS TTL/长连接导致恢复有延迟,不能宣称瞬时。停止点、回退点和恢复流量权重都纳入发布记录。

验收:A 故障时 B 未更新;入口切换无双写冲突;区域恢复后先小流量观察,再继续新一轮发布,不能自动续跑之前失败的 wave。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭