使用优化型 Amazon Linux AMI 创建节点 - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

使用优化型 Amazon Linux AMI 创建节点

Amazon EKS 优化的 Amazon Linux AMI 基于 Amazon Linux 2(AL2)和 Amazon Linux 2023(AL2023)构建。配置作为 Amazon EKS 节点的基本映像。AMI 配置为与 Amazon EKS 搭配使用,它包含以下组件:

  • kubelet

  • AWS IAM 身份验证器

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

  • containerd

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

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

  • 对于 Kubernetes 版本 1.23,您可以使用可选引导标记测试从 Docker 迁移到 containerd。有关更多信息,请参阅 测试将 Amazon Linux 2 从 Docker 迁移到 containerd

  • 从 Kubernetes 版本 1.25 开始,您将无法再将 Amazon EC2 P2 实例与现成的 Amazon EKS 优化加速 Amazon Linux AMI 结合使用。对于 Kubernetes 版本 1.25 或更高版本,这些 AMI 将支持 NVIDIA 525 系列或更高版本的驱动程序,这些驱动程序与 P2 实例不兼容。但 NVIDIA 525 系列或更高版本的驱动程序与 P3P4P5 实例兼容,因此您可以通过 Kubernetes 版本 1.25 或更高版本的 AMI 使用这些实例。请首先将所有 P2 实例迁移到 P3P4P5 实例,然后再将您的 Amazon EKS 集群升级到版本 1.25。您还应主动升级您的应用程序以支持 NVIDIA 525 系列或更高版本。我们计划在 2024 年 1 月晚些时候将更新的 NVIDIA 525 系列或更新驱动程度反向移植到 Kubernetes 版本 1.231.24

  • 在版本 1.30 或更高版本中新创建的任何托管节点组都将自动默认使用 AL2023 作为节点操作系统。以前,新节点组将默认为 AL2。在创建新节点组时,您可以通过选择 AL2 作为 AMI 类型来继续使用 AL2。

  • 对 AL2 的支持将于 2025 年 6 月 30 日结束。更多有关信息,请参阅 Amazon Linux 2 FAQs

Amazon EKS 优化版加速型 Amazon Linux AMI

注意

基于 AL2023 的 Amazon EKS 加速 AMI 将在以后的某个日期推出。如果您有加速工作负载,则应继续使用 AL2 加速的 AMI 或 Bottlerocket。

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

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

  • NVIDIA 驱动程序

  • nvidia-container-runtime

  • AWS Neuron 驱动程序

有关加速的 AMI 中包含的最新组件的列表,请参阅 GitHub 上的 amazon-eks-ami 版本

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

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

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

启用基于 AWS Neuron(ML 加速器)的工作负载

有关在 Amazon EKS 中使用 Neuron 的训练和推理工作负载的详细信息,请参阅以下参考资料:

启用基于 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/deployments/static/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 的更多信息,请参阅以下部分: