菜单

Kubernetes 部署策略

相关源文件

目的

本文档详细介绍了 Kubernetes 中可用的各种部署策略,包括标准实现和使用 Argo Rollouts 等工具的高级方法。理解这些策略对于在生产环境中实现可靠的零停机部署至关重要。

有关 Kubernetes 配置管理的信息,请参阅 Kubernetes 配置管理

部署策略概述

部署策略定义了如何在 Kubernetes 环境中推出应用程序更新。策略的选择会影响可用性、资源利用率、风险管理和更新期间的回滚能力。

部署策略工作流程

来源:topics/argo/exercises/blue_green_rollout/solution.md, topics/argo/exercises/canary_rollout/solution.md

Kubernetes 基本部署策略

滚动更新(默认)

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 实现

Argo Rollouts 通过自定义资源定义 (CRD) 扩展了 Kubernetes 的高级部署功能。

安装

Rollout 资源架构

来源:topics/argo/exercises/blue_green_rollout/solution.md, topics/argo/exercises/canary_rollout/solution.md

蓝绿部署实现

蓝绿部署实现中的关键组件

  1. 一个替代标准 Deployment 的 Rollout 资源
  2. 同时运行的两个环境
  3. 环境之间的手动或自动推广

工作流

蓝绿部署命令

来源:topics/argo/exercises/blue_green_rollout/solution.md

金丝雀部署实现

金丝雀部署实现中的关键组件

  1. 定义渐进式部署步骤的 Rollout 资源
  2. 稳定版和金丝雀版服务之间的流量拆分
  3. 与流量管理解决方案集成

金丝雀部署步骤配置

来源: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

最佳实践

  1. 根据需求选择策略

    • 对于具有向后兼容性的简单应用程序,请使用滚动更新。
    • 对于需要即时回滚的关键应用程序,请使用蓝绿部署。
    • 对于需要逐步验证的高风险部署,请使用金丝雀部署。
  2. 实现健康检查

    • 配置适当的就绪性和存活探针。
    • 确保流量仅路由到健康的 pod。
  3. 监控部署

    • 与 Datadog 等监控系统集成以获取部署指标。
    • 为部署失败设置警报。
  4. 自动化验证

    • 在部署管道中使用自动化测试。
    • 考虑使用 Argo 的分析模板进行基于指标的推广/回滚。
  5. 处理数据库迁移

    • 确保模式更改是向后兼容的。
    • 对于复杂的更改,请考虑单独的迁移工作流。

来源: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 等工具支持蓝绿部署和金丝雀部署等高级模式,并提供精细的控制。

部署策略的选择应与应用程序需求、风险承受能力和运营能力保持一致。随着组织的成熟,它们通常会从简单的滚动更新转向更复杂的、风险可控的方法,例如金丝雀部署。