Amazon EKS 优化版 Amazon Linux AMI - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon EKS 优化版 Amazon Linux AMI

Amazon EKS 优化版 Amazon Linux AMI 构建于 Amazon Linux 2 之上,并配置为用作 Amazon EKS 节点的基本镜像。AMI 配置为与 Amazon EKS 搭配使用,它包含以下组件:

  • kubelet

  • Amazon IAM 身份验证器

  • Docker(Amazon EKS 版本 1.23 及更早版本)

  • containerd

注意
  • 您可以在 Amazon Linux 安全中心跟踪 Amazon Linux 2 的安全和隐私事件,或订阅关联的 RSS 源。安全和隐私事件包括问题的概述、受影响的程序包以及如何更新实例以解决问题。

  • 在部署加速版或 Arm AMI 之前,请先查看 Amazon EKS 优化版加速型 Amazon Linux AMIAmazon EKS 优化版 Arm Amazon Linux AMI 中的信息。

  • 您可以使用可选的引导标志,为 Amazon EKS 优化版 Amazon Linux 2 AMI 启用 containerd 运行时系统。在更新到版本 1.24 或更高版本时,该功能提供迁移到 containerd 的清晰路径。Amazon EKS 将从 Kubernetes 版本 1.24 发布起,结束对 Docker 的支持。已在 Kubernetes 社群中广泛采用 containerd 运行时,是 CNCF 的一个分级项目。您可以通过将节点组添加到新集群或现有集群来对其进行测试。有关更多信息,请参阅启用 containerd 运行时间引导标记

  • 从 Kubernetes 版本 1.28 起,您不再能够通过 Amazon EKS 优化加速型 Amazon Linux AMI,以开箱即用的方式使用 Amazon EC2 P2 实例。对于 Kubernetes 版本 1.28 或更高版本,这些 AMI 将支持 NVIDIA 525 系列或更高版本的驱动程序,后这些驱动程序与 P2 实例不兼容。但 NVIDIA 525 系列或更高版本的驱动程序与 P3、P4 和 P5 实例兼容,因此您可以通过 Kubernetes 版本 1.28 或更高版本的 AMI 使用这些实例。请首先将所有 P2 实例迁移到 P3、P4 和 P5 实例,然后再将您的 Amazon EKS 集群升级到版本 1.28。您还应主动升级您的应用程序以支持 NVIDIA 525 系列或更高版本。

启用 containerd 运行时间引导标记

Amazon EKS 优化版 Amazon Linux 2 AMI 包含可选的引导标记,用于启用 containerd 运行时间。该功能提供了迁移到 containerd 的清晰路径。Amazon EKS 将从 Kubernetes 版本 1.24 发布起,结束对 Docker 的支持。有关更多信息,请参阅Amazon EKS 结束了对 Dockershim 的支持

您可以通过创建以下类型的节点组之一来启用引导标记。

自行管理

按照 启动自行管理的 Amazon Linux 节点 中的说明创建节点组。为 BootstrapArguments 参数指定 Amazon EKS 优化版 AMI 和以下文本。

--container-runtime containerd
托管式

如果使用 eksctl,请创建一个名为 my-nodegroup.yaml 的文件,其中包含以下内容。请将每个 example value 替换为您自己的值。节点组名称的长度不能超过 63 个字符。它必须以字母或数字开头,但也可以包括其余字符的连字符和下划线。要检索 ami-1234567890abcdef0 的优化版 AMI ID,请参阅 检索 Amazon EKS 优化版 Amazon Linux AMI ID

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: 1.23 managedNodeGroups: - name: my-nodegroup ami: ami-1234567890abcdef0 overrideBootstrapCommand: | #!/bin/bash /etc/eks/bootstrap.sh my-cluster --container-runtime containerd
注意

如果同时启动多个节点,您还可以为 --apiserver-endpoint--b64-cluster-ca--dns-cluster-ip 引导参数指定值以避免错误。有关更多信息,请参阅指定 AMI

运行以下命令以创建节点组。

eksctl create nodegroup -f my-nodegroup.yaml

如果您希望使用其他工具来创建托管节点组,则必须使用启动模板部署节点组。在启动模板中,指定 Amazon EKS 优化版 AMI ID,然后使用启动模板部署节点组,并提供以下用户数据。此用户数据会将实际参数传递到 bootstrap.sh 文件中。有关引导文件的更多信息,请参阅 GitHub 上的 bootstrap.sh

/etc/eks/bootstrap.sh my-cluster --container-runtime containerd

Amazon EKS 优化版加速型 Amazon Linux AMI

