Amazon EKS 终止支持通知和增强的可发现性

作者: |

本文由 Praseeda Sathaye(容器和 OSS 首席解决方案架构师)、AJ Davis(亚马逊云科技企业支持)和 Arvind Viswanathan(首席解决方案架构师)共同撰写

导言

在快速发展的容器化应用程序世界中,保持 Kubernetes 环境的弹性和可观察性已成为一项关键挑战。随着组织越来越多地采用 Amazon Elastic Kubernetes Service(Amazon EKS)来管理其容器化工作负载,对集群版本生命周期管理和发现机制的需求变得至关重要。随着 Amazon EKS 环境变得越来越复杂并跨越多个亚马逊云科技区域和账户,用户往往难以跟踪集群版本、支持生命周期和整体部署状态。

主动监控 EKS 集群生命周期和终止支持对于确保 Kubernetes 部署的安全性、稳定性和合规性至关重要。此外,了解整个亚马逊云科技组织中的 EKS 集群部署情况对于有效的资源管理、战略规划和维护准确的库存至关重要。

在这篇文章中,为了解决这些痛点,我们分享了两个提供 EKS 集群可观察性的强大解决方案:

  1. 支持终止通知
  2. 发现和报告

第一个解决方案使用亚马逊云科技 Health、Amazon EventBridge 和 Amazon Simple Notification Service (Amazon SNS) / Amazon Simple Queue Service (Amazon SQS) 来监控 Amazon EKS 的特定事件,特别是对于即将终止支持(标准和扩展)的集群。在 EKS 集群的支持窗口接近尾声时提前发送通知,使该解决方案能够让您主动规划和更新集群的 Kubernetes 版本。

作为补充,第二种解决方案是自动发现和报告机制,该机制可识别和汇总有关组织内所有亚马逊云科技区域和账户的 EKS 集群的详细信息。这种对集群版本、相关标签和其他关键细节的全面可见性有助于合规性检查、准确的资源库存管理和战略升级规划。

这两个解决方案共同为有效的 EKS 集群生命周期管理提供了一个强大的框架,使组织能够领先于潜在问题,优化资源使用并做出符合其长期战略目标的明智决策。

先决条件

你需要以下内容才能完成演练:

  • 启用了组织的亚马逊云科技账户
  • Amazon Support 提供的用于使用亚马逊云科技 Health API 的商业、企业入口或企业支持计划
  • Amazon EKS、亚马逊云科技 Health、EventBridge、Amazon Lambda、Amazon Identity and Access Management (IAM)、Amazon S3、Amazon SNS、Amazon SQS 和亚马逊云科技云开发套件 (亚马逊云科技 CDK) 的基础知识
  • 能够将管理层的权限委托给工具账户,该账户用于在整个组织中集中通知和执行 EKS 集群发现
  • Python 知识

初始设置

以下步骤将指导您完成初始设置。

在管理账户中启用亚马逊云科技健康组织视图

在亚马逊云科技 Health 中启用组织视图,以获得整个组织的亚马逊云科技运行状况事件的集中汇总视图。您可以通过控制台或使用亚马逊云科技命令行接口 (亚马逊云科技 CLI) 运行以下命令来验证此功能是否已启用:aws health describe-health-service-status-for-organization。你应该看到以下内容:{"healthServiceAccessStatusForOrganization": "ENABLED" }

要使用亚马逊云科技 Health API 并完成此步骤,必须有 Amazon Support 的商业、企业入门或企业支持计划。

将管理账户的管理权限委托给中央工具账户

在组织内设置一个亚马逊云科技账户作为该解决方案的工具账户。此账户用于集中通知和发现。

在管理账户中,按照本文中描述的步骤委托 Amazon CloudFormation StackSets 的管理:CloudFormation StackSets 委托管理。

通过从管理账户运行以下命令也可以获得相同的结果。012345678901 替换为您的工具账户的亚马逊云科技账户 ID。

aws organizations register-delegated-administrator \ 
--serviceprincipal=member.org.stacksets.cloudformation.amazonaws.com \
--account-id="012345678901"

这是我们唯一需要访问管理账户的时间。其余步骤将在工具账户中完成。

引导亚马逊云科技 CDK

选择一个主要区域,将所有报告和事件合并到中央工具账户中。将 AWS_DEFAULT_REGION 变量设置为该主要区域。

对于发现和报告解决方案,您必须在整个组织中引导该主要区域的亚马逊云科技 CDK。此外,还必须在部署 EKS 集群的所有亚马逊云科技区域启动亚马逊云科技 CDK 以接收终止支持通知。为了简化本演练,我们将演示如何仅将资源部署到您选择的主要区域。

