啟動自我管理的 Amazon Linux 節點 - Amazon EKS

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

啟動自我管理的 Amazon Linux 節點

本主題會說明如何啟動已向 Amazon EKS 叢集註冊的 Linux 節點的 Auto Scaling 群組。節點加入叢集後,您就可以將 Kubernetes 應用程式部署至其中。您也可以使用eksctl或啟動自我管理的 AWS Management Console Amazon Linux 節點。如果您需要在上啟動節點 AWS Outposts,請參閱啟動 Outpost 上自我管理的 Amazon Linux 節點

必要條件
eksctl
注意

eksctl目前不支持 Amazon Linux 2023。

先決條件

已在裝置或 AWS CloudShell上安裝版本 0.175.0 或更新版本的 eksctl 命令列工具。如需有關安裝或更新 eksctl 的指示,請參閱 eksctl 文件中的安裝一節。

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

  2. 以下命令會在現有的叢集建立節點群組。將 al-nodes 取代為您的節點群組名稱。節點群組名稱不可超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。使用您叢集的名稱取代 my-cluster。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以字母字元開頭,且長度不可超過 100 個字元。以您自己的值取代其餘的 example value。依預設,會使用與控制平面相同的 Kubernetes 版本來建立節點。

    在為 --node-type 選擇值之前,請先參閱 選擇 Amazon EC2 執行個體類型

    使用 Amazon EC2 金鑰對或公有金鑰的名稱取代 my-key。此金鑰會在節點啟動後用於將 SSH 套用至節點。如果您還沒有 Amazon EC2 金鑰對,可以在 AWS Management Console中建立一個。如需詳細資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的 Amazon EC2 金鑰對

    使用下列命令來建立您的節點群組。

    重要

    如果您想要將節點群組部署到 AWS Outposts、Wavelength 或本機區域子網路,還有其他考量:

    eksctl create nodegroup \ --cluster my-cluster \ --name al-nodes \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --managed=false \ --ssh-public-key my-key

    若要部署節點群組:

    如需所有可用選項和預設值的完整清單,請輸入以下命令。

    eksctl create nodegroup --help

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

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

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

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

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

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

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

