

 **帮助改进此页面** 

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

# 创建启用 Amazon EKS 自动模式的集群
<a name="create-auto"></a>

本章介绍如何使用各种工具和界面创建启用自动模式的 Amazon EKS 集群。自动模式通过自动配置和管理集群的计算、联网和存储基础设施，来简化集群的创建。您将了解如何使用 AWS CLI、AWS 管理控制台或 eksctl 命令行工具创建自动模式集群。

**注意**  
EKS 自动模式需要使用 Kubernetes 版本 1.29 或更高版本。

根据需要选择偏好的工具：AWS 管理控制台提供了直观的界面，非常适合用来了解 EKS 自动模式功能和创建单个集群。AWS CLI 非常适合脚本化和自动化任务，尤其是在将集群创建集成到现有工作流或 CI/CD 管道时。eksctl CLI 提供了 Kubernetes 原生体验，建议熟悉 Kubernetes 工具并且希望使用合理的默认值来简化命令行操作的用户使用。

在开始操作之前，请确保您已安装并配置必要的先决条件，包括具有创建 EKS 集群的适当 IAM 权限。要了解如何安装 `kubectl`、`aws` 和 `eksctl` 等 CLI 工具，请参阅[进行设置以使用 Amazon EKS](setting-up.md)。

您可以使用 AWS CLI、AWS 管理控制台或 eksctl CLI 创建启用 Amazon EKS 自动模式的集群。

**Topics**
+ [使用 eksctl CLI 创建 EKS 自动模式集群](automode-get-started-eksctl.md)
+ [使用 AWS CLI 创建 EKS 自动模式集群](automode-get-started-cli.md)
+ [使用 AWS 管理控制台创建 EKS 自动模式集群](automode-get-started-console.md)

# 使用 eksctl CLI 创建 EKS 自动模式集群
<a name="automode-get-started-eksctl"></a>

此主题演示如何使用 eksctl 命令行界面（CLI）创建 Amazon EKS 自动模式集群。您可以通过运行单个 CLI 命令或应用 YAML 配置文件来创建自动模式集群。这两种方法提供的功能相同，不过 YAML 方法可以更精细地控制集群设置。

eksctl CLI 通过处理底层 AWS 资源的创建和配置，来简化创建和管理 EKS 自动模式集群的过程。在开始操作之前，请确保在本地计算机上配置了必要的 AWS 凭证和权限。本指南假设您熟悉 Amazon EKS 的基本概念，并且已经安装了必需的 CLI 工具。

