本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
了解区域中断期间的 pod 驱逐情况
当可用区完全中断时(也就是说,当该可用区中的所有节点都失去与 Kubernetes 控制平面的连接时),Kubernetes 中的节点生命周期控制器Terminating而新的 Pod 则被调度到可用区中运行良好的节点上。在此期间,受影响的节点会显示NotReady状态,调度器会阻止在这些节点上放置新的 pod, EndpointSlice控制器会从服务路由中删除与受损可用区关联的端点,直到连接恢复。
对于涉及区域内部分节点故障的场景(只有部分节点无法访问),节点生命周期控制器会应用不同的驱逐行为。如果中断持续时间超过了配置的容忍期(默认为五分钟),则断开连接的节点上的 Pod 将被标记为,Terminating而新 Pod 则会被调度到可用区中运行良好的节点上。
实施 Amazon EKS 区域转移以提高弹性
与 Amazon 应用程序恢复控制器 (ARC) 集成的 Amazon EKS 区域转移提供了一种在可用区受损期间主动管理流量的机制。此功能允许将网络流量从不健康的可用区临时重定向到该可用区内的健康区域,从而最大限度 AWS 区域 地减少服务中断。
了解区域偏移机制
Amazon EKS 区域转移可解决东西向流量(集群内的 Pod 间通信)。当使用应用程序负载均衡器或网络负载均衡器配置区域转移时,它还支持入口流量路由。该机制通过协调多个 Kubernetes 和 AWS 控制平面组件来运行,以在不中断正在运行的工作负载的情况下安全地重定向流量。在主动的区域转移期间,Amazon EKS 会自动执行以下协调操作:
-
节点封锁:受损可用区中的所有节点都被封锁。这可以防止 Kubernetes 调度器在维护现有工作负载的同时在节点上放置新的 pod。
-
可用区重新平衡暂停:对于托管节点组,可用区重新平衡操作将暂停,Auto Scaling 组将更新,以仅在运行良好的可用区中启动新的数据平面节点。这样可以确保受损区域中不会配置新的容量。
-
端点移除: EndpointSlice 控制器从所有相关可用区中移除受损可用区中的 pod 端点 EndpointSlices。这样可以确保服务发现和负载平衡机制仅将流量路由到在运行良好的可用区中的 pod。
-
工作负载保留:Amazon EKS 不会在受影响的可用区中终止节点或驱逐容器。它可以保持受损区域的全部容量,因此当区域转移到期或取消时,流量可以安全地返回,而无需额外的扩展操作。
区域移位激活方法
根据您的运营模式,您可以从两种方法中进行选择来启动区域转移:
-
当通过监控、警报或客户报告检测到特定的可用区问题时,手动区域切换可提供操作员驱动的控制。此方法需要通过 ARC 控制台 AWS Command Line Interface (AWS CLI) 或区域移位进行明确的操作 APIs,操作员可以在其中指定受损的可用区并定义班次的到期时间。当团队拥有专门的监控和待命能力,并且更愿意直接控制交通管理决策时,手动轮班是合适的。
-
当ARC根据内部遥测和多个可用区中的运行状况信号(包括网络指标、亚马逊弹@@ 性计算云(Amazon)和弹性负载平衡(Elastic Load Balancing EC2) AWS 服务,检测到潜在的可用区故障或损伤时,Zonal autoshift授权 AWS 自动启动轮班。 AWS 当指示器显示问题已解决时,自动结束自动换档。如果您希望以最少的人工干预实现最高的可用性,我们建议您使用这种方法,因为它可以对检测到的可用区损坏进行亚分钟响应。
有效区域偏移的先决条件
为了在可用区受损期间成功保护应用程序,在启用区域转移功能之前,您必须架构集群以实现多可用区弹性:
-
多可用区节点分布:在至少三个可用区中配置工作节点,以确保在一个可用区不可用时有足够的冗余。
-
容量规划:在运行正常的可用区中预配置足够的计算容量,以容纳一个可用区停止服务时的全部工作负载,因为在主动中断期间扩展操作可能会遇到容量不足的情况。
-
Pod 分发和预扩展:在所有可用区部署每个应用程序的多个副本,并在每个区域中预先扩展关键系统组件,例如 CoreDNS。这有助于确保在转移区域后仍有足够的容量。
关于区域干扰弹性的建议
-
在@@ 创建集群时启用区域切换:对于新的 EKS 集群,在初始配置期间通过 Amazon EKS 控制台或基础设施即代码 (IaC) 工具(例如)启用与 ARC 的区域转移集成。 AWS CLI AWS CloudFormation默认情况下,使用快速配置创建的 EKS 自动模式集群会启用区域偏移。
-
选择适当的激活方法:对于需要通过自动响应实现最大可用性的生产环境,请选择区域自动切换,特别是对于面向客户的应用程序,在可用区受损期间停机几分钟可能会对业务产生重大影响。对于运营团队倾向于在交通转移之前提供明确批准的环境,或者应用程序测试和验证仍在进行中的环境,请使用手动分区切换。
-
在生产部署之前测试弹性:通过手动启动测试区域转移或启用区域自动移位实践运行来验证集群在单可用区丢失下的行为,以验证应用程序是否保持可用性、性能是否可以接受,并且在可用区数量减少的情况下运行时容量是否充足。我们强烈建议您进行此项测试,这样您就可以在可用区出现实际损坏之前发现配置差距。
-
协调负载均衡器配置:对于接收外部流量的应用程序,请在关联的应用程序负载均衡器和网络负载均衡器上启用 ARC 区域切换,以确保在可用区域受损期间,入口流量和集群内东西向流量同时移动。这种协调可以防止出现外部请求到达健康的 pod 但这些 pod 无法与移开区域中的依赖项通信的情况。
-
监控轮班操作:启用区域班次后,配置轮班事件的监控和警报,包括自动换班激活、手动轮班启动和轮班到期,以保持对交通管理操作及其对应用程序行为的影响的运营可见性。
轮班完成和恢复
当区域转移根据其配置的持续时间过期,或者在可用区缺陷解决后被手动取消时, EndpointSlice 控制器会自动更新所有区域 EndpointSlices 以重新合并已恢复的可用区域中的端点。当客户端刷新端点信息并建立新的连接时,流量会逐渐返回到先前受影响的区域。这无需手动干预或重新调度 pod 即可实现集群容量的充分利用。