下载工作台
项目运维与部署

蓝绿与金丝雀发布跟练

试读上半部分 · 解锁后可读全文

第 9 章 · 蓝绿与金丝雀发布跟练

本章目标:在 staging-app 完成 蓝绿零停机切换Ingress 金丝雀渐进流量;与 ch07 监控 联动对比蓝/绿指标;掌握大促发布节奏与秒级回切。

学时建议:3~3.5 小时(含 2.5 小时跟练)

前置ops-deploy ch04 滚动升级;ch07 监控 Dashboard;架构 ch03 发布策略设计。


9.1 场景说明

项目内容
背景demo-api 2.0.0 大版本含 checkout 重构;滚动升级风险高,需秒级回切能力
决策staging 用蓝绿验证切换;prod 大促前用金丝雀 5%→20%→100%
你的角色发布执行 + 监控值守
本章任务蓝绿切换+回切;金丝雀 10% 运行 15min 并记录对比指标
约束每阶段最小观察 15min;未达标 禁止 提权重

9.2 学完你能

能力验收标准
策略选型滚动/蓝绿/金丝雀场景对照
蓝绿实操双 Deployment + Service selector 切换
金丝雀实操Ingress canary-weight 分阶段
监控对比蓝绿 5xx/P99 表格
DB 协同破坏性迁移时为何不能简单蓝绿
回滚对比三种策略 RTO 排序

9.3 策略选型

场景推荐原因
常规迭代滚动(ch04)资源省
大版本 / Schema 变更蓝绿秒级回切
高风险功能金丝雀控制爆炸半径
大促期间金丝雀 5%→20%→100%观察错误预算

9.4 逐步跟练 · 剧本 A:蓝绿发布(约 60 分钟)

拓扑demo-api-blue(v1.4.3)+ demo-api-green(v2.0.0),共用 Service demo-api

步骤 1 — 部署 green(不挂流量)

# demo-api-green Deployment 片段
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-api-green
  namespace: staging-app
  labels: { app: demo-api, version: green }
spec:
  replicas: 2
  selector:
    matchLabels: { app: demo-api, version: green }
  template:
    metadata:
      labels: { app: demo-api, version: green }
    spec:
      containers:
        - name: api
          image: registry.devops.svc:5000/demo-api:2.0.0

应用部署 → staging-app 创建 green;Service 仍 selector version: blue

你应该看到:green Pod Running;系统容器 内 curl green Pod IP /health 200。

步骤 2 — 内网冒烟

# 进入集群内 jump pod 或 port-forward green
curl -sf http://<green-pod-ip>:8080/health
curl -sf http://<green-pod-ip>:8080/api/v1/products

步骤 3 — 切换流量(<1min)

kubectl patch service demo-api -n staging-app \
  -p '{"spec":{"selector":{"app":"demo-api","version":"green"}}}'

或小紫 应用部署 → Service demo-api → 编辑 selector

你应该看到运维 → 监控告警 Dashboard 流量切到 green;5xx 无突增。

步骤 4 — 观察 5min,失败则回切

kubectl patch service demo-api -n staging-app \
  -p '{"spec":{"selector":{"app":"demo-api","version":"blue"}}}'

RTO:selector 改回 < 1 分钟


9.5 逐步跟练 · 剧本 B:金丝雀发布(约 90 分钟)

前提:集群 Ingress 支持 canary(Nginx Ingress / APISIX)。

步骤 1 — 部署 canary Deployment + Service

  • demo-api-canary → 镜像 2.0.0
  • demo-api-stable → 镜像 1.4.3

步骤 2 — 创建金丝雀 Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-api-canary
  namespace: staging-app

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。