部署策略:蓝绿与金丝雀
超越滚动更新,学习如何在 Kubernetes 中使用蓝绿部署和金丝雀部署模式安全发布
部署策略:蓝绿与金丝雀 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
为什么不只使用滚动更新
滚动更新会逐步替换容器组,但在过渡期间新旧版本会同时存在。对于风险较高的发布,您可能希望完全控制哪些用户能够看到新版本。
蓝绿和金丝雀策略可以提供这种控制。
蓝绿策略的概念
在蓝绿部署中,您会运行两个完全相同的环境:
- 蓝色 = 当前线上版本
- 绿色 = 新版本,已完整部署但尚未接收流量
您可以一次性将流量从蓝色环境切换到绿色环境。
两个部署,一个服务
每个版本都有自己的部署资源,并带有版本标签。一个服务会选择当前上线的颜色版本。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-blue
spec:
replicas: 3
selector:
matchLabels:
app: web
version: blue
template:
metadata:
labels:
app: web
version: blue
spec:
containers:
- name: web
image: myapp:1.0切换流量
要让绿色版本上线,只需修改服务选择器,使其指向绿色版本。切换会立即生效。
kubectl patch service web -p '{"spec":{"selector":{"app":"web","version":"green"}}}'蓝绿策略的优缺点
- 优点:切回蓝色版本即可立即回滚
- 优点:发布期间不会混用不同版本
- 缺点:重叠期间需要两倍资源
金丝雀策略的概念
金丝雀发布会先将一小部分流量发送到新版本。如果指标表现正常,就逐步扩大新版本的流量。
这个名称源于矿工使用金丝雀来及早发现危险。
使用副本数量实现金丝雀发布
一种简单的金丝雀发布方式是让两个部署资源共享同一个服务标签。流量会大致按照副本数量的比例分配。
# stable: 9 replicas, canary: 1 replica => ~10% to canary
kubectl scale deployment app-stable --replicas=9
kubectl scale deployment app-canary --replicas=1逐步推广金丝雀版本
随着信心增加,您可以逐步提高金丝雀版本的流量比例;当它承载全部流量后,再停用旧版本。
kubectl scale deployment app-canary --replicas=5
kubectl scale deployment app-stable --replicas=5
# later, fully promote
kubectl scale deployment app-canary --replicas=10
kubectl scale deployment app-stable --replicas=0观察金丝雀版本
金丝雀发布的核心就是观察。在推广之前,请关注错误率、延迟和日志。
kubectl get pods -l version=canary
kubectl logs -l version=canary --tail=50选择策略
- 蓝绿:适合需要干净、即时切换并快速回滚的场景
- 金丝雀:适合希望限制影响范围并通过真实流量验证的场景
- 滚动更新:适合作为低风险、常规更新的默认方案
kubectl 之外的工具
如果需要细粒度地拆分流量(例如精确分配 5%),团队会使用 Istio 等服务网格,或使用 Argo Rollouts 和 Flagger 等渐进式交付工具来自动执行金丝雀分析。
快速检查
选择最能描述金丝雀发布的说法。
回顾
您比较了高级发布策略。蓝绿策略在两个环境之间即时切换全部流量,以便快速回滚;金丝雀策略则逐步转移流量,以降低风险。两者都建立在您已经了解的部署和服务基本资源之上。
常见问题解答
「部署策略:蓝绿与金丝雀」课时是免费的吗?
是的 — 「部署策略:蓝绿与金丝雀」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「部署策略:蓝绿与金丝雀」这节课中我会学到什么?
超越滚动更新,学习如何在 Kubernetes 中使用蓝绿部署和金丝雀部署模式安全发布 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「部署策略:蓝绿与金丝雀」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 了解 Deployment
- 使用 ReplicaSets 扩展应用
- 滚动更新与回滚
- 部署策略:蓝绿与金丝雀