使用 AWS CLI 建立 EKS 自動模式叢集 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

使用 AWS CLI 建立 EKS 自動模式叢集

EKS 自動模式叢集可自動執行運算、儲存和聯網的常規叢集管理任務。例如,EKS 自動模式叢集會自動檢測何時需要額外節點,並佈建新的 EC2 執行個體以滿足工作負載需求。

本主題將引導您使用 AWS CLI 建立新的 EKS 自動模式叢集,並可選擇性地部署範例工作負載。

先決條件

  • 已在裝置上安裝和設定 AWS 命令列介面 (AWS CLI) 的最新版本。若要檢查您目前的版本,請使用 aws --version。若要安裝最新版本,請參閱《AWS 命令列介面使用者指南》中的安裝與使用 aws configure 的快速組態設定

    • 透過充足 IAM 許可來登入 CLI,以建立包括 IAM 政策、IAM 角色和 EKS 叢集在內的 AWS 資源。

  • 在您的裝置上安裝 kubectl 命令列工具。AWS 建議您使用與 EKS 叢集的 Kubernetes 版本相同的 kubectl 版本。若要安裝或升級 kubectl,請參閱 設定 kubectl 和 eksctl

指定 VPC 子網路

Amazon EKS 自動模式會將節點部署到 VPC 子網路。建立 EKS 叢集時,您必須指定將部署節點的 VPC 子網路。您可以使用 AWS 帳戶中的預設 VPC 子網路,或為關鍵工作負載建立專用的 VPC。

使用 AWS CLI:

  1. 執行以下命令以列出預設 VPC 及其子網路:

    aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws ec2 describe-vpcs --query 'Vpcs[?IsDefault==`true`].VpcId' --output text)" --query 'Subnets[*].{ID:SubnetId,AZ:AvailabilityZone}' --output table
  2. 儲存輸出並記下子網路 ID

    輸出範例:

    ----------------------------------------
    |             DescribeSubnets          |
    ----------------------------------------
    |   SubnetId        |   AvailabilityZone  |
    |--------------------|---------------------|
    |   subnet-012345678 |   us-west-2a        |
    |   subnet-234567890 |   us-west-2b        |
    |   subnet-345678901 |   us-west-2c        |
    ----------------------------------------

EKS 自動模式叢集的 IAM 角色

叢集 IAM 角色

EKS 自動模式需要叢集 IAM 角色,才能在 AWS 帳戶中執行動作,如佈建新的 EC2 執行個體。您必須建立此角色,才能授予 EKS 必要的許可。AWS 建議將下列 AWS 受管政策連接至叢集 IAM 角色:

節點 IAM 角色

當您建立 EKS 自動模式叢集時,需要指定一個節點 IAM 角色。當 EKS 自動模式建立節點以處理待處理的工作負載時,每個新的 EC2 執行個體節點都會指派節點 IAM 角色。此角色允許節點與 EKS 通訊,但通常不會由在節點上執行的工作負載存取。

如果您想要將許可授予節點上執行的工作負載,請使用 EKS Pod 身分識別。如需詳細資訊,請參閱 了解 EKS Pod 身分識別如何授予 AWS 服務的 Pod 存取權

您必須建立此角色並附加以下 AWS 受管政策:

服務連結角色

EKS 自動模式還需要一個服務連結角色,該角色由 AWS 自動建立與設定。更多資訊請參閱 AWSServiceRoleForAmazonEKS

建立 EKS 自動模式叢集 IAM 角色

步驟 1:建立信任政策

建立信任政策,允許 Amazon EKS 服務擔任該角色。將政策儲存為 trust-policy.json

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }

步驟 2:建立 IAM 角色

使用信任政策建立叢集 IAM 角色:

aws iam create-role \
    --role-name AmazonEKSAutoClusterRole \
    --assume-role-policy-document file://trust-policy.json

步驟 3:記下角色 ARN

擷取並儲存新角色的 ARN,供後續步驟使用:

aws iam get-role --role-name AmazonEKSAutoClusterRole --query "Role.Arn" --output text

步驟 4:附加所需政策

將以下 AWS 受管政策附加到叢集 IAM 角色,以授予必要的許可:

AmazonEKSClusterPolicy

aws iam attach-role-policy \ --role-name AmazonEKSAutoClusterRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy

AmazonEKSComputePolicy

aws iam attach-role-policy \ --role-name AmazonEKSAutoClusterRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSComputePolicy

AmazonEKSBlockStoragePolicy

aws iam attach-role-policy \ --role-name AmazonEKSAutoClusterRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSBlockStoragePolicy

AmazonEKSLoadBalancingPolicy

aws iam attach-role-policy \ --role-name AmazonEKSAutoClusterRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSLoadBalancingPolicy

AmazonEKSNetworkingPolicy

aws iam attach-role-policy \ --role-name AmazonEKSAutoClusterRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSNetworkingPolicy

建立 EKS 自動模式節點 IAM 角色

步驟 1:建立信任政策

建立信任政策,允許 Amazon EKS 服務擔任該角色。將政策儲存為 node-trust-policy.json

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } ----[source,json,subs="verbatim,attributes"]

步驟 2:建立節點 IAM 角色

使用上一步中的 node-trust-policy.json 檔案來定義哪些實體可擔任該角色。執行下列命令以建立節點 IAM 角色:

aws iam create-role \
    --role-name AmazonEKSAutoNodeRole \
    --assume-role-policy-document file://node-trust-policy.json

步驟 3:記下角色 ARN

建立角色後,擷取並儲存節點 IAM 角色的 ARN。您在後續步驟中將需要此 ARN。使用以下命令來取得 ARN:

aws iam get-role --role-name AmazonEKSAutoNodeRole --query "Role.Arn" --output text

步驟 4:附加所需政策

將以下 AWS 受管政策附加到節點 IAM 角色,以提供必要的許可:

AmazonEKSWorkerNodeMinimalPolicy

aws iam attach-role-policy \ --role-name AmazonEKSAutoNodeRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodeMinimalPolicy

AmazonEC2ContainerRegistryPullOnly

aws iam attach-role-policy \ --role-name AmazonEKSAutoNodeRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly

建立 EKS 自動模式叢集

概觀

要使用 AWS CLI 建立 EKS 自動模式叢集,您將需要以下參數:

  • cluster-name:叢集的名稱。

  • k8s-version:Kubernetes 版本 (如 1.31)。

  • subnet-ids:先前步驟中識別的子網路 ID。

  • cluster-role-arn:叢集 IAM 角色的 ARN。

  • node-role-arn:節點 IAM 角色的 ARN。

預設叢集組態

在建立叢集之前,檢閱這些預設值與功能:

  • nodePools:EKS 自動模式包含通用與系統預設節點集區。進一步了解節點集區

注意:EKS 自動模式中的節點集區與 Amazon EKS 受管節點群組不同,但可以在同一叢集中共存。

  • computeConfig.enabled:自動化常規運算任務,例如建立與刪除 EC2 執行個體。

  • kubernetesNetworkConfig.elasticLoadBalancing.enabled:自動化負載平衡任務,包括建立與刪除 Elastic Load Balancer。

  • storageConfig.blockStorage.enabled:自動化儲存任務,如建立與刪除 Amazon EBS 磁碟區。

  • accessConfig.authenticationMode:需要 EKS 存取項目。深入了解 EKS 身分驗證模式

執行命令

使用下列命令建立叢集:

aws eks create-cluster \
  --region ${AWS_REGION} \
  --cli-input-json \
  "{
      \"name\": \"${CLUSTER_NAME}\",
      \"version\": \"${K8S_VERSION}\",
      \"roleArn\": \"${CLUSTER_ROLE_ARN}\",
      \"resourcesVpcConfig\": {
        \"subnetIds\": ${SUBNETS_JSON},
        \"endpointPublicAccess\": true,
        \"endpointPrivateAccess\": true
      },
      \"computeConfig\": {
        \"enabled\": true,
        \"nodeRoleArn\":\"${NODE_ROLE_ARN}\",
        \"nodePools\": [\"general-purpose\", \"system\"]
      },
      \"kubernetesNetworkConfig\": {
        \"elasticLoadBalancing\": {
          \"enabled\": true
        }
      },
      \"storageConfig\": {
        \"blockStorage\": {
          \"enabled\": true
        }
      },
      \"accessConfig\": {
        \"authenticationMode\": \"API\"
      }
    }

檢查叢集狀態

步驟 1:確認叢集建立

執行下列命令,以檢查您的叢集狀態。建立叢集通常需要約 15 分鐘的時間:

aws eks describe-cluster --name "${CLUSTER_NAME}" --output json

步驟 2:更新 kubeconfig

叢集準備就緒後,請更新本機 kubeconfig 檔案,以使 kubectl 與叢集通訊。此組態使用 AWS CLI 進行身分驗證。

aws eks update-kubeconfig --name "${CLUSTER_NAME}"

步驟 3:確認節點集區

使用以下命令列出叢集中的節點集區:

kubectl get nodepools

後續步驟