Fargate pod 修补 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Fargate pod 修补

Amazon EKS 必须定期修补 Amazon Fargate pods 来确保它们的安全。尝试更新的方式对您的服务造成的影响最小。但是,如果 pods 没有成功被驱逐,有时必须删除它们。以下是您可以采取的最大限度减少潜在中断的操作:

  • 设置适当的 pod 中断预算 (PDB),从而控制同时关闭的 pods 数量。

  • 创建事件规则来在删除 pods 之前对失败的驱逐做出反应。

Amazon EKS 与 Kubernetes 社群密切合作,以便尽快提供错误修复和安全补丁。Kubernetes 的新补丁版本作为 Fargate 平台版本的一部分提供。所有 Fargate pods 都从最新的 Kubernetes 修补程序版本开始,可从集群的 Kubernetes 版本的 Amazon EKS 中获取。如果您的 pod 具有较旧的修补程序版本,Amazon EKS 可能会重新启动它以将其更新到最新版本。这可以确保您的 pods 配备了最新的安全更新。这样一来,如果存在关键常见漏洞和风险(CVE)问题,您可以随时了解最新信息以降低安全风险。

要限制 pods 修补时同时停机的 pods 数量,您可以设置 pod 中断预算 (PDB)。您可以使用 PDB 根据每个应用程序的要求定义最低可用性,同时仍允许进行更新。有关更多信息,请参阅 Kubernetes 文档中的为应用程序指定中断预算

Amazon EKS 使用驱逐 API 在遵守您为应用程序设置的 PDB 的同时安全地耗尽 pod。容器组(pod)被可用区驱逐出来,以最大限度地减少影响。如果驱逐成功,新 pod 将获得最新的补丁,无需进一步操作。

当 pod 的驱逐失败时,Amazon EKS 会向您的账户发送一个事件,其中包含驱逐失败的 pods 的详细信息。您可以在计划的终止时间之前对消息采取行动。具体时间根据补丁的紧迫性而有所不同。此时,Amazon EKS 尝试再次驱逐 pods。但是,如果驱逐失败,这次不会发送新的事件。如果驱逐再次失败,您现有的 pods 将定期删除,以便 pods 可以拥有最新的补丁。

以下是在 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 中断预算 (PDB),从而控制驱逐 pods 的方式。更具体地说,假设您从指定可用 pods 的目标百分比的 PDB 开始。在升级期间强制终止 pods 之前,您可以将 PDB 调整为不同百分比的 pods。要接收此事件,您必须在 Amazon Web Services 账户 和集群所属的区域中创建 Amazon EventBridge 规则。该规则必须使用以下自定义模式。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的创建对事件作出反应的 Amazon EventBridge 规则

{ "source": ["aws.eks"], "detail-type": ["EKS Fargate Pod Scheduled Termination"] }

可以为事件设置合适的目标来捕获它。有关可用目标的完整列表,请参阅《Amazon EventBridge 用户指南》中的 Amazon EventBridge 目标