Amazon EKS 优化加速的 Amazon Linux AMI 建立在标准的 Amazon EKS 优化的 Amazon Linux AMI 之上。配置作为 Amazon EKS 节点的可选映像,以支持 GPU 和基于 Inferentia 的工作负载。

除标准 Amazon EKS 优化版 AMI 配置外,加速 AMI 还包含:

  • NVIDIA 驱动程序

  • nvidia-container-runtime(作为默认运行时)

  • Amazon Neuron 容器运行时

注意
  • Amazon EKS 优化版加速型 AMI 仅支持基于 GPU 和 Inferentia 的实例类型。务必在节点 Amazon CloudFormation 模板中指定这些实例类型。使用 Amazon EKS 优化版加速型 AMI,即表明您同意 NVIDIA 的最终用户许可协议 (EULA)

  • Amazon EKS 优化版加速型 AMI 以前称为带 GPU 支持的 Amazon EKS 优化版 AMI

  • 以前版本的 Amazon EKS 优化加速 AMI 安装 nvidia-docker 存储库。Amazon EKS AMI 版本 v20200529 及更高版本中不再包含此存储库。

启用基于 GPU 的工作负载的步骤

以下步骤介绍如何使用 Amazon EKS 优化版加速型 AMI 在基于 GPU 的实例上运行工作负载。有关其他选项,请参阅以下参考资料:

  1. 当 GPU 节点加入集群后,您必须在您的集群上应用 适用于 Kubernetes 的 NVIDIA 设备插件,以作为 DaemonSet 使用。将 vX.X.X 替换为您需要的 NVIDIA/k8s-device-plugin 版本,然后运行以下命令。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/nvidia-device-plugin.yml
  2. 您可以使用以下命令验证节点是否具有可分配 GPU。

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
部署 Pod 以测试是否已正确配置 GPU 节点的步骤
  1. 使用以下内容创建名为 nvidia-smi.yaml 的文件。将 tag 替换为您需要的 nvidia/cuda 标签。此清单会启动一个 NVIDIA CUDA 容器,该容器将在一个节点上运行 nvidia-smi

    apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: restartPolicy: OnFailure containers: - name: nvidia-smi image: nvidia/cuda:tag args: - "nvidia-smi" resources: limits: nvidia.com/gpu: 1
  2. 使用下面的命令应用清单。

    kubectl apply -f nvidia-smi.yaml
  3. Pod 运行完成后,使用下面的命令查看其日志。

    kubectl logs nvidia-smi

    示例输出如下。

    Mon Aug 6 20:23:31 20XX +-----------------------------------------------------------------------------+ | NVIDIA-SMI XXX.XX Driver Version: XXX.XX | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:00:1C.0 Off | 0 | | N/A 46C P0 47W / 300W | 0MiB / 16160MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+

Amazon EKS 优化版 Arm Amazon Linux AMI

Arm 实例可以为横向扩展和基于 Arm 的应用程序(例如 Web 服务器、容器化微服务、缓存队列以及分布式数据存储)节省大量成本。当将 Arm 节点添加到集群时,请查看以下注意事项。

注意事项
  • 如果您的集群是在 2020 年 8 月 17 日之前部署的,则必须对关键集群附加组件清单进行一次性升级。这样,Kubernetes 可以为集群中使用的每个硬件架构提取正确映像。有关更新集群附加组件的更多信息,请参阅 更新 Amazon EKS 集群的 Kubernetes 版本。如果您在 2020 年 8 月 17 日或之后部署了集群,则您的 CoreDNS、kube-proxy 和 Amazon VPC CNI plugin for Kubernetes 附加组件已经具备多架构功能。

  • 部署到 Arm 节点的应用程序必须针对 Arm 进行编译。

  • 如果您在现有集群中部署了 DaemonSets,或者希望将它们部署到同时要在其中部署 Arm 节点的新集群中,请验证您的 DaemonSet 是否可以在集群中的所有硬件架构上运行。

  • 您可以在同一集群中运行 Arm 节点组和 x86 节点组。如果您这样操作,请考虑将多架构容器镜像部署到容器存储库(如 Amazon Elastic Container Registry),然后将节点选择器添加到清单中,以便 Kubernetes 知道可将 Pod 部署到哪个硬件架构上。有关更多信息,请参阅 Amazon ECR 用户指南中的推送多架构映像Amazon ECR 的多架构容器映像简介博客文章。

更多信息

有关使用 Amazon EKS 优化版 Amazon Linux AMI 的更多信息,请参阅以下部分: