Amazon EKS 最佳化的 Amazon Linux AMI - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EKS 最佳化的 Amazon Linux AMI

Amazon EKS 優化的 Amazon Linux AMI 建立在 Amazon Linux 2(AL2)和 Amazon Linux 2023(AL2023)之上。此種 AMI 已設定為 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。如需詳細資訊,請參閱 測試從移轉Docker到 containerd

  • 從 Kubernetes 版本 1.25 開始,您將無法再使用開箱即用的 Amazon EC2 P2 執行個體搭配 Amazon EKS 最佳化加速 Amazon Linux AMI 一起使用。這些適用於 Kubernetes 版本 1.25 或更高版本的 AMI 將支援 NVIDIA 525 系列或更新版本驅動程式,這些與 P2 執行個體不相容。但是,NVIDIA 525 系列或更新版本的驅動程式與 P3 P4P5 執行個體相容,因此您可以在 Kubernetes 版本 1.25 或更新版本將這些執行個體搭配 AMI 一起使用。在 Amazon EKS 叢集升級至版本 1.25 之前,請將任何 P2 執行個體移轉至 P3 P4P5 執行個體。您也應該主動升級您的應用程式以適用於 NVIDIA 525 系列或更新版本。我們計劃將更新的NVIDIA 525系列或更高Kubernetes版本1.23的驅動程序移植到 2024 年 1 月下旬。1.24

  • 在版本1.30或更新版本的叢集中,任何新建立的受管理節點群組都會自動預設使用 AL2023 做為節點作業系統。先前,新節點群組預設為 AL2。建立新節點群組時,您可以選擇 AL2 作為 AMI 類型,繼續使用 AL2。

  • 對 AL2 的 Support 將於二零二五年六月三十日結束。如需詳細資訊,請參閱 Amazon Linux 2 常見問答集

從 AL2 升級到 AL2023

Amazon EKS 優化 AMI 在以 AL2 和 AL2023 為基礎的兩個系列中提供。AL2023 是以 Linux 為基礎的全新作業系統,旨在為您的雲端應用程式提供安全、穩定且高效能的環境。它是 Amazon 網絡服務的下一代 Amazon Linux,可1.24在所有受支持的亞馬遜 EKS 版本中使用,包括版本1.23和擴展支持。基於 AL2023 的 Amazon EKS 加速 AMI 將在以後提供。如果您已經加速了工作負載,則應繼續使用 AL2 加速 AMI 或保加速器。

AL2023 比 AL2 提供了一些改進。有關完整比較,請參閱 Amazon 2023 用戶指南中的比較 AL2 和 Amazon Linux 2023。已從 AL2 新增、升級和移除數個套件。強烈建議您在升級前先使用 AL2023 測試您的應用程式。如需 AL2023 中所有 Package 變更的清單,請參閱 Amazon 2023 版本說明中的套件變更。

除了這些變更之外,您還應注意下列事項:

  • AL2023 引入了使用 YAML 組態結構描述nodeadm的新節點初始化程序。如果您使用自我管理的節點群組或 AMI 搭配啟動範本,您現在需要在建立新節點群組時明確提供額外的叢集中繼資料。最小必要參數的範例如下,其中apiServerEndpointcertificateAuthority、和服務現cidr在需要:

    --- apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: name: my-cluster apiServerEndpoint: https://example.com certificateAuthority: Y2VydGlmaWNhdGVBdXRob3JpdHk= cidr: 10.100.0.0/16

    在 AL2 中,這些參數的中繼資料是從 Amazon EKS DescribeCluster API 呼叫中探索到的。使用 AL2023 時,自大型節點擴展期間額外 API 呼叫風險限制以來,此行為已發生變更。如果您使用的是沒有啟動範本的受管節點群組,或您正在使用,則此變更不會影響您Karpenter。如需有關certificateAuthority和服務的詳細資訊cidr,請參閱 Amazon EKS API 參考DescribeCluster中的。

  • DockerAL2023 不支援所有受支援的 Amazon EKS 版本。在 AL2 中Docker,Amazon EKS 版本1.24或更高版本的 Support 已結束,並已移除。如需淘汰的詳細資訊,請參閱 Amazon EKS 已結束的. Dockershim

  • AL2023 需要 Amazon VPC CNI 版本1.16.2或更高版本。

  • AL2023 默認情況IMDSv2下需要使用。 IMDSv2有幾個有助於改善安全狀態的好處。它使用面向會話的身份驗證方法,該方法需要在簡單的 HTTP PUT 請求中創建秘密令牌才能啟動會話。會話的令牌可以在 1 秒到 6 小時之間的任何地方有效。如需如何從IMDSv1轉換為的詳細資訊IMDSv2,請參閱轉換為使用執行個體中繼資料服務版本 2取得 IMDSv2 的完整優點,以及在您的基礎結構中停用 IMDSv1。 AWS 如果您想要使用IMDSv1,您仍然可以使用執行個體中繼資料選項啟動屬性來手動覆寫設定。

    注意

    對於IMDSv2,受管理節點群組的預設躍點計數設定為 1。這表示容器將無法使用 IMDS 存取節點的認證。如果您需要容器存取節點的登入資料,您仍然可以透過手動覆寫自訂 Amazon EC2 啟動範本HttpPutResponseHopLimit中的,將範本增加到 2。 或者,您也可以使用 Amazon EKS Pod 身分來提供登入資料,而非使用。IMDSv2

  • AL2023 具有下一代統一控制群組階層 (cgroupv2)。 cgroupv2用於實現容器運行時,並通過systemd. 雖然 AL2023 仍然包含可以使系統運行使用的代碼cgroupv1,但這不是建議或支持的配置。此組態將在 future 的主要發行版本中完全移除。

  • eksctl需要版本0.176.0或更高版本eksctl才能支援 AL2023。