AWS Management Console
步驟 1:使用 AWS Management Console啟動自我管理的 Linux 節點
  1. 下載最新版本的 AWS CloudFormation 模板。

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
  2. 等待您的叢集狀態顯示為 ACTIVE。如果在叢集處於作用中狀態之前啟動節點,則節點向叢集註冊將會失敗,導致必須再次啟動。

  3. 開啟主 AWS CloudFormation 控台,網址為 https://console.aws.amazon.com/cloudformation

  4. 選擇 Create stack (建立堆疊),然後選取 With new resources (standard) (使用新資源 (標準))。

  5. 針對 Specify template (指定範本),選取 Upload a template file (上傳範本檔案),然後選取 Choose file (選擇檔案)。

  6. 選取您下載的 amazon-eks-nodegroup.yaml 檔案。

  7. 選取下一步

  8. Specify stack details (指定堆疊詳細資訊) 頁面上,據此填寫下列參數,然後選擇 Next (下一步):

    • Stack name:為您的 AWS CloudFormation 堆疊選擇堆疊名稱。例如,您可以稱它為 my-cluster-nodes。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以字母字元開頭,且長度不可超過 100 個字元。

    • ClusterName:輸入您在建立 Amazon EKS 叢集時使用的名稱。此名稱必須與叢集名稱相同,否則節點無法加入叢集。

    • ClusterControlPlaneSecurityGroup:從建立 VPC 時產生的 AWS CloudFormation 輸出中選擇SecurityGroups值。

      下列步驟顯示擷取適用群組的一種操作。

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

      2. 選擇叢集的名稱。

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

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

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

    • NodeAutoScalingGroupMinSize:輸入節點「自動調整」群組可擴充至的最小節點數。

    • NodeAutoScalingGroupDesiredCapacity:輸入堆疊建立時要擴展到的所需節點數。

    • NodeAutoScalingGroupMaxSize:輸入節點「自動調整」群組可向外擴充至的節點數目上限。

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

    • NodeImageIdSSMParam:針對可變版本的最新 Amazon EKS 優化 AMI 的 Amazon EC2 Systems Manager 參數預先填充。Kubernetes若要使用 Amazon EKS 支援不同的 Kubernetes 次要版本,請將 1.XX 取代為不同的受支援版本。建議指定與叢集相同的 Kubernetes 版本。

      您也可以用不同amazon-linux-2的 AMI 類型替換。如需詳細資訊,請參閱 擷取 Amazon EKS 最佳化 Amazon Linux AMI ID

      注意

      Amazon EKS 節點 AMI 基於 Amazon Linux。您可以透過 Amazon Linux 安全中心或是訂閱關聯的 RSS 摘要,追蹤 Amazon Linux 2 的安全或隱私權事件。安全與隱私權事件包含問題的概觀、哪些套件受到影響,以及如何更新您的執行個體以修正問題。

    • NodeImageId: (選擇性) 如果您使用自己的自訂 AMI (而不是 Amazon EKS 最佳化 AMI),請為您 AWS 區域的. 如果您在此處指定一個值,它會覆寫 NodeImageIdSSmPar am 欄位中的任何值。

    • NodeVolumeSize:以 GiB 為節點指定根磁碟區大小。

    • NodeVolumeType:指定節點的根磁碟區類型。

    • KeyName:輸入 Amazon EC2 安全殼層 key pair 的名稱,您可以在啟動後使用 SSH 連線到節點。如果您還沒有 Amazon EC2 金鑰對,可以在 AWS Management Console中建立一個。如需詳細資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的 Amazon EC2 金鑰對

      注意

      如果您沒有在這裡提供 key pair, AWS CloudFormation 堆疊建立會失敗。

    • BootstrapArguments:指定要傳遞給節點啟動程序檔的任何選用引數,例如額外kubelet引數。如需詳細資訊,請檢視 GitHub 上的 bootstrap script usage information (啟動程序指令碼使用資訊)。

      若要部署節點群組:

    • DisableIMDSv1:預設情況下,每個節點都支援執行個體中繼資料服務版本 1 (IMDSv1) 和 IMDSv2。您可以停用 IMDSv1。若要防止節點群組中的未來節點和 Pods 使用 MDSv1,請將 DisableIMDSv1 設定為 true。如需 IMDS 的詳細資訊,請參閱設定執行個體中繼資料服務。如需在節點上限制存取的詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔

    • VpcId:輸入您建立之 VPC 的識別碼。

    • 子網路:選擇您為 VPC 建立的子網路。如果您依照 為 Amazon EKS 叢集建立 VPC 中所述的步驟建立 VPC,則只要指定要啟動節點的 VPC 中的私有子網。您可以看到哪些子網是私有子網,方法是從叢集的 Networking (聯網) 標籤打開每一個子網連結。

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

      • 如果子網路無法存取網際網路,請確定您已知悉 私有叢集要求 中的考量和額外步驟。

      • 如果您選取「 AWS Outposts Wavelength」或「本機區域」子網路,則在建立叢集時不得傳入子網路。

  9. 請在 Configure stack options (設定堆疊選項) 頁面上選取所需的選項,然後選擇 Next (下一頁)。

  10. 選取我了解 AWS CloudFormation 會建立 IAM 資源。左側的核取方塊,然後選擇 Create stack (建立堆疊)。

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

  12. 記錄已建立之節點群組的。NodeInstanceRole當您設定 Amazon EKS 節點時會需要此值。

步驟 2:讓節點加入叢集
注意

如果您在沒有傳出網際網路存取權的私有 VPC 內啟動節點,則必須啟用節點才能從 VPC 內加入叢集。

  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 instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes [...]
    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.yaml
    2. aws-auth-cm.yaml檔案中,將rolearn值設定為您在上一個程序中記錄的NodeInstanceRole值。您可以使用文字編輯器來完成此操作,或者透過替換 my-node-instance-role 並執行以下命令:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
    3. 套用組態。此命令可能需要幾分鐘的時間來完成。

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

    kubectl get nodes --watch

    輸入 Ctrl+C 傳回 Shell 提示。

    注意

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

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

  5. (僅限 GPU 節點) 若選擇了 GPU 執行個體類型以及 Amazon EKS 最佳化之加速 AMI,您就必須套用 Kubernetes 專用 NVIDIA 裝置外掛程式作為叢集上的 DaemonSet。在執行下列命令之前,請先vX.X.X以所需的 NVidia/K8 s-device-plugin 版本取代。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/nvidia-device-plugin.yml
步驟 3:其他動作
  1. (選用) 部署範例應用程式以測試您的叢集和 Linux 節點。

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

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

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

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

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