亚马逊 EKS 现在支持 Kubernetes 版本 1.27

简介

亚马逊弹性 Kubernetes 服务( 亚马逊 EKS )团队很高兴地宣布支持亚马逊 EKS 和亚马逊 EKS 发行版的 Kubernetes 1.27 版。 亚马逊 EKS Anywher e (版本 0.16.0)也支持 Kubernetes 1.27。选择这个版本的主题是为了认识到发行版非常冷静的事实。因此,恰当的版本名称是 Chill Vibes。Kubernetes 发布团队在 官方发布公告 中表示,该版本是 “第一个任何人都记得的版本,增强功能冻结后我们没有收到任何异常请求。”

Kubernetes 1.27 亮点

这篇文章重点介绍了 Kubernetes 版本 1.27 中最重要的移除、弃用和功能,这些内容可能会影响您的集群和工作负载。首先,请务必注意,v1.27 中已弃用了多个功能和版本,包括 k8s.gcr.io 映像注册表冻结。这意味着您可能需要更新工作流程和配置以避免任何潜在问题。最后,还有一个我们都很兴奋的 kubelet 增强功能,它允许你轻松保护在给定节点上运行的容器工作负载。 要查看 Kubernetes 版本 1.27 中变更和更新的完整列表,请查看 Kubernetes 变更日志。

在 v1.27 中,有一些有趣的功能正式上线 (GA)。以下是一些让我们的技术社区对 v1.27 版本感到兴奋的增强功能。有关完整列表,请参阅 Kubernetes v1. 27 中的所有 功能分级和弃用说明。

seccompDefault 已进入

  • #2413 。SecCompDefault 已升级为稳定状态,默认情况下功能门处于启用状态。此功能门户可帮助您增强工作负载的安全状态,而无需大量的自定义 seccomp 配置文件。默认的 seccomp 配置文件旨在在安全性和应用程序兼容性之间取得平衡。毕业后,RuntimeDefault seccomp 配置文件将用作所有工作负载的默认配置文件。要为节点上运行的所有容器设置默认 seccomp 配置文件,请在引导脚本或启动模板中传递 —kubelet-extra-args “—seccomp-default” 标志。默认情况下,这会将 runtimeDefault seccomp 配置文件设置为所有工作负载的默认配置,该配置文件由容器运行时定义,而不是使用不受限制(禁用 seccomp)模式。通过使用此功能,您可以增加一层额外的保护,以防范恶意行为者利用的常见系统调用漏洞。
  • 默认启用 seccomp 时,当前在没有 seccomp 的情况下运行的某些工作负载可能会出现中断。为了确保兼容性并防止潜在问题,我们强烈建议在默认启用 seccomp 之前,在暂存或测试环境中测试您的工作负载。如果出现任何兼容性问题,你可以选择禁用 seccomp 或为这些特定工作负载创建自定义配置文件。尽管默认配置文件可能不像某些自定义配置文件那样严格,但它在不影响应用程序互操作性的情况下提供了基本的安全级别。 此外,如果您需要对seccomp配置文件进行更精细的控制,并希望为工作负载创建和实现自定义配置文件,则可以探索安全配置文件操作员。 此运算符允许您在集群中定义和管理自定义 seccomp 配置文件。
  • 要了解有关在集群中使用 kubelet 参数的更多信息,请参阅使用启动 模板自定义托管节点

