建立自我管理 Microsoft Windows 節點 - Amazon EKS

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

建立自我管理 Microsoft Windows 節點

本主題說明如何啟動 Auto Scaling 群組 Windows 向 Amazon EKS 叢集註冊的節點。節點加入叢集後,您可以部署 Kubernetes 應用程式。

重要
  • Amazon EKS 節點是標準 Amazon EC2 執行個體,您需根據一般 Amazon EC2 執行個體價格支付這些節點的費用。如需詳細資訊,請參閱 Amazon EC2 定價

  • 您可以在 AWS Outposts 上的 Amazon EKS 延伸叢集中啟動 Windows 節點,但無法在 AWS Outposts 的本機叢集中啟動它們。如需詳細資訊,請參閱使用 AWS Outposts 部署內部部署 Amazon EKS

Enable Windows 叢集的支援。建議您在啟動 Windows 節點群組。如需詳細資訊,請參閱Enable Windows 支援

您可以啟動自我管理 Windows 具有下列任何一項的節點:

eksctl

使用 ` 啟動自我管理的 Windows eksctl 節點

此程序需要您已安裝 eksctl,且您的 eksctl 版本至少是 0.194.0。您可使用以下命令檢查您的版本。

eksctl version

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

注意

此程序只適用於使用 eksctl 所建立的叢集。

  1. (選用) 如果 AmazonEKS_CNI_Policy 受管 IAM 政策 (如果您有IPv4叢集) 或 AmazonEKS_CNI_IPv6_Policy (如果您有IPv6叢集,則為您自己建立的) 已連接至您的 Amazon EKS 節點 IAM 角色,建議您將其指派給與 相關聯的 IAM 角色 Kubernetes aws-node 服務帳戶。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA

  2. 此程序假設您有現有的叢集。如果您還沒有 Amazon EKS 叢集和 Amazon Linux 節點群組來新增 Windows 節點群組,建議您遵循 Amazon EKS – eksctl 入門。本指南提供如何使用 Amazon Linux 節點建立 Amazon EKS 叢集的完整逐步解說。

    使用下列命令來建立您的節點群組。Replace (取代) region-code 叢集所在的 AWS 區域。Replace (取代) my-cluster 您的叢集名稱。此名稱僅能使用英數字元 (區分大小寫) 和連字號。它必須以英數字元開頭,且長度不得超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。Replace (取代) ng-windows 節點群組的名稱。節點群組名稱不能超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。用於 Kubernetes 版本 1.24或更新版本,您可以取代 2019 搭配 2022 使用 Windows Server 2022。取代其餘的 example values 使用您自己的值。

    重要

    若要將節點群組部署至 AWS Outpost、 AWS Wavelength 或 AWS Local Zone 子網路,請勿在建立叢集時傳遞 AWS Outpost、Wavelength 或 Local Zone 子網路。使用組態檔案建立節點群組,指定 AWS Outpost、Wavelength 或 Local Zone 子網路。如需詳細資訊,請參閱 eksctl 文件中的從組態檔案建立節點群組組態檔案結構描述

    eksctl create nodegroup \ --region region-code \ --cluster my-cluster \ --name ng-windows \ --node-type t2.large \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --managed=false \ --node-ami-family WindowsServer2019FullContainer
    注意
    • 如果節點無法加入叢集,請參閱故障診斷指南中的 節點無法加入叢集

    • 若要查看 eksctl 命令可用的選項,請輸入下列命令。

      eksctl command -help

    範例輸出如下。建立節點時,會有數行輸出。輸出的最後幾行之一類似於以下的範例行。

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
  3. (選用) 部署範例應用程式以測試叢集和 Windows 節點。

  4. 我們建議封鎖 Pod 如果下列條件為 true,則存取 IMDS:

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

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

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

AWS Management Console

先決條件

步驟 1:使用 啟動自我管理的 Windows 節點 AWS Management Console

  1. 等待您的叢集狀態顯示為 ACTIVE。如果在叢集處於作用中狀態之前啟動節點,則節點向叢集註冊將會失敗,導致您必須再次啟動。

  2. 開啟 AWS CloudFormation 主控台

  3. 選擇建立堆疊

  4. 針對指定範本,選取 Amazon S3 URL

  5. 複製下列 URL 並將其貼到 Amazon S3 URL 中。

    https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2023-02-09/amazon-eks-windows-nodegroup.yaml
  6. 選取 Next (下一步) 兩次。

  7. Quick create stack (快速建立堆疊) 頁面上,視需要輸入下列參數:

    • 堆疊名稱:為您的 AWS CloudFormation 堆疊選擇堆疊名稱。例如,您可以呼叫它 my-cluster-nodes````。

    • ClusterName:輸入您在建立 Amazon EKS 叢集時所使用的名稱。

      重要

      此名稱必須與您在步驟 1:建立 Amazon EKS 叢集中使用的名稱完全相符。否則,您的節點無法加入叢集。

    • ClusterControlPlaneSecurityGroup:從您在建立 AWS CloudFormation 時產生的 VPC 輸出中選擇安全群組。下列步驟顯示擷取適用群組的一種方法。

      1. 開啟 Amazon EKS 主控台

      2. 選擇叢集的名稱。

      3. 選擇 Networking (網路) 索引標籤。

      4. ClusterControlPlaneSecurityGroup 下拉式清單中選取時,請使用其他安全群組值作為參考。

    • NodeGroupName:輸入節點群組的名稱。此名稱稍後可用來識別為您的節點建立的 Auto Scaling 節點群組。節點群組名稱不能超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。

    • NodeAutoScalingGroupMinSize:輸入節點 Auto Scaling 群組可以擴展到的節點數量下限。

    • NodeAutoScalingGroupDesiredCapacity:輸入所需節點數量,以便在建立堆疊時擴展至 。

    • NodeAutoScalingGroupMaxSize:輸入節點 Auto Scaling 群組可以向外擴展的節點數量上限。

    • NodeInstanceType:為您的節點選擇執行個體類型。如需詳細資訊,請參閱選擇最佳的 Amazon EC2 節點執行個體類型

      注意

      最新版本的 Amazon VPC CNI Kubernetes 外掛程式支援的執行個體類型列於 vpc_ip_resource_limit.go on GitHub。 您可能需要更新 CNI 版本,才能使用最新的支援執行個體類型。如需詳細資訊,請參閱Amazon VPC CNI

    • SSMParamNodeImageId:預先填入目前建議的 Amazon EC2 最佳化的 Amazon EKS Systems Manager 參數 Windows 核心 AMI ID。若要使用完整版本的 Windows,取代 Core 使用 Full

    • NodeImageId:(選用) 如果您使用自己的自訂 AMI (而非 Amazon EKS 最佳化 AMI),請輸入您 AWS 區域的節點 AMI ID。如果您為此欄位指定值,則會覆寫 NodeImageIdSSMParam Word欄位中的任何值。

    • NodeVolumeSize:在 GiB 中指定節點的根磁碟區大小。

    • KeyName:輸入 Amazon EC2 SSH 金鑰對的名稱,您可以在啟動後使用 SSH 將金鑰對連接至節點。如果您還沒有 Amazon EC2 金鑰對,您可以在 中建立一個金鑰對 AWS Management Console。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的 Amazon Word 金鑰對 EC2

      注意

      如果您未在此提供金鑰對,則無法建立 AWS CloudFormation 堆疊。

    • BootstrapArguments:指定要傳遞給節點引導指令碼的任何選用引數,例如使用 的額外kubelet引數-KubeletExtraArgs

    • DisableIMDSv1:根據預設,每個節點都支援執行個體中繼資料服務第 1 版 (IMDSv1) 和 IMDSv2。您可以停用 IMDSv1。為了防止未來的節點和 Pods 在節點群組中使用 MDSv1 時,將 DisableIMDSv1 設定為 true。如需 IMDS 的詳細資訊,請參閱設定執行個體中繼資料服務

    • VpcId:為您建立的 VPC 選取 ID。

    • NodeSecurityGroups:選取為您的 建立的安全群組 Linux 節點群組VPC。如果您的 Linux 節點有多個連接到它們的安全群組,請指定所有它們。例如,如果 Linux 節點群組已使用 建立eksctl

    • Subnets (子網路):選擇您建立的子網路。如果您VPC使用為 Amazon VPC 叢集建立 Amazon Word 中的步驟來建立 EKS,則請僅指定要啟動節點的 VPC 中的私有子網路。

      重要
      • 如有任何子網路是公有子網路,則必須啟用自動公有 IP 地址指派設定。如果未針對公有子網路啟用設定,則您部署至該公有子網路的任何節點都不會指派公有 IP 地址,也無法與叢集或其他 AWS 服務通訊。如果子網路是在 2020 年 3 月 26 日之前使用 Amazon EKS AWS VPC CloudFormation Word範本或使用 進行部署eksctl,則公有子網路會停用自動公有 IP 地址指派。如需如何啟用子網路的公有 IP 地址指派的詳細資訊,請參閱修改子網路的公有 IPv4 定址屬性。如果節點部署到私有子網路,則可以透過 NAT 閘道與叢集和其他 AWS 服務通訊。

      • 如果子網路沒有網際網路存取權,請確定您知道部署網際網路存取權有限的私有叢集中的考量事項和額外步驟。

      • 如果您選取 AWS Outpost、Wavelength 或 Local Zone 子網路,則建立叢集時不得傳入子網路。

  8. 確認堆疊可能會建立 IAM 資源,然後選擇建立堆疊

  9. 當當堆疊已完成建立時,從主控台將其選取,然後選擇 Outputs (輸出)

  10. 記錄所建立節點群組的 NodeInstanceRole。您在設定 Amazon EKS 時需要此功能 Windows 節點。

步驟 2:啟用節點以加入叢集

  1. 檢查以瞭解是否有 aws-auth ConfigMap

    kubectl describe configmap -n kube-system aws-auth
  2. 如果您看到 aws-auth ConfigMap,請視需要更新之。

    1. 開啟 ConfigMap 進行編輯。

      kubectl edit -n kube-system configmap/aws-auth
    2. 視需要新增 mapRoles 個項目。將rolearn值設定為您在先前程序中記錄的 NodeInstanceRole 值。

      [...] data: mapRoles: | - rolearn: <ARN of linux instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: <ARN of windows instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - eks:kube-proxy-windows [...]
    3. 儲存檔案並結束您的文字編輯器。

  3. 如果您收到一個錯誤,說明 "Error from server (NotFound): configmaps "aws-auth" not found,那麼請套用股票 ConfigMap

    1. 下載組態對應。

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm-windows.yaml
    2. aws-auth-cm-windows.yaml 檔案中,將rolearn值設定為您在先前程序中記錄的適用 NodeInstanceRole 值。您可以使用文字編輯器,或取代 example values 並執行下列命令:

      sed -i.bak -e 's|<ARN of linux instance role (not instance profile)>|my-node-linux-instance-role|' \ -e 's|<ARN of windows instance role (not instance profile)>|my-node-windows-instance-role|' aws-auth-cm-windows.yaml
      重要
      • 請勿修改此檔案中的任何其他行。

      • 不要對兩者使用相同的 IAM 角色 Windows 以及 Linux 節點。

    3. 套用組態。此命令可能需要幾分鐘的時間來完成。

      kubectl apply -f aws-auth-cm-windows.yaml
  4. 查看節點的狀態,並等待他們到達 Ready 狀態。

    kubectl get nodes --watch

    輸入 Ctrl+C 傳回 Shell 提示。

    注意

    如果您收到任何授權或資源類型錯誤,請參閱故障診斷主題中的未經授權或存取遭拒 (kubectl)

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

步驟 3:其他動作

  1. (選用) 部署範例應用程式以測試叢集和 Windows 節點。

  2. (選用) 如果 AmazonEKS_CNI_Policy 受管 IAM 政策 (如果您有IPv4叢集) 或 AmazonEKS_CNI_IPv6_Policy (如果您有IPv6叢集,則為您自己建立的) 已連接至您的 Amazon EKS 節點 IAM 角色,建議您將其指派給與 相關聯的 IAM 角色 Kubernetes aws-node 服務帳戶。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA

  3. 我們建議封鎖 Pod 如果下列條件為 true,則存取 IMDS:

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

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

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