本文档详细介绍了 Kubernetes 中可用的各种部署策略,包括标准实现和使用 Argo Rollouts 等工具的高级方法。理解这些策略对于在生产环境中实现可靠的零停机部署至关重要。
有关 Kubernetes 配置管理的信息,请参阅 Kubernetes 配置管理。
部署策略定义了如何在 Kubernetes 环境中推出应用程序更新。策略的选择会影响可用性、资源利用率、风险管理和更新期间的回滚能力。
来源:topics/argo/exercises/blue_green_rollout/solution.md, topics/argo/exercises/canary_rollout/solution.md
Kubernetes 中的默认策略,以滚动方式更新 pod。
关键配置参数
maxUnavailable:更新期间不可用的 pod 的最大百分比maxSurge:更新期间可超出所需数量的 pod 的最大百分比Deployment YAML 中的示例
来源:topics/kubernetes/exercises/kustomize_common_labels/someApp/deployment.yml
在创建新 pod 之前终止所有现有 pod。
配置示例
使用场景: 当应用程序无法同时运行多个版本或可接受停机时间时。
来源:topics/kubernetes/exercises/kustomize_common_labels/someApp/deployment.yml
运行两个相同的环境(蓝色/活动和绿色/空闲),并瞬时切换流量。
使用 Argo Rollouts 实现
来源:topics/argo/exercises/blue_green_rollout/solution.md
逐渐将流量从旧版本转移到新版本。
使用 Argo Rollouts 实现
来源:topics/argo/exercises/canary_rollout/solution.md
Argo Rollouts 通过自定义资源定义 (CRD) 扩展了 Kubernetes 的高级部署功能。
来源:topics/argo/exercises/blue_green_rollout/solution.md, topics/argo/exercises/canary_rollout/solution.md
蓝绿部署实现中的关键组件
工作流
蓝绿部署命令
来源:topics/argo/exercises/blue_green_rollout/solution.md
金丝雀部署实现中的关键组件
金丝雀部署步骤配置
来源:topics/argo/exercises/canary_rollout/solution.md
| 策略 | 停机时间 | 资源使用 | 回滚速度 | 复杂性 | 风险级别 |
|---|---|---|---|---|---|
| 滚动更新 (Rolling Update) | 否 | 100-maxSurge% | 中等 | 低 | 中等 |
| 重新创建 | 是 | 100% | 快 | 非常低 | 高 |
| 蓝绿部署 | 否 | 200% | 非常快 | 中等 | 低 |
| 金丝雀部署 | 否 | 100-maxSurge% | 快 | 高 | 非常低 |
| A/B 测试 (A/B Testing) | 否 | 可变 | 中等 | 非常高 | 中等 |
来源:topics/argo/exercises/blue_green_rollout/solution.md, topics/argo/exercises/canary_rollout/solution.md
根据需求选择策略
实现健康检查
监控部署
自动化验证
处理数据库迁移
来源:topics/datadog/README.md, topics/argo/exercises/blue_green_rollout/solution.md, topics/argo/exercises/canary_rollout/solution.md
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 部署失败 | 应用程序未正确启动 | 实施适当的就绪探针。 |
| 部署不完整 | 资源不足 | 调整资源请求/限制或增加集群容量。 |
| 服务中断 | 不当的流量路由 | 在生产环境中测试服务选择器和路由规则。 |
| 部署缓慢 | 部署步骤过多 | 在金丝雀部署步骤中平衡安全性和效率。 |
| 状态不一致 | 多个版本访问相同数据 | 确保版本之间的数据库兼容性。 |
来源:topics/argo/exercises/canary_rollout/solution.md, topics/argo/exercises/blue_green_rollout/solution.md
Kubernetes 部署策略提供了灵活的应用程序更新方法,平衡了风险、资源使用和停机时间方面的考虑。虽然原生的 Kubernetes 支持基本策略,但 Argo Rollouts 等工具支持蓝绿部署和金丝雀部署等高级模式,并提供精细的控制。
部署策略的选择应与应用程序需求、风险承受能力和运营能力保持一致。随着组织的成熟,它们通常会从简单的滚动更新转向更复杂的、风险可控的方法,例如金丝雀部署。