使用 Amazon CLI 创建 EKS 自动模式集群 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

使用 Amazon CLI 创建 EKS 自动模式集群

EKS 自动模式集群可自动执行计算、存储和联网等方面的例行集群管理任务。例如,EKS 自动模式集群会自动检测何时需要增加节点,并相应预置新的 EC2 实例来满足工作负载的需求。

本主题将演示使用 Amazon CLI 创建新的 EKS 自动模式集群,以及(可选)部署示例工作负载的过程。

先决条件

  • 已在您的设备上安装并配置了最新版本的 Amazon 命令行界面(Amazon CLI)。要查看当前版本,请使用 aws --version。要安装最新版本,请参阅《Amazon 命令行界面用户指南》中的安装使用 aws configure 快速配置

    • 使用创建 Amazon 资源所需的充分 IAM 权限登录 CLI,包括 IAM 策略、IAM 角色和 EKS 集群等。

  • 已在您的设备上安装了 kubectl 命令行工具。Amazon 建议使用与 EKS 集群的 Kubernetes 版本相同的 kubectl 版本。要安装或升级 kubectl,请参阅设置 kubectl 和 eksctl

指定 VPC 子网

Amazon EKS 自动模式会将节点部署到 VPC 子网。创建 EKS 集群时,必须指定要部署节点的 VPC 子网。可以使用您 Amazon 账户中的默认 VPC 子网,也可以创建用于关键工作负载的专用 VPC。

使用 Amazon 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 角色才能在您的 Amazon 账户中执行操作,例如预置新的 EC2 实例。您必须创建此角色才能向 EKS 授予必要的权限。Amazon 建议将以下 Amazon 托管式策略附加到集群 IAM 角色:

节点 IAM 角色

创建 EKS 自动模式集群时,需要指定一个节点 IAM 角色。EKS 自动模式创建节点来处理待处理的工作负载时,将为每个新的 EC2 实例节点分配此节点 IAM 角色。此角色允许节点与 EKS 通信,但节点上运行的工作负载通常无法访问此角色。

要向在节点上运行的工作负载授予权限,请使用 EKS 容器组身份。有关更多信息,请参阅 了解 EKS 容器组身份如何向容器组(pod)授予对 Amazon 服务的访问权限

您必须创建此角色并附加以下 Amazon 托管式策略:

EKS 自动模式还需要一个将由 Amazon 自动创建和配置的服务相关角色。有关更多信息,请参阅 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 步:附加必需的策略

将以下 Amazon 托管式策略附加到集群 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"
    }
  ]
}

第 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 步:附加必需的策略

将以下 Amazon 托管式策略附加到节点 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 自动模式集群

概览

要使用 Amazon 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:自动执行负载均衡任务,包括创建和删除弹性负载均衡器。

  • 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 可以与集群通信。此配置使用 Amazon CLI 进行身份验证。

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

第 3 步:验证节点池

使用以下命令列出集群中的节点池:

kubectl get nodepools

后续步骤