建立受管節點群組 - Amazon EKS

協助改善此頁面

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

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

建立受管節點群組

本主題會描述如何啟動已向 Amazon EKS 叢集註冊的節點的 Amazon EKS 受管節點群組。節點加入叢集後,您就可以將 Kubernetes 應用程式部署至其中。

如果這是您第一次啟動 Amazon EKS 受管節點群組,建議您改為按照其中一個 Amazon EKS 入門 指南的步驟進行。本指南提供建立具有節點的 Amazon EKS 叢集的演練。

重要
必要條件

您可以使用 eksctl 或 AWS Management Console建立受管節點群組。

eksctl
使用 eksctl 建立受管節點群組

此程序需要 eksctl 版本 0.183.0 或更新版本。您可使用以下命令檢查您的版本:

eksctl version

如需有關安裝或更新 eksctl 的指示,請參閱 eksctl 文件中的 Installation 一節。

  1. (選用) 如果 AmazonEKS_CNI_Policy 受管 IAM 政策已連接至您的 Amazon EKS 節點 IAM 角色,建議您改為將其指派給您與 Kubernetes aws-node 服務帳戶相關聯的 IAM 角色。如需詳細資訊,請參閱 設定為Amazon VPC CNI plugin for Kubernetes使用服務帳戶的 IAM 角色 (IRSA)

  2. 使用或不使用自訂啟動範本來建立受管節點群組。手動指定啟動範本可讓您更靈活地自訂節點群組。例如,此方式可以允許部署自訂 AMI,或對 Amazon EKS 最佳化 AMI 中的 boostrap.sh 指令碼提供引數。如需每個可用選項和預設值的完整清單,請輸入以下命令。

    eksctl create nodegroup --help

    在以下命令中,將 my-cluster 取代為您的叢集名稱,並將 my-mng 取代為您的節點群組名稱。節點群組名稱不可超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。

    重要

    如果在第一次建立受管的節點群組時未使用自訂啟動範本,請勿在之後針對節點群組使用自訂啟動範本。如果沒有指定自訂啟動範本,系統會自動產生啟動範本 (不建議手動修改該範本)。手動修改此自動產生的啟動範本可能會導致錯誤。

    沒有啟動範本

    eksctl 會在您的帳戶中建立預設 Amazon EC2 啟動範本,並使用根據您指定之選項建立的啟動範本來部署節點群組。指定 --node-type 的值之前,請參閱 選擇 Amazon EC2 執行個體類型

    使用允許的關鍵字取代 ami-family。如需詳細資訊,請參閱 eksctl 文件中的 Setting the node AMI Family (設定節點 AMI 系列)。使用 Amazon EC2 金鑰對或公有金鑰的名稱取代 my-key。此金鑰會在節點啟動後用於將 SSH 套用至節點。

    注意

    對於 Windows,此命令不會啟用 SSH。而是將 Amazon EC2 金鑰對與執行個體建立關聯,讓您可以 RDP 至該執行個體中。

    如果您還沒有 Amazon EC2 金鑰對,可以在 AWS Management Console中建立一個。如需詳Linux細資訊,請參閱 Amazon EC2 使用者指南中的 Amazon EC2 金鑰配對和Linux執行個體。如需詳Windows細資訊,請參閱 Amazon EC2 使用者指南中的 Amazon EC2 金鑰配對和Windows執行個體

    如果下列條件為真,則建議封鎖 Pod 對 IMDS 的存取:

    • 您計劃將 IAM 角色指派給您的所有 Kubernetes 服務帳戶,以便 Pods 僅具有所需的最低權限。

    • 叢集Pods中的否需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS) 的其他原因,例如擷取目前 AWS 區域的執行個體。

    如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

    若要封鎖 Pod 對 IMDS 的存取,請將 --disable-pod-imds 選項新增至下列命令。

    eksctl create nodegroup \ --cluster my-cluster \ --region region-code \ --name my-mng \ --node-ami-family ami-family \ --node-type m5.large \ --nodes 3 \ --nodes-min 2 \ --nodes-max 4 \ --ssh-access \ --ssh-public-key my-key

    您的執行個體可以選擇性地為 Pods 指派更多的 IP 地址、將 IP 地址指派給不同於執行個體之 CIDR 區塊的 Pods,以及在沒有網際網路存取的情況下部署至叢集。如需詳細資訊,請參閱 增加 Amazon EC2 節點的可用 IP 地址數量Pod 的自訂聯網私有叢集要求 以取得要新增至之前命令的其他選項。

    受管節點群組會根據執行個體類型,計算並套用可在節點群組之每個節點上執行的 Pods 數量上限單一數值。若您建立具有不同執行個體類型的節點群組,則在所有執行個體類型中計算的最小值,會套用為可在節點群組中每種執行個體類型上執行的 Pods 數量上限。受管節點群組會使用 Amazon EKS 為每種 Amazon EC2 執行個體類型建議 Pods 數量上限 中參考的指令碼來計算數值。

    搭配啟動範本

    啟動範本必須已經存在,且必須符合 啟動範本組態基礎知識 中指定的要求。

    如果下列條件為真,則建議封鎖 Pod 對 IMDS 的存取:

    • 您計劃將 IAM 角色指派給您的所有 Kubernetes 服務帳戶,以便 Pods 僅具有所需的最低權限。

    • 叢集Pods中的否需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS) 的其他原因,例如擷取目前 AWS 區域的執行個體。

    如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

    若您要封鎖 Pod 對 IMDS 的存取,請在啟動範本中指定必要的設定。

    1. 將以下內容複製到您的裝置。取代 example values,然後執行修改後的命令來建立 eks-nodegroup.yaml 檔案。在不使用啟動範本的情況下部署時指定的數個設定會移至啟動範本。如果您未指定 version,即使用範本的預設版本。

      cat >eks-nodegroup.yaml <<EOF apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code managedNodeGroups: - name: my-mng launchTemplate: id: lt-id version: "1" EOF

      如需 eksctl 組態檔案設定的完整清單,請參閱 eksctl 文件中的組態檔案結構描述。您的執行個體可以選擇性地為 Pods 指派更多的 IP 地址、將 IP 地址指派給不同於執行個體之 CIDR 區塊的 Pods、使用 containerd 執行階段,以及在沒有傳出網際網路存取的情況下部署至叢集。如需詳細資訊,請參閱適用於新增至組態檔案之其他選項的 增加 Amazon EC2 節點的可用 IP 地址數量Pod 的自訂聯網測試從移轉Docker到 containerd私有叢集要求

      若您未在啟動範本中指定 AMI ID,受管節點群組會根據執行個體類型,計算並套用可在節點群組之每個節點上執行的 Pods 數量上限單一數值。若您建立具有不同執行個體類型的節點群組,則在所有執行個體類型中計算的最小值,會套用為可在節點群組中每種執行個體類型上執行的 Pods 數量上限。受管節點群組會使用 Amazon EKS 為每種 Amazon EC2 執行個體類型建議 Pods 數量上限 中參考的指令碼來計算數值。

      若您已在啟動範本中指定 AMI ID,且正使用自訂聯網或想增加指派至執行個體的 IP 地址數量,請指定可在節點群組之每個節點上執行的 Pods 數量上限。如需詳細資訊,請參閱 Amazon EKS 為每種 Amazon EC2 執行個體類型建議 Pods 數量上限

    2. 使用下列命令部署節點群組。

      eksctl create nodegroup --config-file eks-nodegroup.yaml