**注意**  
您必须安装版本 `0.195.0` 或更高版本的 eksctl。有关更多信息，请参阅 GitHub 上的 [eksctl releases](https://github.com/eksctl-io/eksctl/releases)。

## 使用 CLI 命令创建 EKS 自动模式集群
<a name="_create_an_eks_auto_mode_cluster_with_a_cli_command"></a>

您必须已安装 `aws` 和 `eksctl` 工具。您必须以管理 AWS 资源所需的足够权限登录 AWS CLI，包括 EC2 实例、EC2 联网、EKS 集群和 IAM 角色等。有关更多信息，请参阅 [进行设置以使用 Amazon EKS](setting-up.md)。

运行以下命令以创建新的 EKS 自动模式集群

```
eksctl create cluster --name=<cluster-name> --enable-auto-mode
```

## 使用 YAML 文件创建 EKS 自动模式集群
<a name="_create_an_eks_auto_mode_cluster_with_a_yaml_file"></a>

您必须已安装 `aws` 和 `eksctl` 工具。您必须以管理 AWS 资源所需的足够权限登录 AWS CLI，包括 EC2 实例、EC2 联网、EKS 集群和 IAM 角色等。有关更多信息，请参阅 [进行设置以使用 Amazon EKS](setting-up.md)。

检查以下集群配置示例资源中的 EKS 自动模式配置选项。有关完整的 ClusterConfig 规范，请参阅 [eksctl 文档](https://eksctl.io/usage/creating-and-managing-clusters/)。

 AWS 建议您启用 EKS 自动模式。如果这是您第一次创建 EKS 自动模式集群，请勿指定 `nodeRoleARN`，以便为 EKS 自动模式创建节点 IAM 角色。如果您的 AWS 账户中已有节点 IAM 角色，AWS 建议重复使用该角色。

 AWS 建议不要为 `nodePools` 指定任何值。EKS 自动模式将创建默认节点池。您可以使用 Kubernetes API 来创建其他节点池。

```
# cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: <cluster-name>
  region: <aws-region>

iam:
  # ARN of the Cluster IAM Role
  # optional, eksctl creates a new role if not supplied
  # suggested to use one Cluster IAM Role per account
  serviceRoleARN: <arn-cluster-iam-role>

autoModeConfig:
  # defaults to false
  enabled: boolean
  # optional, defaults to [general-purpose, system].
  # suggested to leave unspecified
  # To disable creation of nodePools, set it to the empty array ([]).
  nodePools: []string
  # optional, eksctl creates a new role if this is not supplied
  # and nodePools are present.
  nodeRoleARN: string
```

将 `ClusterConfig` 文件另存为 `cluster.yaml`，然后使用以下命令创建集群：

```
eksctl create cluster -f cluster.yaml
```

# 使用 AWS CLI 创建 EKS 自动模式集群
<a name="automode-get-started-cli"></a>

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

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

## 先决条件
<a name="_prerequisites"></a>
+ 已在您的设备上安装并配置了最新版本的 AWS 命令行界面（AWS CLI）。要查看当前版本，请使用 `aws --version`。要安装最新版本，请参阅《AWS 命令行界面用户指南》中的[安装](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)和[使用 aws configure 快速配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-configure-quickstart-config)。
  + 使用创建 AWS 资源所需的充分 IAM 权限登录 CLI，包括 IAM 策略、IAM 角色和 EKS 集群等。
+ 已在您的设备上安装了 kubectl 命令行工具。AWS 建议使用与 EKS 集群的 Kubernetes 版本相同的 kubectl 版本。要安装或升级 kubectl，请参阅[设置 `kubectl` 和 `eksctl`](install-kubectl.md)。

## 指定 VPC 子网
<a name="_specify_vpc_subnets"></a>

Amazon EKS 自动模式会将节点部署到 VPC 子网。创建 EKS 集群时，必须指定要部署节点的 VPC 子网。可以使用您 AWS 账户中的默认 VPC 子网，也可以创建用于关键工作负载的专用 VPC。
+  AWS 建议为集群创建专用 VPC。了解如何[为您的 Amazon EKS 集群创建 Amazon VPC](creating-a-vpc.md)。
+ EKS 控制台可帮助创建新的 VPC。了解如何[使用 AWS 管理控制台创建 EKS 自动模式集群](automode-get-started-console.md)。
+ 您也可以使用您 AWS 账户的默认 VPC。按照以下说明查找子网 ID。

### 查找默认 VPC 的子网 ID
<a name="auto-find-subnet"></a>

 **使用 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
   ```

1. 保存输出并记下**子网 ID**。

   示例输出：

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

## EKS 自动模式集群的 IAM 角色
<a name="auto-mode-create-roles"></a>

### 集群 IAM 角色
<a name="auto-roles-cluster-iam-role"></a>

EKS 自动模式需要集群 IAM 角色才能在您的 AWS 账户中执行操作，例如预置新的 EC2 实例。您必须创建此角色才能向 EKS 授予必要的权限。AWS 建议将以下 AWS 托管式策略附加到集群 IAM 角色：
+  [AmazonEKSComputePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSComputePolicy) 
+  [AmazonEKSBlockStoragePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSBlockStoragePolicy) 
+  [AmazonEKSLoadBalancingPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSLoadBalancingPolicy) 
+  [AmazonEKSNetworkingPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSNetworkingPolicy) 
+  [AmazonEKSClusterPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-amazoneksclusterpolicy) 

### 节点 IAM 角色
<a name="auto-roles-node-iam-role"></a>

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

要向在节点上运行的工作负载授予权限，请使用 EKS 容器组身份。有关更多信息，请参阅 [了解 EKS 容器组身份如何向容器组（pod）授予对 AWS 服务的访问权限](pod-identities.md)。

您必须创建此角色并附加以下 AWS 托管式策略：
+  [AmazonEKSWorkerNodeMinimalPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSWorkerNodeMinimalPolicy) 
+  [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonEC2ContainerRegistryPullOnly) 

EKS 自动模式还需要一个将由 AWS 自动创建和配置的服务相关角色。有关更多信息，请参阅 [AWSServiceRoleForAmazonEKS](using-service-linked-roles-eks.md)。

## 创建 EKS 自动模式集群 IAM 角色
<a name="_create_an_eks_auto_mode_cluster_iam_role"></a>

### 第 1 步：创建信任策略
<a name="_step_1_create_the_trust_policy"></a>

创建信任策略以允许 Amazon EKS 服务代入该角色。将策略另存为 `trust-policy.json`：

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

### 第 2 步：创建 IAM 角色
<a name="_step_2_create_the_iam_role"></a>

使用信任策略创建集群 IAM 角色：

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

### 第 3 步：记下角色 ARN
<a name="_step_3_note_the_role_arn"></a>

检索并保存新角色的 ARN，以便在后续步骤中使用：

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

### 第 4 步：附加必需的策略
<a name="_step_4_attach_required_policies"></a>

将以下 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 角色
<a name="_create_an_eks_auto_mode_node_iam_role"></a>

### 第 1 步：创建信任策略
<a name="_step_1_create_the_trust_policy_2"></a>

创建信任策略以允许 Amazon EKS 服务代入该角色。将策略另存为 `node-trust-policy.json`：

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

#### 第 2 步：创建节点 IAM 角色
<a name="_step_2_create_the_node_iam_role"></a>

使用上一步中的 **node-trust-policy.json** 文件来定义哪些实体可以代入该角色。运行以下命令以创建节点 IAM 角色：

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

#### 第 3 步：记下角色 ARN
<a name="_step_3_note_the_role_arn_2"></a>

创建角色后，检索并保存节点 IAM 角色的 ARN。在后续步骤中，您将需要此 ARN。使用以下命令来获取 ARN：

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

#### 第 4 步：附加必需的策略
<a name="_step_4_attach_required_policies_2"></a>

将以下 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 自动模式集群
<a name="_create_an_eks_auto_mode_cluster"></a>

### 概述
<a name="_overview"></a>

要使用 AWS CLI 创建 EKS 自动模式集群，您需要以下参数：
+  `cluster-name`：集群的名称。
+  `k8s-version`：Kubernetes 版本（例如 1.31）。
+  `subnet-ids`：之前步骤中确定的子网 ID。
+  `cluster-role-arn`：集群 IAM 角色的 ARN。
+  `node-role-arn`：节点 IAM 角色的 ARN。

#### 默认集群配置
<a name="_default_cluster_configurations"></a>

在创建集群之前，请检查以下默认值和功能：
+  `nodePools`：EKS 自动模式包含通用节点池和系统默认节点池。了解有关[节点池](create-node-pool.md)的更多信息。

 **注意：**EKS 自动模式下的节点池与 Amazon EKS 托管式节点组不同，但可以共存于同一个集群中。
+  `computeConfig.enabled`：自动执行例行计算任务，例如创建和删除 EC2 实例。
+  `kubernetesNetworkConfig.elasticLoadBalancing.enabled`：自动执行负载均衡任务，包括创建和删除弹性负载均衡器。
+  `storageConfig.blockStorage.enabled`：自动执行存储任务，例如创建和删除 Amazon EBS 卷。
+  `accessConfig.authenticationMode`：需要 EKS 访问条目。了解有关 [EKS 身份验证模式](grant-k8s-access.md)的更多信息。

#### 运行命令
<a name="_run_the_command"></a>

使用下面的命令创建集群：

```
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\"
      }
    }"
```

### 检查集群状态
<a name="_check_cluster_status"></a>

#### 第 1 步：验证集群创建
<a name="_step_1_verify_cluster_creation"></a>

运行以下命令来检查集群的状态。创建集群通常需要大约 15 分钟时间：

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

#### 第 2 步：更新 kubeconfig
<a name="_step_2_update_kubeconfig"></a>

集群准备就绪后，更新本地 kubeconfig 文件以便 `kubectl` 可以与集群通信。此配置使用 AWS CLI 进行身份验证。

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

#### 第 3 步：验证节点池
<a name="_step_3_verify_node_pools"></a>

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

```
kubectl get nodepools
```

## 后续步骤
<a name="_next_steps"></a>
+ 了解如何将[示例工作负载部署](automode-workload.md)到新的 EKS 自动模式集群。

# 使用 AWS 管理控制台创建 EKS 自动模式集群
<a name="automode-get-started-console"></a>

与其他选项相比，在 AWS 管理控制台中创建 EKS 自动模式集群所需的配置更少。EKS 与 AWS IAM 和 VPC 联网服务集成，可帮助您创建与 EKS 集群关联的资源。

您可以通过两种方式在控制台中创建集群：
+ 快速配置（使用 EKS 自动模式）
+ 自定义配置

在本主题中，您将了解如何使用快速配置选项创建 EKS 自动模式集群。

## 使用快速配置选项创建 EKS 自动模式集群
<a name="_create_an_eks_auto_mode_using_the_quick_configuration_option"></a>

您必须以管理 AWS 资源所需的足够权限登录 AWS 管理控制台，包括 EC2 实例、EC2 联网、EKS 集群和 IAM 角色等。

1. 导航到 EKS 控制台

1. 单击**创建集群** 

1. 确认已选中**快速配置**选项

1. 确定以下值，或使用测试集群的默认值。
   + 集群**名称** 
   + Kubernetes 版本

1. 选择集群 IAM 角色。如果您是首次创建 EKS 自动模式集群，请使用**创建推荐角色**选项。
   + 您也可以将 AWS 账户中的单个集群 IAM 角色重复用于所有 EKS 自动模式集群。
   + 集群 IAM 角色包含 EKS 自动模式管理资源（包括 EC2 实例、EBS 卷和 EC2 负载均衡器）所需的权限。
   + **创建推荐角色**选项会使用推荐值预填充所有字段。选择**下一步**，然后选择**创建**。此角色将使用建议的 `AmazonEKSAutoClusterRole` 名称。
   + 如果您最近创建了新角色，请使用**刷新**图标重新加载角色选择下拉列表。

1. 选择节点 IAM 角色。如果您是首次创建 EKS 自动模式集群，请使用**创建推荐角色**选项。
   + 您也可以将 AWS 账户中的单个节点 IAM 角色重复用于所有 EKS 自动模式集群。
   + 此节点 IAM 角色包含自动模式节点连接到集群所需的权限。此节点 IAM 角色必须包含检索容器的 ECR 映像的权限。
   + **创建推荐角色**选项会使用推荐值预填充所有字段。选择**下一步**，然后选择**创建**。此角色将使用建议的 `AmazonEKSAutoNodeRole` 名称。
   + 如果您最近创建了新角色，请使用**刷新**图标重新加载角色选择下拉列表。

1. 为您的 EKS 自动模式集群选择 VPC。选择**创建 VPC** 为 EKS 创建新的 VPC，也可以选择您之前为 EKS 创建的 VPC。
   + 如果您使用 VPC 控制台创建新的 VPC，AWS 建议您在每个可用区至少创建一个 NAT 网关。否则，您可以使用所有其他默认值。
   + 有关 IPv6 集群要求的更多信息和详情，请参阅[为您的 Amazon EKS 集群创建 Amazon VPC](creating-a-vpc.md)。

1. （可选）EKS 自动模式会自动填充所选 VPC 的私有子网。您可以移除不需要的子网。
   + EKS 会按照最佳实践自动选择 VPC 中的私有子网。您可以从 VPC 中选择额外的子网，例如公有子网。

1. （可选）选择**查看快速配置默认值**以查看新集群的所有配置值。该表提示某些值在集群创建后不可编辑。

1. 选择 **Create cluster（创建集群）**。请注意，完成集群创建可能需要 15 分钟时间。

## 后续步骤
<a name="_next_steps"></a>
+ 了解如何[将示例工作负载部署到新的 EKS 自动模式集群](sample-storage-workload.md) 