更精细的 Pod 拓扑分布策略已进入测试阶段

  • 在 v1.27 之前的 Kubernetes 早期版本中,实现分布在各个域(例如 kubernetes.io/hostname)上的均衡 pod 是一项艰巨的任务。为了应对这些障碍,Kubernetes v1.27 推出了一套高级的 pod 拓扑分布策略。KEP ( #3022 , #3094 , #3243 ) 中描述的这些功能在默认情况下处于启用状态时立即可用。它们共同提供了一个强大的工具集,可增强均匀分配工作负载的能力,增强弹性并简化滚动升级的执行。
  • #3022 引领潮流, 推出了 minDomains 参数,使您能够确定您的 pod 应占用的最小域数量,从而确保工作负载在集群中的均衡分布。第二行是, #3094 引入了 nodeaffinityPolicy 和 nodestentPolicy 参数,这两个参数允许根据节点亲和度和污点进一步细化管理 pod 的分布。这项特殊功能与 NodeInclusionPolicyInpodtopologySpread 门相关联,为了提高利用率,该门现在默认处于启用状态。最后, #3243 在你的容器规格的 topologySpreadConstraints 中 实现了 matchLabelKeys 字段,该字段允许在滚动升级后选择容器进行分散计算。
  • 要了解更多信息,请参阅 Kubernetes 1.27:更精细的 pod 拓 扑分布策略已进入测试版。

提高了 kubelet 的默认 API 每秒查询次数限制

  • 在 v1.27 之前的版本中,亚马逊 EKS kubelet 对 KubeapiQps 的默认值为每秒 10 个请求,KubeapiBurst 的突发请求限制为 20 个,这决定了 kubelet 处理传入请求的速率。 在 #1040 中 , 亚马逊 EKS 优化的 AMI 对 KubeaPiqps 采用 了新的默认值,即每秒 50 次请求,对 KubeapiBurst 采用了 100 次请求的突发上限。这些变化提高了突然出现额外资源需求时 Pod 在新节点上开始运行的速度。
  • 通过增加 kubelet 的默认值,这些增强允许 kubelet 每秒处理更多的 API 查询,从而提高响应能力和性能。当由于扩展要求而突然出现对 Pod 的需求时,修改后的默认值可确保 kubelet 能够有效地管理增加的工作负载,从而更快 Pod 的启动速度和更流畅的集群操作。 亚马逊 EKS 优化的 AMI 中 kubelet 默认值的这些 调整与优化 Kubernetes 性能和改善客户体验的持续努力相吻合。

移除了 API 版本和功能

如今,当发布新版本的 Kubernetes 时,Kubernetes 应用程序编程接口 (API) 版本和功能被弃用或删除的情况并不少见。发生这种情况时,在 升级到版本 1. 27 之前,必须将所有清单和控制器更新到本节中列出的较新版本 和功能。以下是 v1.27 版本中的热门标注。有关完整列表,请参阅 Kubernetes v 1.27 中的所有弃用和删除内容。

k8s.gcr.io 镜像注册表已冻结

从 Kubernetes v1.27 开始,Kubernetes 项目冻结了 k8s.gcr.io 注册表。 这意味着来自 v1.27 的新 Kubernetes 镜像和旧版本的补丁将不会发布到 k8s.gcr.io 注册表中。 相反,你必须开始使用 regist ry.k8s.io 来获取最新的 K ubernetes 镜像,它现在是 Kubernetes 镜像的唯一来源。如果您尚未将清单和配置更新到新的注册表,请观看我们的 亚马逊云科技 开发者倡导者之一贾斯汀·加里森的 YouTube 简短 视频。

移除 alpha seccomp 注释

seccomp.s ecurity.alpha.kubernetes.io/pod 和 container.secomp.security.alpha.kubernetes.io 注释 已被删除。 安全计算模式(即 “seccomp”)通过限制 Pod 或单个容器的系统调用来提高工作负载安全性。自 v1.19 起,alpha seccomp 注释已被弃用,随着 v1.27 版本中这些注释被删除,将不再为带有 seccomp 注释的 Pod 自动填充 seccomp 字段。相反,你应该使用 Pod 或容器的 s ecurityContext.seccompProfile 字段来配置 seccomp 配置文件 。要检查你是否在集群中使用了过时的 alpha seccomp 注解,请运行以下命令:

kubectl get pods --all-namespaces -o json | grep -E 'seccomp.security.alpha.kubernetes.io/pod|container.seccomp.security.alpha.kubernetes.io'

删除 --container-runtime 命令 行参数

kubel et 的--container-runtim e 命令行参数已被删除。 v1.24 起,Amazon EKS 的 默认容器 运行时一直处于容器状态 ,因此无需指定容器运行时间。请务必不要将此参数传递给 “ --kubelet-extra-args ”,以防止在节点引导过程中出现错误。您 必须 从所有节点创建工作流程和 构建脚本中 删除--container- runtim e 参数。 这包括您的引导脚本、基础设施即代码 (iaC) 模板,例如用于 eksctl 和 T erraform 的模板,以及任何自定义 AMI 构建脚本 ,例如针对亚马逊 EKS 优化 Amazon Linux AMI 构建脚本的脚本。 让我们考虑以下 eksctl 和 Terraform 的示例。

eksctl

必须 从 kubeletExtraConfig 字段中 移除 容器运行时

nodeGroups:
  - name: your-nodegroup-name
    instanceType: m5.large
    desiredCapacity: 3
    minSize: 1
    maxSize: 4
    kubeletExtraConfig:
      container-runtime: "your-runtime"

Terraform

必须 bootstrap _extra_args 字段中 删除 容器运行时

  node_groups = {
    eks_nodes = {
      desired_capacity = 2
      max_capacity     = 10
      min_capacity     = 1

      instance_type = "m5.large"
      k8s_labels = {
        Environment = "test"
        Name        = "eks-worker-node"
      }

      additional_userdata = "echo foo bar"
      bootstrap_extra_args = "--container-runtime=your-runtime"
    }

结论

在这篇文章中,我们介绍了 Kubernetes 版本 v1.27 中的显著变化,并重点介绍了一些最令人兴奋的可用功能。请务必查看 Kubernetes v 1.27 发行说明中记录的其他改进。 如果您在将集群升级到最新的 Amazon EKS 版本时需要帮助,请参阅 此处 的文档 。

亚马逊 EKS 在任何给定时间都支持至少四个 Kubernetes 版本。鉴于 Kubernetes 发布周期的性质,所有客户都有持续的升级计划至关重要。 如果你仍在运行 Kubernetes 的旧版本,例如 1.22 和 1.23,请考虑升级到支持的新版本之一。 对1.22集群的支持将于2023年6月4日结束,对1.23集群的支持将于2023年10月结束。如果您对亚马逊 EKS 版本支持还有其他疑问,请参阅我们的 常见问题解答

Sheetal Joshi

Sheetal Joshi

Sheetal Joshi 是亚马逊 EKS 团队的首席开发者倡导者。在加入 亚马逊云科技 之前,Sheetal 曾在多家软件供应商工作,包括惠普、迈克菲、思科、Riverbed 和 Moogsoft。大约 20 年来,她一直专注于构建企业级分布式软件系统、虚拟化技术和云架构。目前,她正在努力简化在云端、本地和边缘部署 Kubernetes 集群的入门、采用和运行。

Leah Tucker

Leah Tucker

Leah 是 亚马逊云科技 的资深开源软件作家。她在网络开发、软件集成、产品管理和技术写作方面拥有多年的经验。在对解决复杂难题的无限好奇心驱使下,她找到了解开 Kubernetes 错综复杂之处的最新挑战。在目前的职位上,Leah 将大部分时间用于弥合 亚马逊云科技 和开源 Kubernetes 集成之间的鸿沟。


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