帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
Amazon EKS 定期修补 AWS Fargate 节点的操作系统以确保它们的安全。作为修补过程的一部分,我们会回收节点来安装操作系统补丁。尝试更新的方式对您的服务造成的影响最小。但是,如果容器组(pod)没有成功被驱逐,有时必须删除容器组。以下是您可以采取的最大限度减少潜在中断的操作:
-
设置适当的容器组(pod)中断预算(PDB),控制同时关闭的容器组(pod)数量。
-
创建 Amazon EventBridge 规则,在删除容器组(pod)之前处理失败的驱逐。
-
在您所收通知中发布的驱逐日期之前,手动重启受影响的容器组(pod)。
-
在 AWS 用户通知中创建通知配置。
Amazon EKS 与 Kubernetes 社区密切合作,以便尽快提供错误修复和安全补丁。所有 Fargate 容器组(pod)都从最新的 Kubernetes 修补程序版本开始,可从集群的 Kubernetes 版本的 Amazon EKS 中获取。如果您的容器组(pod)具有较旧的修补程序版本,Amazon EKS 可能会回收容器组,以便将其更新到最新版本。这可以确保您的容器组(pod)配备了最新的安全更新。这样一来,如果存在关键常见漏洞和风险
AWS Fargate 操作系统更新后,Amazon EKS 将向您发送通知,其中包含受影响的资源和即将驱逐容器组(pod)的日期。如果提供的日期不便进行驱逐,您可以在通知中于选择发布的驱逐日期之前,手动重启受影响的容器组(pod)。系统将驱逐您在收到通知之前创建的任何容器组(pod)。有关如何手动重启容器组(pod)的更多说明,请参阅 Kubernetes 文档
要限制在回收容器组(pod)时同时停机的容器组数量,您可以设置容器组(pod)中断预算(PDB)。您可以使用 PDB 根据每个应用程序的要求定义最低可用性,同时仍允许进行更新。PDB 的最低可用性必须低于 100%。有关更多信息,请参阅 Kubernetes 文档中的为应用程序设置干扰预算
Amazon EKS 使用驱逐 API
当容器组(pod)的驱逐失败时,Amazon EKS 会向您的账户发送一个事件,其中包含驱逐失败的容器组(pod)的详细信息。您可以在计划的终止时间之前对消息采取行动。具体时间根据补丁的紧迫性而有所不同。时间一到,Amazon EKS 会尝试再次驱逐容器组(pod)。但是,如果驱逐失败,这次不会发送新的事件。如果驱逐再次失败,则会定期删除您现有的容器组(pod),以便新容器组(pod)可以拥有最新的补丁。
以下是在容器组(pod)驱逐失败时收到的示例事件。其中包含有关集群、容器组(pod)名称、容器组(pod)命名空间、Fargate 配置文件和计划终止时间的详细信息。
{
"version": "0",
"id": "12345678-90ab-cdef-0123-4567890abcde",
"detail-type": "EKS Fargate Pod Scheduled Termination",
"source": "aws.eks",
"account": "111122223333",
"time": "2021-06-27T12:52:44Z",
"region": "region-code",
"resources": [
"default/my-database-deployment"
],
"detail": {
"clusterName": "my-cluster",
"fargateProfileName": "my-fargate-profile",
"podName": "my-pod-name",
"podNamespace": "default",
"evictErrorMessage": "Cannot evict pod as it would violate the pod's disruption budget",
"scheduledTerminationTime": "2021-06-30T12:52:44.832Z[UTC]"
}
}
此外,将多个 PDB 与一个容器组(pod)关联可能会导致驱逐失败事件。此事件将返回以下错误消息。
"evictErrorMessage": "This pod has multiple PodDisruptionBudget, which the eviction subresource does not support",
您可以基于此事件创建所需的操作。例如,要控制驱逐容器组(pod)的方式,您可以调整容器组(pod)中断预算(PDB)。更具体地说,假设您从指定可用容器组(pod)的目标百分比的 PDB 开始。在升级期间强制终止容器组(pod)之前,您可以将 PDB 调整为不同百分比的容器组(pod)。要接收此事件,您必须在 AWS 账户和集群所属的 AWS 区域中创建 Amazon EventBridge 规则。该规则必须使用以下自定义模式。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的创建对事件作出反应的 Amazon EventBridge 规则。
{
"source": ["aws.eks"],
"detail-type": ["EKS Fargate Pod Scheduled Termination"]
}
可以为事件设置合适的目标来捕获它。有关可用目标的完整列表,请参阅《Amazon EventBridge 用户指南》中的 Amazon EventBridge 目标。您还可以在 AWS 用户通知中创建通知配置。使用 AWS Management Console创建通知时,在事件规则下,为 AWS 服务名称选择 Elastic Kubernetes Service(EKS),为事件类型选择 EKS Fargate 容器组(pod)计划的终止。有关更多信息,请参阅《AWS 用户通知用户指南》中的AWS 用户通知入门。
有关 EKS 容器组(pod)驱逐的常见问题,请参阅 AWS re:Post 中的常见问题解答:Fargate 容器组(pod)驱逐通知