这篇文章中提供了跨多个亚马逊云科技区域和账户引导亚马逊云科技 CDK 的步骤:使用 CloudFormation StackSets 为亚马逊云科技 CDK 引导多个亚马逊云科技账户。

下载亚马逊云科技 CDK 堆栈

我们提供亚马逊云科技 CDK 堆栈供您快速在您的环境中部署解决方案。从我们的 GitHub 存储库下载代码,并在 cdk 目录中运行以下命令来设置环境:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

解决方案演练

以下步骤将引导您完成这些解决方案。

解决方案 1:EKS 集群终止支持通知

我们的第一个解决方案满足了及时了解 EKS 集群生命周期事件的关键需求,尤其是标准支持终止日期的临近。使用亚马逊云科技 Health、EventBridge 和 Amazon SNS(以及可选的 Amazon SQS)使我们能够创建一个集中式系统,该系统具有:

  • 监控多个亚马逊云科技区域和账户的亚马逊云科技运行状况事件
  • 重点关注 Amazon EKS 的特定事件,特别是 AWS_EKS_PLANNED_LIFECYCLE_EVEND 事件
  • 当 EKS 集群距离标准支持结束和延长支持期还有 180 天时,提供早期通知

这种集中式方法可确保 Amazon EKS 用户有足够的时间来计划和执行版本升级,维护其 Kubernetes 环境的安全和稳定,如下图所示。

图 1:解决方案概述-终止支持通知

图 1:解决方案概述 — 终止支持通知

第 1 步:部署 eks-health-events 亚马逊云科技 CDK 堆栈

使用以下命令将 eks-health-events 亚马逊云科技 CDK 堆栈部署到中央工具账户:

cdk deploy eks-health-events --app "python3 tooling_account.py" —require-approval never

这将在中部署亚马逊云科技 CDK 应用程序 tooling_account.py,该应用程序在中央工具账户中预置以下资源:

  • 事件总线
  • 用于监控事件的 SNS 主题和 SQS 队列
  • 将 Amazon EKS 的计划生命周期事件转发给 Amazon SNS 的 EventBridge 规则
  • 将 Amazon EKS 的计划生命周期事件监控转发给 Amazon SQS 的 EventBridge 规则
  • 发布到 Amazon SNS 和 Amazon SQS 的事件规则的资源政策

第 2 步:部署 eks-health-events-stack-set 亚马逊云科技 CDK 堆栈

部署 eks-health-events-stack-set 亚马逊云科技 CDK 堆栈。

cdk deploy eks-health-events-stack-set --app "python stack_sets.py" —require-approval never

这使用 CloudFormation StackSets 将以下资源部署到除管理账户之外的组织中所有账户的选定主要区域:

  • 本地事件总线
  • 将 Amazon EKS 的计划生命周期事件转发到步骤 2 中预置的中央事件总线的 EventBridge 规则
  • 将事件规则发布到中央事件总线的资源策略

第 3 步:配置 SNS 通知

浏览 Amazon SNS 服务,找到名为 eks-health-events-EKSHealthEvents-<primary region> 的主题并进行订阅(例如群组电子邮件地址)。

第 4 步:验证解决方案

您可以检查和验证 EventBridge 规则、SQS 队列和 SNS 主题是否由名为 eks-health-eventseks-health-events-stack-set 的 CloudFormation 堆栈创建。从那时起,由于您的 EKS 集群距离终止支持(标准和扩展)还有 180 天,因此将适用 EventBridge 规则,并触发 Amazon SNS 和/或 Amazon SQS,如下图所示。

图 2:验证 EventBridge 部署

图 2:验证 EventBridge 部署

图 3:验证 SQS 部署

图 3:验证 SQS 部署

图 4:验证 SNS 部署

图 4:验证 SNS 部署

图 5:终止支持通知示例

图 5:终止支持通知示例

解决方案 2:EKS 集群发现和报告

作为对 EKS 集群终止支持通知解决方案的补充,我们的第二个解决方案提供了整个组织中的 EKS 集群的全面视图。这个解决方案:

  • 识别组织内所有亚马逊云科技区域和账户中的 EKS 集群
  • 收集有关每个集群的详细信息,例如账户详细信息、区域、集群名称、版本和关联标签
  • 聚合有关集群版本的数据,提供对版本分布的见解
  • 生成详细报告和摘要报告,集中存储以供直接访问

提供这种组织范围内的可见性使该解决方案能够使团队保持 Amazon EKS 资源的准确清单,促进合规性检查并支持战略升级计划,如下图所示。

图 6:解决方案概述-发现和报告

