為叢集建立受管節點群組 - Amazon EKS

協助改善此頁面

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

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

為叢集建立受管節點群組

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

如果這是您第一次啟動 Amazon EKS 受管節點群組,建議您改為遵循我們的開始使用 Amazon EKS指南之一。這些指南提供使用節點建立 Amazon EKS 叢集的逐步解說。

重要
必要條件

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

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

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

eksctl version

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

  1. (選擇性) 如果 Amazon EKS CNI _ 政策受管IAM政策附加到您的Amazon EKS 節點 IAM 角色,建議您將其指派給與Kubernetesaws-node服務帳戶相關聯的IAM角色。如需詳細資訊,請參閱配置 Amazon VPC CNI 插件使用 IRSA

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

    eksctl create nodegroup --help

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

    重要

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

    沒有啟動範本

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

    使用允許的關鍵字取代 ami-family。若要取得更多資訊,請參閱eksctl文件中的〈設定節點AMI系列〉。my-key替換為您的 Amazon EC2 key pair 或公鑰的名稱。此鍵用於在啟動後SSH進入您的節點。

    注意

    對於Windows,此命令不會啟用SSH。相反地,它會將您的 Amazon EC2 key pair 與執行個體產生關聯,並允許您進RDP入執行個體。

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

    IMDS如果下列情況成立,我們建議您封鎖Pod存取:

    • 您計劃將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

    您的執行個體可以選擇性地指派大量的 IP 位址給Pods,Pods從與執行個體不同的CIDR區塊指派 IP 位址,並在沒有網際網路存取權的情況下部署到叢集。如需詳細資訊,請參閱 為具有前置字元的 Amazon EKS 節點指派更多 IP 地址pods在具有自訂網路的替代子網路中部署部署網際網路存取受限的私有叢集 以取得要新增至之前命令的其他選項。

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

    搭配啟動範本

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

    IMDS如果下列情況成立,我們建議您封鎖Pod存取:

    • 您計劃將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 文件中的組態檔案結構描述。您的執行個體可以選擇性地指派大量的 IP 位址給Pods、Pods從不同於執行個體的CIDR區塊指派 IP 位址、使用執containerd行階段,以及部署到沒有輸出網際網路存取權的叢集。如需詳細資訊,請參閱適用於新增至組態檔案之其他選項的 為具有前置字元的 Amazon EKS 節點指派更多 IP 地址pods在具有自訂網路的替代子網路中部署測試 Amazon Linux 2 從遷移Docker到 containerd部署網際網路存取受限的私有叢集

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

      如果您在啟動範本中指定 AMI ID,請指定如果您使用自訂網路或想要增加指派給執行個體的 IP 位址數目,請指定可在節點群組每個節點上執行的最大數目。Pods如需詳細資訊,請參閱Amazon EKS 推薦Pods的每個 Amazon EC2 實例類型最大

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

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

  2. https://console.aws.amazon.com/eks/家裡 #/集群打開 Amazon EKS 控制台。

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

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

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

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

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

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

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

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

    • Use launch template (使用啟動範本):(選用) 選擇是否要使用現有的啟動範本。選取啟動範本名稱。然後,選取 Launch template version (啟動範本版本)。如果您沒有選擇版本,Amazon 將EKS使用該模板的默認版本。啟動範本可讓您對節點群組進行更多自訂,例如允許您部署自訂項目AMI、指派大量的 IP 位址Pods、Pods從執行個體不同的CIDR區塊指派 IP 位址、為執行個體啟用執containerd行階段,以及將節點部署到沒有輸出網際網路存取的叢集。如需詳細資訊,請參閱 為具有前置字元的 Amazon EKS 節點指派更多 IP 地址pods在具有自訂網路的替代子網路中部署測試 Amazon Linux 2 從遷移Docker到 containerd部署網際網路存取受限的私有叢集

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

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

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

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

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

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

    • AMI類型 — 選取AMI類型。 如果您在部署 Arm 執行個體,請務必在部署前檢閱 Amazon EKS 優化 Arm Amazon Linux AMIs 中的考量事項。

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

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

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

      主控台會顯示一組常用的執行個體類型。如果您需要使用未顯示的執行個體類型建立受管節點群組eksctl,請使用 AWS CLI AWS CloudFormation、或SDK來建立節點群組。如果您在上一頁指定了啟動範本,則無法選取值,因為必須在啟動範本中指定執行個體類型。系統會顯示啟動範本中的值。如果為 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使用Karpenter和擴展叢集運算 Cluster Autoscaler,則應設定多個節點群組,每個節點群組都設定為單一可用區域。另外,您應該啟用 --balance-similar-node-groups 功能。

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

      • 如果您使用啟動範本並指定多個網路界面,即使設定為true,Amazon 也EC2不會自動指派公MapPublicIpOnLaunchIPv4地址。若要在此案例中加入叢集的節點,您必須啟用叢集的私人API伺服器端點,或啟動私有子網路中的節點,並透過替代方法 (例如NAT閘道) 提供輸出網際網路存取權。如需詳細資訊,請參閱 Amazon EC2使用者指南中的 Amazon EC2 執行個體 IP 定址

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

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

      注意

      對於Windows,此命令不會啟用SSH。相反地,它會將您的 Amazon EC2 key pair 與執行個體產生關聯,並允許您進RDP入執行個體。

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

    • 針對 [允許SSH遠端存取來源],如果您想限制對特定執行個體的存取,請選取與這些執行個體相關聯的安全性群組。如果您未選取特定的安全性群組,則可以從網際網路上的任何位置SSH存取 (0.0.0.0/0)。

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

    如果節點無法加入叢集,請參閱節點無法加入叢集疑難排解一章。

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

    kubectl get nodes --watch
  11. (僅限GPU節點) 如果您選擇GPU執行個體類型並加速 Amazon EKS 優化AMI,則必須將NVIDIA裝置外掛程式套用Kubernetes為DaemonSet在叢集上。在執vX.X.X行下列命令之前,請先以所需的 NVIDIA/k8 s-device-plugin 版本取代。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml

現在您已經擁有一個具有節點的可運作 Amazon EKS 叢集,您就可以開始安裝Kubernetes附加元件,並將應用程式部署到叢集。以下文件主題可協助您擴展叢集的功能。