AWS Management Console
若要使用建立受管理節點群組 AWS Management Console
  1. 等待您的叢集狀態顯示為 ACTIVE。您無法針對尚未進入 ACTIVE 狀態的叢集建立受管節點群組。

  2. 在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters

  3. 選擇要在其中建立受管節點群組的叢集名稱。

  4. 選取 Compute (運算) 標籤。

  5. 選擇 Add node group (新增節點群組)。

  6. Configure node group (配置節點群組) 頁面上,相應地填寫參數,然後選擇 Next (下一步)

    • Name (名稱) – 輸入受管節點群組的唯一名稱。節點群組名稱不可超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。

    • Node IAM role (節點 IAM 角色):選擇要與節點群組搭配使用的節點執行個體角色。如需詳細資訊,請參閱 Amazon EKS 節點 IAM 角色

      重要
      • 您無法使用用於建立任何叢集的相同角色。

      • 建議使用尚未被任何自我管理節點群組使用的角色。否則,您要計劃與新的自我管理節點組一起使用。如需詳細資訊,請參閱 刪除受管節點群組

    • Use launch template (使用啟動範本):(選用) 選擇是否要使用現有的啟動範本。選取啟動範本名稱。然後,選取 Launch template version (啟動範本版本)。如果您沒有選取版本,則 Amazon EKS 會使用範本的預設版本。啟動範本允許對節點群組進行更多自訂,譬如允許您部署自訂 AMI、為 Pods 指派更多的 IP 地址、將 IP 地址指派給不同於執行個體之 Pods 區塊的 Pod、啟用執行個體的 containerd 執行階段,以及將節點部署至沒有傳出網際網路存取的叢集。如需詳細資訊,請參閱 增加 Amazon EC2 節點的可用 IP 地址數量Pod 的自訂聯網測試從移轉Docker到 containerd私有叢集要求

      啟動範本必須符合 使用啟動範本自訂受管節點 要求。如果您不使用自己的啟動範本,Amazon EKS API 會在您的帳戶中建立預設的 Amazon EC2 啟動範本,並使用預設啟動範本部署節點群組。

      若您實作服務帳戶的 IAM 角色,請直接將必要的許可指派至需要存取 AWS 服務的每個 Pod,且叢集中沒有 Pods 基於其他原因 (例如擷取目前的 AWS 區域) 需要存取 IMDS,而您亦可針對未在啟動範本中使用主機聯網的 Pods 停用對 IMDS 的存取。如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

    • Kubernetes 標籤 – (選用) 您可以選擇將 Kubernetes 標籤套用至受管節點群組中的節點。

    • Kubernetes 污點 – (選用) 您可以選擇將 Kubernetes 污點套用至受管節點群組中的節點。Effect (效果) 功能表中的可用選項是 NoScheduleNoExecutePreferNoSchedule。如需詳細資訊,請參閱 受管節點群組上的節點污點

    • Tags (標籤) – (選用) 您可以選擇標記 Amazon EKS 受管節點群組。這些標籤不會傳播到節點群組中的其他資源,例如 Auto Scaling 群組或執行個體。如需詳細資訊,請參閱 為您的 Amazon EKS 資源加上標籤

  7. Set compute and scaling configuration (設定運算和擴展組態) 頁面上,相應地填寫參數,然後選擇 Next (下一步)。

    • AMI type (AMI 類型):選取 AMI 類型。如果您在部署 Arm 執行個體,請務必在部署前檢閱 Amazon EKS 最佳化的 Arm Amazon Linux AMI 中的考量事項。

      如果您在上一頁中已指定啟動範本,並在啟動範本中指定了 AMI,則無法選取值。系統會顯示範本中的值。範本中指定的 AMI 必須符合 指定 AMI 中的要求。

    • Capacity type (容量類型) – 選取容量類型。如需選擇容量類型的詳細資訊,請參閱 受管節點群組容量類型。您無法在同一節點群組中混合使用不同的容量類型。如果要同時使用這兩種容量類型,請建立個別的節點群組,每個群組都有自己的容量和執行個體類型。

    • Instance types (執行個體類型):依預設會指定一或多個執行個體類型。若要移除預設執行個體類型,請選取執行個體類型的右側的 X。選擇要在受管節點群組中使用的執行個體類型。如需詳細資訊,請參閱 選擇 Amazon EC2 執行個體類型

      主控台會顯示一組常用的執行個體類型。如果需要使用未顯示的執行個體類型建立受管節點群組,則請使用 eksctl、 AWS CLI、 AWS CloudFormation或開發套件以建立節點群組。如果您在上一頁指定了啟動範本,則無法選取值,因為必須在啟動範本中指定執行個體類型。系統會顯示啟動範本中的值。如果為 Capacity type (容量類型) 選取了 Spot,則建議您指定多個執行個體類型以增強可用性。

    • Disk size (磁碟大小) – 輸入要用於節點根磁碟區的磁碟大小 (以 GiB 為單位)。

      如果您在上一頁指定了啟動範本,則無法選取值,因為必須在啟動範本中指定該值。

    • Desired size (所需大小) – 指定受管節點群組目前在啟動時應該維護的節點數量。

      注意

      Amazon EKS 不會自動擴展或縮減您的節點群組。不過,您可以設定 Kubernetes Cluster Autoscaler 為您執行這項操作。

    • Minimum size (大小下限) – 指定受管節點群組可縮減至的節點數量下限。

    • Maximum size (大小上限):指定受管節點群組可擴增至的節點數量上限。

    • Node group update configuration (節點群組更新組態) – (選用) 您可以選取要平行更新的節點數量或百分比。這些節點在更新期間將無法使用。對於 Maximum unavailable (無法使用的上限),選取下列其中一個選項,然後指定 Value (值):

      • Number (數量):選取並指定可平行更新節點群組的節點數量。

      • Percentage (百分比):選取並指定可平行更新節點群組的節點百分比。如果您的節點群組中有大量節點,這會很有用。

  8. Specify networking (指定聯網) 頁面上,據此填寫參數,然後選擇 Next (下一步)。

    • Subnets (子網路):選擇要將受管節點啟動至其中的子網路。

      重要

      如果您跨越多個由 Amazon EBS 磁碟區提供的可用區域執行狀態應用程式,並且使用 Kubernetes 自動擴展,您應該設定多個節點群組,每個群組的範圍皆為單一可用區域。另外,您應該啟用 --balance-similar-node-groups 功能。

      重要
      • 如果選擇公有子網路,而且您的叢集只啟用了公有 API 伺服器端點,則子網路的必須將 MapPublicIPOnLaunch 設定為 true,讓執行個體成功加入叢集。如果公有子網路是使用 eksctl 或 2020 年 3 月 26 日或之後 Amazon EKS 發佈的 AWS CloudFormation 範本,則此設定已設定為 true。如果子網路是使用eksctl或在 2020 年 3 月 26 日之前建立的 AWS CloudFormation 範本,則您需要手動變更設定。如需詳細資訊,請參閱修改子網路的公有 IPv4 定址屬性

      • 如果使用啟動範本並指定多個網路介面,Amazon EC2 便不會自動指派公有 IPv4 地址,即使 MapPublicIpOnLaunch 已設定為 true。對於在此案例中加入叢集的節點,您必須啟用叢集的私有 API 伺服器端點,或使用透過其他方法 (例如 NAT Gateway) 提供的出站網際網存取,啟動私有子網路中的節點。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的 Amazon EC2 執行個體 IP 定址

    • 設定 SSH 存取節點 (選用)。啟用 SSH 可讓您連接到執行個體,並在發生問題時收集診斷資訊。強烈建議您在建立節點群組時啟用遠端存取。您無法在建立節點群組之後啟用遠端存取。

      如果您選擇使用啟動範本,則不會顯示此選項。若要啟用節點的遠端存取,請在啟動範本中指定金鑰對,並確定您在啟動範本中指定之安全群組中的節點已開啟適當的連接埠。如需詳細資訊,請參閱 使用自訂安全群組

      注意

      對於 Windows,此命令不會啟用 SSH。而是將 Amazon EC2 金鑰對與執行個體建立關聯,讓您可以 RDP 至該執行個體中。

    • 對於 SSH key pair (SSH 金鑰對) (選用),選擇要使用的 Amazon EC2 SSH 金鑰。如需詳Linux細資訊,請參閱 Amazon EC2 使用者指南中的 Amazon EC2 金鑰配對和Linux執行個體。如需詳Windows細資訊,請參閱 Amazon EC2 使用者指南中的 Amazon EC2 金鑰配對和Windows執行個體。如果您選擇使用啟動範本,則無法選取範本。當使用 Bottlerocket AMI 為節點群組提供 Amazon EC2 SSH 金鑰時,也會啟用管理容器。如需詳細資訊,請參閱 GitHub 上的管理容器

    • 對於 Allow SSH remote access from (允許 SSH 遠端存取來自),如果要限制對特定執行個體的存取,請選取與這些執行個體相關聯的安全群組。如果沒有選取特定的安全群組,則允許從網際網路 (0.0.0.0/0) 上的任何地方存取 SSH。

  9. Review and create (檢閱並建立) 頁面上,檢閱您的受管節點群組組態,然後選擇 Create (建立)

    如果節點無法加入叢集,請參閱故障診斷指南中的 節點無法加入叢集

  10. 查看節點的狀態,並等待他們到達 Ready 狀態。

    kubectl get nodes --watch
  11. (僅限 GPU 節點) 若選擇了 GPU 執行個體類型以及 Amazon EKS 最佳化之加速 AMI,則必須套用 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

現在您已具備含節點之可正常運作的 Amazon EKS 叢集,您即可開始安裝 Kubernetes 附加元件並將應用程式部署到叢集。以下文件主題可協助您擴展叢集的功能。

  • 建立叢集的 IAM 主體是唯一可以使用 kubectl 或 AWS Management Console對 Kubernetes API 伺服器進行呼叫的主體。如果要其他 IAM 主體能夠存取叢集,則需新增這些主體。如需詳細資訊,請參閱 授予 Kubernetes API 的存取權 所需的許可

  • 如果下列條件為真,則建議封鎖 Pod 對 IMDS 的存取:

    • 您計劃將 IAM 角色指派給您的所有 Kubernetes 服務帳戶,以便 Pods 僅具有所需的最低權限。

    • 叢集Pods中的否需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS) 的其他原因,例如擷取目前 AWS 區域的執行個體。

    如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

  • 自動擴展:設定 Kubernetes Cluster Autoscaler,以自動調整節點群組中的節點數量。

  • 範例應用程式部署至叢集。

  • 叢集管理:了解如何使用重要工具來管理叢集。