亚马逊AWS官方博客

HAQM EKS 版本升级:升级方案之蓝绿升级

在 Kubernetes 生态系统中,保持集群版本的最新状态对于维护安全性、性能和功能至关重要。然而,升级过程本身可能会带来风险和复杂性,特别是对于大规模的生产环境。蓝绿升级策略提供了一种更安全、更可控的方法来升级 HAQM EKS 集群。在使用原集群升级方案时,许多情况下集群升级可能较为直接。但在以下场景中,您可能更倾向于直接创建一个全新的集群,并将工作负载从旧集群迁移至新集群:

适用场景分析

  1. 版本跨度大:当集群落后多个 Kubernetes 版本时(如从 1.26 升级到 1.31)
  2. 测试异常:在测试环境中进行滚动更新时发现兼容性问题

蓝绿升级的详细规划和准备工作

蓝绿升级策略涉及创建一个全新的 EKS 集群(绿色环境),然后逐步将工作负载从现有集群(蓝色环境)迁移过去。这种方法提供了更大的灵活性和安全性,但也需要更多的规划和资源。

评估当前环境

  • 审查现有 EKS 集群配置,包括节点组、VPC 设置、安全组等。
  • 列出所有运行的工作负载、服务和配置。
  • 识别关键的持久化数据存储,如 EBS 卷、RDS 数据库等。

定义目标状态

  • 确定目标 EKS 版本及其新特性。
  • 规划新集群的网络架构,考虑是否需要对 VPC 或子网进行更改。
  • 决定是否要同时更新其他组件,如容器运行时、CNI 插件等。

资源规划

  • 估算所需的额外计算资源,包括 EC2 实例、负载均衡器等。
  • 评估额外的存储需求,特别是对于有状态应用。
  • 计算双集群运行期间的成本增加。

制定迁移策略

  • 为每个工作负载制定详细的迁移计划。
  • 确定数据迁移的方法,特别是对于有状态服务。
  • 规划网络流量的逐步切换策略。

准备回滚计划

  • 制定详细的回滚程序,包括如何快速将流量切回蓝色环境。
  • 确保所有团队成员了解回滚触发条件和流程。

更新工具和脚本

  • 更新 CI/CD 管道以支持双集群部署。
  • 准备必要的脚本来自动化部分迁移和验证过程。

培训和沟通

  • 对团队进行蓝绿升级流程的培训。
  • 制定详细的沟通计划,确保所有利益相关者了解升级时间表和潜在影响。

创建和配置新 EKS 集群的步骤

创建新的 EKS 集群(绿色环境)是蓝绿升级的核心步骤。以下是详细的过程。

创建新的 VPC(可选)

如果您决定在新的 VPC 中创建集群:

aws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=eks-new-vpc}]'

确保配置适当的子网、路由表和互联网网关。

创建 EKS 集群

使用 AWS CLI 或 eksctl 创建新集群:

eksctl create cluster \
--name eks-green \
--version 1.XX \
--region your-region \
--nodegroup-name standard-workers \
--node-type t3.medium \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--managed

 配置 RBAC 和网络策略

  • 应用必要的 RBAC 配置:
    kubectl apply -f rbac-config.yaml
  • 设置网络策略(如果使用):
    kubectl apply -f network-policies.yaml

安装和配置插件

安装必要的 EKS 插件,如 CoreDNS、kube-proxy 和 VPC CNI:

aws eks create-addon --cluster-name eks-green --addon-name vpc-cni --addon-version your-version
aws eks create-addon --cluster-name eks-green --addon-name coredns --addon-version your-version
aws eks create-addon --cluster-name eks-green --addon-name kube-proxy --addon-version your-version

配置存储类

如果使用动态存储供应,配置适当的存储类:

kubectl apply -f storage-class.yaml

设置监控和日志

  • 部署 Prometheus 和 Grafana 进行监控:
    helm install prometheus prometheus-community/kube-prometheus-stack
  • 配置 CloudWatch 日志:
    kubectl apply -f cloudwatch-namespace.yaml
    kubectl apply -f fluentd-cloudwatch.yaml
    

验证新集群

  • 检查节点状态:kubectl get nodes
  • 验证系统 Pod:kubectl get pods -n kube-system
  • 运行基本的诊断和性能测试

数据和配置的迁移策略

数据和配置的迁移是蓝绿升级中最具挑战性的部分之一,特别是对于有状态应用。

配置迁移

  • 使用 kubectl get all --all-namespaces -o yaml > all-resources.yaml 导出所有资源配置。
  • 审查并适应配置以适应新版本的 API 变化。
  • 通过自动化工具将将配置应用到新集群。

无状态应用迁移

  • 更新 CI/CD 管道以同时部署到蓝色和绿色环境。
  • 验证新环境中的应用功能和性能。

 有状态应用迁移

对于使用 EBS 卷的应用(注意应用能够容忍迁移过程的数据的临时中断):

  1. 创建卷快照。
  2. 从快照在新集群中创建新卷。
  3. 更新 PersistentVolume 定义以使用新卷。

对于使用 RDS 的应用:

  1. 设置数据库复制。
  2. 在切换时执行最终同步和故障转移。

数据同步策略

  • 对于需要持续同步的数据,考虑使用 AWS DMS(数据库迁移服务)或类似工具。
  • 实施双写策略,在迁移期间将数据写入 both 环境。

配置外部服务

更新任何外部服务(如 ElastiCache、SQS 队列)的端点,以便与新集群一起工作。

流量切换和灰度发布的实施

流量切换是蓝绿升级中最关键的步骤,需要谨慎和精细的控制。

准备负载均衡器

  • 创建新的 ALB(应用负载均衡器)或 NLB(网络负载均衡器)指向绿色环境。
  • 配置健康检查确保绿色环境准备就绪。

DNS 配置

  • 使用 Route 53 加权路由策略来逐步将流量引导到绿色环境。
  • 开始时分配少量流量(如 5%)到绿色环境。

监控和验证

  • 密切监控绿色环境的性能和错误率。
  • 验证关键业务功能在绿色环境中正常运行。

渐进式流量切换

  • 逐步增加到绿色环境的流量比例(如 5% → 10% → 25% → 50%)。
  • 在每个阶段进行全面的监控和验证。

完全切换

  • 当确信绿色环境稳定时,将 100% 的流量切换到新集群。
  • 保持蓝色环境运行一段时间,以便快速回滚。

清理

  • 确认稳定运行后,逐步关闭蓝色环境的资源。
  • 更新所有文档和监控系统以反映新环境。

升级过程中的监控和回滚策略

在整个升级过程中,全面和严格的监控至关重要。同时,准备好快速有效的回滚策略也同样重要。

全面监控

  • 使用 Prometheus 和 Grafana 监控关键指标:
  • 集群层面:节点 CPU、内存、网络使用率
  • 应用层面:请求延迟、错误率、吞吐量
  • 设置 CloudWatch 警报以快速检测异常。
  • 实施分布式追踪(如使用 Jaeger)以识别性能瓶颈。

日志聚合和分析

  • 使用 ELK 栈(Elasticsearch, Logstash, Kibana)或 CloudWatch Logs Insights 进行日志分析。
  • 设置关键字警报以捕获错误模式。

用户体验监控

  • 实施真实用户监控(RUM)以跟踪最终用户体验。
  • 使用综合监控模拟关键用户旅程。

回滚触发条件

定义明确的回滚触发条件,例如:

  • 错误率超过预定阈值(如 1%)。
  • 关键事务的延迟增加超过 50%。
  • 特定业务 KPI 显著下降。

回滚流程

  1. 立即停止向绿色环境的流量路由。
  2. 将所有流量重定向回蓝色环境。
  3. 验证蓝色环境的性能和功能。
  4. 通知所有相关团队回滚已执行。

回滚后分析

  • 进行彻底的根本原因分析。
  • 更新升级计划以解决发现的问题。
  • 考虑是否需要对绿色环境进行调整后重试升级。

最佳实践和结论

最佳实践

  1. 彻底的前期规划:投入足够时间进行详细规划和风险评估。
  2. 自动化:尽可能自动化迁移和验证步骤,以减少人为错误。
  3. 频繁演练:在生产环境执行之前,在测试环境中多次演练整个过程。
  4. 增量方法:采用小步骤、频繁验证的方法,而不是一次性大规模迁移。
  5. 通信透明:保持与所有利益相关者的清晰、频繁的沟通。
  6. 性能基准:在迁移前后进行详细的性能基准测试,以确保没有性能下降。
  7. 文档化:详细记录整个过程,包括遇到的问题和解决方案,以便将来参考。

结论

蓝绿升级策略为 HAQM EKS 集群提供了一种安全、可控的升级方法。虽然这种方法需要更多的规划和资源,但它显著降低了风险,并提供了更大的灵活性和回滚能力。通过遵循本文概述的步骤和最佳实践,组织可以成功执行复杂的 EKS 版本升级,同时最小化对生产环境的影响。

记住,成功的升级不仅仅是技术挑战,还需要仔细的规划、有效的沟通和团队协作。随着组织积累经验,这个过程将变得更加精细和高效,使得保持 Kubernetes 环境的最新状态成为一个可管理和例行的操作。

通过采用蓝绿升级策略,组织可以充分利用 Kubernetes 的最新功能和安全更新,同时保持对升级过程的严格控制。这不仅提高了系统的整体稳定性和性能,还为未来的创新和扩展奠定了坚实的基础。

本篇作者

叶鹏勇

亚马逊云科技解决方案架构师,负责容器以及 DevOps 相关领域的方案和架构设计工作。在容器、微服务、SRE 相关领域有多年的实战经验。

张凯

亚马逊云科技解决方案架构师,主要负责基于亚马逊云科技的解决方案架构设计和方案咨询。具有多年的架构设计、项目管理经验。