對於先前現有的受管理節點群組,您可以執行就地升級或藍/綠升級,視您使用啟動範本的方式而定:

  • 如果您將自訂 AMI 與受管節點群組搭配使用,則可以透過交換啟動範本中的 AMI ID 來執行就地升級。在執行此升級策略之前,應確保您的應用程式和任何使用者資料先傳輸到 AL2023。

  • 如果您要搭配標準啟動範本或未指定 AMI ID 的自訂啟動範本使用受管節點群組,則必須使用藍/綠策略進行升級。藍/綠升級通常比較複雜,而且需要建立一個全新的節點群組,您可以在其中指定 AL2023 作為 AMI 類型。然後必須仔細設定新節點群組,以確保 AL2 節點群組中的所有自訂資料都與新作業系統相容。在您的應用程式中測試並驗證新節點群組之後,就Pods可以從舊節點群組移轉到新節點群組。移轉完成後,您可以刪除舊的節點群組。

如果您正在使用Karpenter並希望使用 AL2023,則需要使用 AL2023 修改該EC2NodeClassamiFamily字段。依預設,在中啟用「漂移」Karpenter。這表示一旦amiFamily欄位變更,Karpenter會在可用時自動將您的 Worker 節點更新為最新的 AMI。

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、推論和基於工作負載的工作負載。

除了採用標準 Amazon EKS 最佳化 AMI 組態,加速 AMI 另包括下列項目:

  • NVIDIA 驅動程式

  • nvidia-container-runtime

  • AWS Neuron驅動

如需加速 AMI 中包含的最新元件清單,請參閱上的amazon-eks-ami行GitHub。

注意
  • 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 神經元 (ML 加速器) 為基礎的工作負載

如需 Amazon EKS Neuron 中使用的訓練和推論工作負載的詳細資訊,請參閱下列參考資料:

若要啟用 GPU 型工作負載

以下程序說明如何使用 Amazon EKS 最佳化加速 AMI,在 GPU 型執行個體上執行工作負載。

  1. 將 GPU 節點加入您的叢集之後,您必須套用 Kubernetes 專用 NVIDIA 裝置外掛程式作為叢集上的 DaemonSet。請先以您想要的 NVIDIA/k8s-device-plugin 版本來取代 vX.X.X,再執行下列命令。

    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 的檔案。以您想要的 nvidia/cuda 標籤取代 tag。此清單檔案會啟動要在節點上執行 nvidia-smiNVIDIA CUDA 容器。

    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 的多架構容器映像簡介部落格一文。

測試從移轉Docker到 containerd

從推出 Kubernetes 1.24 版開始,Amazon EKS 將結束對 Docker 的支援。如需詳細資訊,請參閱 Amazon EKS 已結束對 Dockershim 的支援

對於Kubernetes版本1.23,您可以使用選用的啟動程序旗標,為 Amazon EKS 最佳化 AL2 AMI 啟用containerd執行階段。此功能為您在更新至 1.24 版或更新版本時遷移至 containerd 的操作提供清晰的路徑。從推出 Kubernetes 1.24 版開始,Amazon EKS 將結束對 Docker 的支援。containerd 執行階段已在 Kubernetes 社群廣泛採用,是 CNCF 的一個畢業專案。您可以將節點群組新增至新叢集或現有叢集來進行測試。

您可以建立下列其中一種節點群組類型,以啟用引導旗標。

自我管理

使用 啟動自我管理的 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 的詳細資訊,請參閱下列區段: