更新 AWS CloudFormation 節點堆疊 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

更新 AWS CloudFormation 節點堆疊

此主題會說明如何透過新 AMI 更新現有的 AWS CloudFormation 自我管理節點堆疊。您可以使用此程序在叢集更新後將節點更新至新版本的 Kubernetes。否則,您可以針對現有 Kubernetes 版本更新至最新的 Amazon EKS 最佳化 AMI。

重要

本主題涵蓋自我管理節點的節點更新。若要了解透過受管節點群組來簡化節點生命週期的相關詳細資訊,請參閱 更新叢集的受管節點群組

已將最新預設 Amazon EKS 節點 AWS CloudFormation 範本設定為在叢集中使用新的 AMI 啟動執行個體,再將舊的 AMI 移除,一次一個。此組態可確保您在滾動更新期間,都能掌握叢集中 Auto Scaling 群組所需的作用中執行個體計數。

注意

不支援對使用 eksctl 建立的節點群組使用這個方法。如果透過 eksctl 建立叢集或節點群組,則請參閱 將應用程式移轉至新的節點群組

  1. 判斷叢集的 DNS 供應商。

    kubectl get deployments -l k8s-app=kube-dns -n kube-system

    範例輸出如下。此叢集針對 DNS 解析度使用 CoreDNS,但您的叢集可能會傳回 kube-dns。根據您使用的 kubectl 版本,輸出可能會有所不同。

    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE coredns 1 1 1 1 31m
  2. 如果您目前的部署執行少於 2 個複本,請將部署擴增為 2 個複本。如果您先前的命令輸出傳回該項目,請以 kube-dns 取代 coredns

    kubectl scale deployments/coredns --replicas=2 -n kube-system
  3. (選用) 如果您使用的是 Kubernetes Cluster Autoscaler,請將部署縮減為零 (0) 個複本以避免衝突的擴展動作。

    kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system
  4. 確定目前節點群組的執行個體類型和所需執行個體計數。在您更新群組的 AWS CloudFormation 範本之後,輸入這些值。

    1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

    2. 在左側導覽窗格中,選擇 Launch Configurations (啟動組態),並記下現有節點啟動組態的執行個體類型。

    3. 在左側導覽窗格中,選擇 Auto Scaling Groups (Auto Scaling 群組),並注意現有節點 Auto Scaling 群組的 Desired (所需) 執行個體計數。

  5. 開啟 AWS CloudFormation 主控台

  6. 選取您的節點群組堆疊,然後選擇 Update (更新)。

  7. 選取 Replace current template (取代目前的範本),然後選取 Amazon S3 URL

  8. 對於 Amazon S3 URL,將以下 URL 貼到文字區域,以確保您使用最新版本的節點 AWS CloudFormation 範本。然後選擇 Next (下一步):

    https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
  9. Specify stack details (指定堆疊詳細資訊) 頁面上,填寫下列參數,然後選擇 Next (下一步)

    • NodeAutoScalingGroupDesiredCapacity:輸入在先前步驟中記錄的所需執行個體計數。或者,在堆疊更新時,輸入欲擴展的所需節點數量。

    • NodeAutoScalingGroupMaxSize:輸入節點 Auto Scaling 群組可以擴增的最大節點數。此值必須至少超過所需容量一個節點。這樣才能夠在更新期間執行節點滾動更新,而不必減少節點計數。

    • NodeInstanceType:選擇在先前步驟中記錄的執行個體類型。或者,為節點選擇不同的執行個體類型。選擇不同的執行個體類型之前,請檢閱選擇最佳 Amazon EC2 節點執行個體類型。每個 Amazon EC2 執行個體類型都支援最大數量的彈性網路介面 (網路介面),且每個網路介面支援最大數量的 IP 地址。由於為每個工作節點和 Pod 指派了自己的 IP 位址,因此請務必選擇支援要在每個 Amazon EC2 節點上執行之最大 Pod 數量的執行個體類型。如需執行個體類型支援的網路介面和 IP 地址數量清單,請參閱每種執行個體類型每個網路介面的 IP 地址。例如,m5.large 執行個體類型最多支援工作節點和 Pod 的 30 個 IP 位址。

      注意

      最新版本的 Kubernetes 專用 Amazon VPC CNI 外掛程式支援的執行個體類型會顯示在 GitHub 上的 vpc_ip_resource_limit.go。您可能需要更新適用於 Kubernetes 的 Amazon VPC CNI 版本,才能使用最新支援的執行個體類型。如需詳細資訊,請參閱 使用 Amazon VPC CNI 將 IP 指派給 Pod

      重要

      某些執行個體類型可能無法在所有 AWS 區域中提供。

    • NodeImageIdSSMParam – 您要更新的 AMI ID 的 Amazon EC2 Systems Manager 參數。以下值對 Kubernetes 1.33 版使用最新的 Amazon EKS 最佳化 AMI。

      /aws/service/eks/optimized-ami/1.33/amazon-linux-2/recommended/image_id

      您可以使用相同的 platform-version 來取代 1.33。或者比控制平面上執行的 Kubernetes 版本早一個版本號的版本。建議您將節點保持在與控制平面相同的版本。您亦可使用不同的 AMI 類型來取代 amazon-linux-2。如需詳細資訊,請參閱 擷取建議的 Amazon Linux AMI ID

      注意

      使用 Amazon EC2 Systems Manager 參數可讓您在未來更新節點,而無需查詢和指定 AMI ID。如果 AWS CloudFormation 堆疊使用此值,任何堆疊更新一律會為您指定的 Kubernetes 版本啟動最新建議的 Amazon EKS 最佳化 AMI。即使沒有變更範本中的任何值,情況也會如此。

    • NodeImageId:若要使用您自己的自訂 AMI,請輸入要使用的 AMI 的 ID。

      重要

      此值會覆寫 NodeImageIdSSMParam 指定的任何值。如果您想要使用 NodeImageIdSSMParam 值,請確定 NodeImageId 的值為空白。

    • DisableIMDSv1:在預設情況下,每個節點都支援執行個體中繼資料服務版本 1 (IMDSv1) 和 IMDSv2。不過,您可以停用 IMDSv1。如果不想要任何節點,或節點群組中排定的任何 Pod 使用 IMDSv1,則請選取 true (是)。如需 IMDS 的詳細資訊,請參閱設定執行個體中繼資料服務。如果已針對服務帳戶實作 IAM 角色,請直接將必要的許可指派給需要存取 AWS 服務的所有 Pod。如此一來,叢集中的 Pod 無需因其他原因而存取 IMDS,例如擷取目前的 AWS 區域。然後,您也可以針對不使用主機聯網的 Pod 停用對 IMDSv2 的存取。如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

  10. (選用) 在 Options (選項) 頁面上,為堆疊資源加上標籤。選擇下一步

  11. Review (檢閱) 頁面上檢閱您的資訊,確認該堆疊可建立 IAM 資源,然後選擇 Update stack (更新堆疊)。

    注意

    叢集中每個節點的更新,都需要幾分鐘的時間。請等待所有節點更新完成再執行後續步驟。

  12. 如果您叢集的 DNS 供應商為 kube-dns,請將 kube-dns 部署縮減至 1 個複本。

    kubectl scale deployments/kube-dns --replicas=1 -n kube-system
  13. (選用) 如果您使用的是 Kubernetes Cluster Autoscaler,請將部署縮減回您想要的複本數量。

    kubectl scale deployments/cluster-autoscaler --replicas=1 -n kube-system
  14. (選用) 確認您使用的是最新版本的 Kubernetes 專用 Amazon VPC CNI 外掛程式。您可能需要更新適用於 Kubernetes 的 Amazon VPC CNI 版本,才能使用最新支援的執行個體類型。如需詳細資訊,請參閱 使用 Amazon VPC CNI 將 IP 指派給 Pod