无需专业知识,也能像专业人士一样运行 Kubernetes!隆重推出 EKS 自动模式
AWS re:Invent 大会尚未正式开始,但 EKS 已经推出了一项颠覆性的新功能,让您像专业人士一样运行 Kubernetes!
在本博客中,我们将探讨 EKS 自动模式的全部内容,并说明如何在现有集群上启用 EKS 自动模式,并尝试将我们托管节点组的工作负载迁移到现有集群的 EKS 自动模式,但我们无法做到这一点,请在博客中找出原因!
我还分析了 EKS Auto 的价格与其提供的操作简便性之间的关系,以帮助您做出是否启用它的明智决定。
我创建了一个Terraform 仓库,只需 2 个命令即可快速重现这篇博客,让我们征服 EKS 自动模式吧。
动机
2024 年 12 月 2 日(日本标准时间)——就在 re:Invent 2024 大会召开前夕,AWS 发布了一项激动人心的更新,推出了 EKS 自动模式。
这次更新对您意味着什么?
-
它可自动管理您的 EKS 集群,从而使 AWS 也能设置和管理基础设施,以确保您的工作负载顺利运行。
-
由 AWS 管理的集群基础设施包含许多 Kubernetes 功能作为核心组件,而非附加组件,例如计算自动扩展、Pod 和服务网络、应用程序负载均衡、集群 DNS、块存储和 GPU 支持。
-
您可以部署新的 EKS 自动模式集群,也可以在现有集群上启用 EKS 自动模式。
注意: Terraform 的支持(仍在开发中)尚未实现,因此本博客将使用 AWS 控制台。
本次更新的成本考量
-
您将继续支付以下两个部分的费用:
- Amazon EKS 集群定价: *每集群每小时 0.10 美元 *(扩展服务每集群 0.60 美元)
- 但是,如果您使用自动模式,则需要额外付费!!!
Amazon EKS 自动模式的费用取决于 EKS 自动模式启动和管理的 Amazon EC2 实例的持续时间和类型。以下列出的 Amazon EKS 自动模式价格不包含 Amazon EC2 实例本身的费用。
简单来说,EKS 自动模式除了收取常规 EC2 实例费用外,还会根据启动的 EC2 实例类型收取不同的管理费。
它究竟自动化了什么?
EKS 自动模式旨在实现数据平面组件的自动化,以下列出了正在实现自动化的组件及其功能:
EKS 自动模式下的自动化数据平面组件
-
计算管理:自动执行集群计算的关键方面,包括节点配置、扩展、升级和负载均衡,从而实现轻松的 Kubernetes 操作。
- 节点:
- 自动选择具备基本服务的优化型 AMI。
- 使用 SELinux、只读 root 文件和禁止 SSH/SSM 访问来保护节点。
- 支持NVIDIA和Neuron GPU。
- 自动缩放:
- 使用 Karpenter 来监控和部署无法调度的 Pod 的新节点。
- 动态终止未使用的节点以优化资源。
- 节点:
-
升级:
- 在最大限度减少工作负载中断的情况下,应用操作系统和组件更新。
- 为了安全性和稳定性,强制执行 21 天的最大节点生命周期。
-
负载均衡:
- 与弹性负载均衡(ALB 和 NLB)集成,实现自动配置和扩展。
- 提供符合 AWS 最佳实践的生产就绪型负载均衡。
-
存储自动化
- 配置临时存储,自动管理卷设置、加密和删除策略,以实现最佳使用效果。
-
网络自动化
- 管理 Pod 和服务连接,支持 IPv4/IPv6,并使用辅助 CIDR 块扩展 IP 空间。
在现有集群上启用自动模式
-
在本篇博客中,我们将介绍如何在现有集群上启用EKS 自动模式,因为 AWS 博客已经介绍了如何在新集群上启用该模式。
-
为了模拟现有集群,您可以使用我的仓库中的 Terraform 部署带有 EKS 管理节点组的 EKS 集群。
支持的迁移
-
撰写此博客时,EKS 支持从Karpenter 迁移到 EKS 自动模式、从 EKS 管理节点组迁移到 EKS 自动模式以及从 EKS Fargate 迁移到 EKS 自动模式节点。
-
为了保持这篇博客的简洁性,我将展示如何从 EKS 管理的节点组迁移到 EKS 自动模式(希望如此 :))
注意:还要记得查看如何配置基于 Kubernetes 的资源,使其由自管理控制器或 EKS 自动模式拥有。
先决条件
- 更新 IAM 权限并配置核心 EKS 自动模式设置
- 某些 Amazon EKS 插件透视图的最低版本要求。
更新 IAM 权限并配置核心 EKS 自动模式设置
- EKS 集群的集群 IAM 角色在集群创建后无法更改。EKS 自动模式需要此角色拥有额外的权限。您必须将其他策略附加到当前角色。
-
导航至集群 IAM 角色并添加以下策略
- AmazonEKS 计算策略
- AmazonEKSBlockStoragePolicy
- AmazonEKS负载均衡策略
- AmazonEKS网络策略
- AmazonEKSClusterPolicy(对我来说已经存在)
- 编辑信任策略并添加
sts:TagSession允许的操作。
某些 Amazon EKS 插件的最低版本要求
看法。
- 我已经设置了 Terraform 代码来获取插件的最新版本,所以您无需做任何事情。
创建 Karpenter 节点池
- EKS auto 在后台使用 Karpenter 进行缩放。
Karpenter 是一款节点配置工具,可帮助优化集群扩展和资源利用率。借助 Karpenter 的 NodePool 资源,您可以定义计算资源的具体要求,包括实例类型、可用区、架构和容量类型。
-
选择“为节点 IAM 角色创建推荐角色”
-
我使用的是预配置的节点池,但您也可以像这个示例一样,使用自己的 YAML 文件进行配置。
- 选择默认权限并创建角色
- 角色创建完成后,点击“下一步”,即可看到自动模式已启用的通知。
Overview启用后,您可以使用控制台中的 Tab 键确认自动模式选项。
- 在启用步骤中,EKS 也创建了节点池。
禁用 EKS 自动模式
您可以禁用现有 EKS 集群上的 EKS 自动模式。此操作会破坏现有数据。
-
EKS 将终止所有由 EKS 自动模式运行的 EC2 实例。
-
EKS 将删除所有由 EKS 自动模式运行的负载均衡器。
从 EKS 管理节点组迁移到 EKS 自动模式
当您将 Amazon EKS 集群过渡到使用 EKS 自动模式时,可以使用 eksctl CLI 工具将现有工作负载从托管节点组平滑迁移。
此过程可确保应用程序持续可用,同时 EKS 自动模式可优化您的计算资源。迁移过程对正在运行的应用程序的影响极小。
先决条件
-
已启用 EKS 自动模式的集群
-
eksctl CLI 已安装并连接到您的集群。有关更多信息,请参阅“设置使用 Amazon EKS”。
-
集群上未安装 Karpenter。
Pod 的当前状态
- 2 个 Pod 在托管节点组上运行。
jatin.mehrotra@CK0662-001 eks-auto-mode % kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-65b7dbddd4-jdxhw 1/1 Running 0 2m29s 10.0.2.52 ip-10-0-2-85.ec2.internal <none> <none>
test-65b7dbddd4-lzd4r 1/1 Running 0 2m29s 10.0.1.118 ip-10-0-1-128.ec2.internal <none> <none>
- 根据文档,使用以下 eksctl CLI 命令可以从现有的托管节点组实例中移除 Pod。EKS 自动模式将创建新节点来支持被移除的 Pod。
eksctl update auto-mode-config --cluster eks-auto-test --drain-nodegroup --region us-east-1 --profile ck-test
- 我原以为是我的 eksctl 版本问题,但看来我的 eksctl 版本目前还没有针对这个标志进行更新。官方 eksctl 仓库也存在类似的问题。
- 我的 eksctl 版本输出(这是最新版本)
eksctl info
eksctl version: 0.194.0
- 我的集群上其他 eksctl 命令都在运行,所以肯定不是连接问题。
jatin.mehrotra@CK0662-001 eks-auto-mode % eksctl get addons --cluster eks-auto-test --region us-east-1 --profile ck-test
2024-12-02 12:29:41 [ℹ] Kubernetes version "1.30" in use by cluster "eks-auto-test"
2024-12-02 12:29:41 [ℹ] getting all addons
2024-12-02 12:29:44 [ℹ] to see issues for an addon run `eksctl get addon --name <addon-name> --cluster <cluster-name>`
NAME VERSION STATUS ISSUES IAMROLE UPDATE AVAILABLE CONFIGURATION VALUES POD IDENTITY ASSOCIATION ROLES
amazon-cloudwatch-observability v2.5.0-eksbuild.1 ACTIVE 0
aws-ebs-csi-driver v1.37.0-eksbuild.1 ACTIVE 0
coredns v1.11.1-eksbuild.8 ACTIVE 0 v1.11.3-eksbuild.2,v1.11.3-eksbuild.1,v1.11.1-eksbuild.13,v1.11.1-eksbuild.11,v1.11.1-eksbuild.9
kube-proxy v1.30.6-eksbuild.3 ACTIVE 0
vpc-cni v1.19.0-eksbuild.1 ACTIVE 0
更新:12月3日凌晨12:20(日本标准时间)
- 尽管 AWS 团队已经发布了新版本的 eksctl,但问题仍然存在,而且文档也不正确。
它还需要--drain-all-nodegroups集群配置文件,但对于通过控制台或 Terraform 创建的现有集群来说,生成该文件非常困难。
eksctl update auto-mode-config --drain-all-nodegroups -f eks-config.yaml --profile ck-test
我们需要等待更多时间,以便 AWS 修复此漏洞。目前已针对此漏洞提交了新的 issue。
调查 EKS 自动模式集群的 Kubernetes 版本更新问题
-
Amazon EKS 自动模式的计算能力控制着节点的 Kubernetes 版本。升级控制平面后,EKS 自动模式将开始逐步更新受管节点。EKS 自动模式会遵守 Pod 中断预算。
-
您无需手动升级 Amazon EKS 自动模式的功能,包括计算自动扩展、块存储和负载均衡功能。
-
自动模式通过协调控制平面更新和节点替换来简化版本更新过程,同时通过 pod 中断预算来维持工作负载的可用性。
-
升级自动模式集群时,许多传统上需要手动更新的组件现在都作为服务的一部分进行管理。
-
启动控制平面升级后,EKS 自动模式将开始替换集群中的节点。新节点将具有相应的新 Kubernetes 版本。EKS 自动模式在升级节点时会监控 Pod 中断预算。
- CoreDNS
- KubeProxy
- AWS负载均衡控制器
- 卡彭特
- AWS EBS CSI 驱动程序
-
但是,您仍然有责任进行更新:
- 部署到集群的应用和工作负载
- 自管理插件和控制器
- Amazon EKS 插件
从解决方案架构师的角度来看
- 在这篇博客中,我们看到了 EKS 自动模式如何通过将基础设施管理卸载到 AWS 来简化 Kubernetes 操作。
- 它会自动选择最佳的 EC2 实例,优化计算成本,并根据需求动态扩展资源。
- 该功能增强了安全性、性能和可用性,同时减少了对深厚专业知识、容量规划和手动管理的需求。
- 但正如我们在博客中看到的,它仍然是一个新功能,可能需要更新和修复漏洞。
- 没错,它的确简化了操作,让用户能够以专业的方式安全地运行 Kubernetes,但你必须为此付出代价。
起初我认为这会增加成本,但持续使用后,其带来的便利性将抵消额外的成本。
请在下方评论区留下您的想法,或者在领英上联系我,X! 🚀
文章来源:https://dev.to/aws-builders/run-kubernetes-like-a-pro-without-the-expertise-introducing-eks-auto-mode-5edf
