图 6:解决方案概述 — 发现和报告

第 1 步:部署 eks-discovery 亚马逊云科技 CDK 堆栈

使用以下命令将 eks-discovery-lambda 亚马逊云科技 CDK 堆栈部署到中央工具账户:

cdk deploy eks-discovery-lambda —require-approval never

这将部署 tooling_account.py 中命名的亚马逊云科技 CDK 堆栈 eks-discovery-lambda,该堆栈在中央工具账户中预置以下资源:

  • Lambda 函数用于发现所有亚马逊云科技区域和账户中的 EKS 集群,以及
  • 用于存储结果的 S3 存储桶
  • 通知的 SNS 主题
  • 用于重复执行的 EventBridge 调度器
  • 必要的 IAM 角色和策略

Lambda 函数收集集群详细信息、生成报告并发送通知。

第 2 步:根据需要修改 EventBridge 计划程序

如果您想自定义 EKS 集群发现时间表,请导航到 EventBridge,然后在计划下方找到新创建的集群发现时间表 EKSDiscoveryWeeklySchedule。这是一个基于 cron 的调度程序,如下图所示。

图 7:自定义集群发现的时间表

图 7:自定义集群发现的时间表

要接收来自 Amazon SNS 的通知,您必须订阅该主题。为此,请导航到 Amazon SNS 服务,找到新创建的名为 EKSDiscoverySNSTopic 的主题,然后配置协议以满足您的要求(例如向群组发送电子邮件)。

第 3 步:部署 Lambda 函数可以代入的跨账户角色来执行发现

您在步骤 1 中部署的 Lambda 函数依赖于组织内每个账户中的跨账户角色来执行集群发现。

部署 eks-discovery-stack-set 亚马逊云科技 CDK 堆栈以推出此跨账户角色。

cdk deploy eks-discovery-stack-set --app "python stack_sets.py" --require-approval never

第 4 步:验证解决方案

要验证解决方案,请导航到新创建的 Lambda 函数,并使用新事件和空的 JSON 对象进行测试。Lambda 完成后,验证 S3 存储桶是否收到压缩文件并确认您收到了 SNS 通知,如下图所示。

图 8:S3 存储桶中集群发现的示例输出

图 8:S3 存储桶中集群发现的示例输出

图 9:输出文件的示例内容

图 9:输出文件的示例内容

图 10:集群示例列表

图 10:集群示例列表

图 11:按版本划分的集群样本数

图 11:按版本划分的集群样本数

第 5 步:(可选)监控解决方案

你可能需要监控解决方案。这可以通过设置 Amazon CloudWatch 警报来监控 Lambda 函数的执行和任何潜在错误来实现。此外,定期查看 S3 存储桶中生成的报告,并在需要时定期审查和更新 IAM 权限。

故障排除

  • 确保所有 IAM 角色和策略均已正确设置并具有必要的权限。
  • 查看 CloudWatch 日志,检查 Lambda 函数或 EventBridge 规则中是否有任何错误消息。

安全注意事项

  • 审查和调整 IAM 角色和政策,以遵守最低权限原则和您的环境。
  • 定期审核对集中事件管理系统的访问权限。

清理

运行以下命令以清理已配置的资源:

cdk destroy --app "python stack_sets.py" --all --force
cdk destroy --all --force

第一个命令删除使用名为 stack_sets.py 的亚马逊云科技 CDK 应用程序在整个组织中部署的 CloudFormation StackSet。第二个命令使用名为 tooling_account.py 的亚马逊云科技 CDK 应用程序清理在中央工具账户中预置的资源。

结论

本指南可以帮助您使用亚马逊云科技服务设置一个强大的系统,以主动提供标准支持终止通知。这样可以及时规划升级,降低集群过时带来的风险,同时保持安全性、稳定性和合规性。此外,Amazon EKS 集群发现和报告解决方案标志着在管理亚马逊云科技上复杂的多账户 Kubernetes 环境方面向前迈出了重要一步。该解决方案提高了可见性,简化了合规工作,促进了战略规划,并支持集群升级和资源分配的明智决策。

随着组织继续扩展其容器化应用程序,这些解决方案成为宝贵的资产。它们使团队能够清晰地了解其 Amazon EKS 格局,优化资源使用,并确保在各种部署中采取一致的管理做法。实施这些解决方案使您能够在管理 Amazon EKS 环境的可观测性、弹性和治理方面向前迈出重要一步。反过来,这可以确保您在亚马逊云科技上实施的 Kubernetes 计划的长期成功和可扩展性。

作为最后的号召性用语,我们建议尝试两种解决方案,立即开始增强您的 EKS 集群可观测性!


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。