在 AWS Outposts 上建立 Amazon Linux 節點 - Amazon EKS

協助改善此頁面

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

若要提供此使用者指南,請選擇位於每個頁面右窗格中的 GitHub 上編輯此頁面連結。

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

在 AWS Outposts 上建立 Amazon Linux 節點

本主題會說明如何啟動 Outpost 上已向 Amazon EKS 叢集註冊的 Amazon Linux 節點的 Auto Scaling 群組。叢集可以在 AWS 雲端或 Outpost 上。

  • 現有的 Outpost。如需詳細資訊,請參閱什麼是 AWS Outpost。

  • 現有 Amazon EKS 叢集。若要在 AWS 雲端部署叢集,請參閱建立 Amazon EKS 叢集。若要在 Outpost 上部署叢集,請參閱在 AWS Outposts 上建立本機 Amazon EKS 叢集以獲得高可用性

  • 假設您要在 AWS 雲端的叢集中建立節點,而且您在已啟用 AWS Outposts、 AWS Wavelength 或 AWS Local Zones 的 AWS 區域中有子網路。然後,在您建立叢集時,不得傳入這些子網路。如果您要在 Outpost 上的叢集中建立節點,則必須在建立叢集時在 Outpost 子網路中傳遞 。

  • (建議用於 AWS 雲端上的叢集) Amazon VPC CNI 外掛程式,適用於 Kubernetes 附加元件,其設定為其自身的 IAM 角色,並已連接必要的 IAM 政策。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA。本機叢集不支援服務帳戶的 IAM 角色。

您可以使用 eksctl或 AWS Management Console (使用 AWS CloudFormation 範本) 建立自我管理的 Amazon Linux 節點群組。您也可使用 Terraform

您可以使用此頁面所述的下列工具,為本機叢集建立自我管理節點群組:

