多集群波次发布与区域恢复
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| 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-candidate2. 发布 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。