重要
  • 自我管理節點群組包含您帳戶中的 Amazon EC2 執行個體。當您或 Amazon EKS 代表您更新控制平面版本時,這些執行個體不會自動升級。自我管理節點群組在主控台中沒有任何需要更新的指示。您可以檢視安裝在節點上的 kubelet 版本,方法是選取您叢集的 Overview (概觀) 標籤上的 Nodes (節點) 清單上的節點,以判斷哪些節點需要更新。您必須手動更新節點。如需詳細資訊,請參閱更新叢集的自我管理節點

  • 在自我管理節點上使用的 kubelet 憑證會發出一年過期。根據預設,憑證輪換不會啟用 (請參閱:https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration),這表示如果您的自我管理節點執行超過一年,就無法再向 Kubernetes API 進行身分驗證。

  • 最佳實務是建議客戶定期更新自我管理節點群組,以接收來自最新 Amazon EKS 最佳化 AMI CVEs 和安全修補程式。更新用於自我管理節點群組的 AMI 也會觸發節點的重新建立,並確保它們不會因為過期的 kubelet 憑證而發生問題。

  • 或者,您也可以在建立自我管理節點群組時啟用用戶端憑證輪換 (請參閱:https://https://kubernetes.io/docs/tasks/tls/certificate-rotation/),以確保 kubelet 憑證隨著目前憑證接近過期而續約。

eksctl

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

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

  2. 如果您的叢集位於 AWS 雲端,且 AmazonEKS_CNI_Policy 受管 IAM 政策已連接至您的 Amazon EKS 節點 IAM 角色,建議您將其指派給您改為與 Kubernetes aws-node服務帳戶建立關聯的 IAM 角色。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA。若您的叢集位於 Outpost 上,則政策必須連接至您的節點角色。

  3. 以下命令會在現有的叢集建立節點群組。叢集必須使用 eksctl 來建立。將 al-nodes 取代為您的節點群組名稱。節點群組名稱不能超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。使用您叢集的名稱取代 my-cluster。此名稱僅能使用英數字元 (區分大小寫) 和連字號。它必須以英數字元開頭,且長度不可超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。若您的叢集存在於 Outpost 上,請使用 Outpost 子網路的 ID 來取代 id。如果您的叢集存在於 AWS 雲端上,請將 ID 取代為您建立叢集時未指定的子網路 ID。使用您 Outpost 支援的執行個體類型來取代 instance-type。將剩餘的範例值取代為您自己的值。依預設,系統會使用與控制平面相同的 Kubernetes 版本來建立節點。

    使用您 Outpost 上可用的執行個體類型來取代 instance-type

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

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

    eksctl create nodegroup --cluster my-cluster --name al-nodes --node-type instance-type \ --nodes 3 --nodes-min 1 --nodes-max 4 --managed=false --node-volume-type gp2 --subnet-ids subnet-id

    如果您的叢集部署在 AWS 雲端:

    如需所有可用選項和預設值的完整清單,請參閱 eksctl 文件中的 AWS Outposts Support

  4. (選用) 部署範例應用程式以測試您的叢集和 Linux 節點。

AWS Management Console

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

  1. 下載最新版本的 AWS CloudFormation 範本。

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
  2. 開啟 AWS CloudFormation 主控台

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

  4. 針對 Specify template (指定範本),選取 Upload a template file (上傳範本檔案),然後選取 Choose file (選擇檔案)。選取在上一步驟中下載的 amazon-eks-nodegroup.yaml 檔案,然後選取 Next (下一步)。

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

    • 堆疊名稱:為您的 AWS CloudFormation 堆疊選擇堆疊名稱。例如,您可以呼叫它 al-nodes。此名稱僅能使用英數字元 (區分大小寫) 和連字號。它必須以英數字元開頭,且長度不可超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。

    • ClusterName:請輸入您叢集的名稱。如果此名稱與您的叢集名稱不相符,您的節點將無法加入叢集。

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

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

      1. 開啟 Amazon EKS 主控台

      2. 選擇叢集的名稱。

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

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

    • NodeGroupName:輸入節點群組的名稱。此名稱稍後可用來識別為您的節點建立的 Auto Scaling 節點群組。

    • NodeAutoScalingGroupMinSize:輸入節點 Auto Scaling 群組可以縮減的最低節點數。

    • NodeAutoScalingGroupDesiredCapacity:堆疊建立時,輸入欲擴展的所需節點數量。

    • NodeAutoScalingGroupMaxSize:輸入節點 Auto Scaling 群組可以擴增的最大節點數。

    • NodeInstanceType:選擇節點的執行個體類型。如果您的叢集在 AWS 雲端上執行,如需詳細資訊,請參閱選擇最佳的 Amazon EC2 節點執行個體類型。若您的叢集正於 Outpost 上執行,則您僅可選取 Outpost 上可用的執行個體類型。

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

      若要使用 Amazon EKS 最佳化加速 AMI,請將 amazon-linux-2 取代為 amazon-linux-2-gpu。若要使用 Amazon EKS 最佳化 Arm AMI,請將 amazon-linux-2 取代為 amazon-linux-2-arm64

      注意

      Amazon EKS 節點 AMIs 是以 Amazon Linux 為基礎。您可以在 Amazon Linux 安全中心選擇所需版本的索引標籤,來追蹤 Amazon Linux 的安全或隱私權事件。您也可以訂閱適用的 RSS 摘要。安全與隱私權事件包含問題的概觀、哪些套件受到影響,以及如何更新您的執行個體以修正問題。

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

    • NodeVolumeSize:為您的節點指定根磁碟區大小 (以 GiB 為單位)。

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

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

      注意

      如果您未在此處提供金鑰對, AWS CloudFormation 堆疊建立會失敗。

    • BootstrapArguments:您可將多個選用引數傳遞至節點。如需詳細資訊,請檢視 GitHub 上的 bootstrap script usage information (啟動程序指令碼使用資訊)。如果您要將節點新增至 AWS Outposts 上的 Amazon EKS 本機叢集 (其中 Kubernetes 控制平面執行個體在 AWS Outposts 上執行),且叢集沒有傳入和傳出網際網路連線 (也稱為私有叢集),則必須提供下列引導引數 (作為單行)。

      --b64-cluster-ca ${CLUSTER_CA} --apiserver-endpoint https://${APISERVER_ENDPOINT} --enable-local-outpost true --cluster-id ${CLUSTER_ID}

      若要擷取 Amazon CLUSTER_CAEKS 本機叢集CLUSTER_IDAPISERVER_ENDPOINT、 和 值,請執行下列 AWS CLI 命令。將 cluster-name 取代為您的叢集名稱,並將區域 (例如 us-east-1) 取代為您的叢集 AWS 區域。

      echo "CLUSTER_CA=$(aws eks describe-cluster --name cluster-name --region region --query cluster.certificateAuthority.data --output text)" echo "APISERVER_ENDPOINT=$(aws eks describe-cluster --name cluster-name --region region --query cluster.endpoint --output text)" echo "CLUSTER_ID=$(aws eks describe-cluster --name cluster-name --region region --query cluster.id --output text)"
    • DisableIMDSv1:預設情況下,每個節點都支援執行個體中繼資料服務版本 1 (IMDSv1) 和 IMDSv2。您可以停用 IMDSv1。若要防止節點群組中的未來節點和 Pod 使用 IMDSv1,請將 DisableIMDSv1 設為 true。如需 IMDS 的詳細資訊,請參閱設定執行個體中繼資料服務。如需在節點上限制存取的詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔

    • VpcId:輸入您建立的 VPC ID。選擇 VPC 之前,請檢閱 VPC 需求和考量事項。

    • 子網路:如果叢集位於 Outpost 上,則請至少在 VPC 中選擇一個私有子網路。在選擇子網路之前,請先檢閱子網路需求和注意事項。您可以看到哪些子網是私有子網,方法是從叢集的 Networking (聯網) 標籤打開每一個子網連結。

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

  7. 選取我確認 AWS CloudFormation 可能會建立 IAM 資源的左側核取方塊,然後選擇建立堆疊

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

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

步驟 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 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)

    如果節點無法加入叢集,請參閱節點無法加入叢集疑難排解 Amazon EKS 叢集和節點的問題無法將節點加入叢集,以及疑難排解 AWS Outposts 上的本機 Amazon EKS 叢集

  5. 安裝 Amazon EBS CSI 驅動程式。如需詳細資訊,請參閱 GitHub 上的 Installation (安裝)。在 Set up driver permission (設定驅動程式權限) 區段中,請務必依照 Using IAM instance profile (使用 IAM 執行個體設定檔) 選項指示操作。您必須使用 gp2 儲存類別。不支援gp3儲存體方案。

    若要在叢集上建立 gp2 儲存類別,請完成以下步驟。

    1. 執行下列命令以建立 gp2-storage-class.yaml 檔案。

      cat >gp2-storage-class.yaml <<EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp2 encrypted: "true" allowVolumeExpansion: true EOF
    2. 將清單檔案套用至叢集。

      kubectl apply -f gp2-storage-class.yaml
  6. (僅限 GPU 節點) 如果您選擇 GPU 執行個體類型和 Amazon EKS 最佳化加速 AMI,則必須將 Kubernetes 的 NVIDIA 裝置外掛程式套用為叢集上的 DaemonSet。在執行下列命令之前,將 vX.X.X 取代為所需的 NVIDIA/k8s-device-plugin 版本。

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

Step3:其他動作

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

  2. 若您的叢集部署在 Outpost 上,請跳過此步驟。如果您的叢集部署在 AWS 雲端上,則下列資訊為選用。如果 AmazonEKS_CNI_Policy 受管 IAM 政策連接至您的 Amazon EKS 節點 IAM 角色,建議您將其指派給您改為與 Kubernetes aws-node服務帳戶建立關聯的 IAM 角色。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA