

 **帮助改进此页面** 

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

# 创建一个 Amazon EKS 集群。
<a name="create-cluster"></a>

**注意**  
本主题旨在介绍创建未启用 EKS 自动模式的 EKS 集群。  
有关创建 EKS 自动模式集群的详细说明，请参阅[创建 Amazon EKS 自动模式集群](create-cluster-auto.md)。  
要学习使用 EKS 自动模式，请参阅[开始使用 Amazon EKS – EKS 自动模式](getting-started-automode.md)。

本主题概述了可用选项，并介绍了创建 Amazon EKS 集群时需要考虑的内容。如果需要创建将本地基础设施作为节点计算的集群，请参阅[创建具有混合节点的 Amazon EKS 集群](hybrid-nodes-cluster-create.md)。如果您是首次创建 Amazon EKS 集群，我们建议您按照 [开始使用 Amazon EKS](getting-started.md) 中的指南之一操作。这些指南可帮助您创建一个简单的默认集群，而无需扩展到所有可用选项。

## 先决条件
<a name="_prerequisites"></a>
+ 满足 [Amazon EKS 要求](network-reqs.md)的现有 VPC 和子网。在部署集群用于生产用途前，我们建议您彻底了解 VPC 和子网要求。如果您没有 VPC 和子网，则可以使用 [Amazon EKS 提供的 AWS CloudFormation 模板](creating-a-vpc.md)创建它们。
+ 您的设备或 AWS CloudShell 上安装了 `kubectl` 命令行工具。该版本可以与集群的 Kubernetes 版本相同，或者最多早于或晚于该版本一个次要版本。要安装或升级 `kubectl`，请参阅 [设置 `kubectl` 和 `eksctl`](install-kubectl.md)。
+ 在您的设备或 AWS CloudShell 上安装和配置 AWS 命令行界面（AWS CLI）的版本 `2.12.3` 或更高版本，或版本 `1.27.160` 或更高版本。要查看当前版本，请使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。`yum`、`apt-get` 或适用于 macOS 的 Homebrew 等软件包管理器通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本，请参阅《AWS 命令行界面用户指南》**中的[安装](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)和[使用 aws configure 快速配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新，请参阅《AWS CloudShell 用户指南》**中的[将 AWS CLI 安装到您的主目录](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。
+ 具有 `create` 和 `describe` Amazon EKS 集群权限的 [IAM 主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)。有关更多信息，请参阅[在 Outpost 上创建本地 Kubernetes 集群](security-iam-id-based-policy-examples.md#policy-create-local-cluster)和[列出或描述所有集群](security-iam-id-based-policy-examples.md#policy-example2)。

## 第 1 步：创建集群 IAM 角色
<a name="_step_1_create_cluster_iam_role"></a>

1. 如果您已经拥有集群 IAM 角色，或者您将使用 `eksctl` 创建集群，则可以跳过此步骤。默认情况下，`eksctl` 会为您创建角色。

1. 运行以下命令以创建 IAM 信任策略 JSON 文件。

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

1. 创建 Amazon EKS 集群 IAM 角色。如有必要，使用您在上一步中将文件写入到的计算机上的路径为 *eks-cluster-role-trust-policy.json* 添加前言。该命令将您在上一步中创建的信任策略与角色关联。要创建 IAM 角色，必须为正在创建角色的 [IAM 主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)分配 `iam:CreateRole` 操作（权限）。

   ```
   aws iam create-role --role-name myAmazonEKSClusterRole --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
   ```

1. 您可以分配 Amazon EKS 托管策略或创建自己的自定义策略。有关必须在自定义策略中使用的最低权限，请参阅 [Amazon EKS 集群 IAM 角色](cluster-iam-role.md)。

   将名为 [AmazonEKSClusterPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSClusterPolicy.html#AmazonEKSClusterPolicy-json) 的 Amazon EKS 托管 IAM 策略附加到角色。要将 IAM 策略附加到某个 [IAM 主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)，必须为附加该策略的主体分配以下 IAM 操作（权限）之一：`iam:AttachUserPolicy` 或 `iam:AttachRolePolicy`。

   ```
   aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name myAmazonEKSClusterRole
   ```

### 服务相关角色
<a name="_service_linked_role"></a>

Amazon EKS 会自动创建一个名为 `AWSServiceRoleForAmazonEKS` 的服务相关角色。

此角色是集群 IAM 角色的补充。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon EKS 直接相关。该角色允许 Amazon EKS 管理您账户中的集群。有关更多信息，请参阅 [使用 Amazon EKS 集群的角色](using-service-linked-roles-eks.md)。

您用来创建 EKS 集群的 IAM 身份必须具有创建该服务相关角色的权限。这包括 `iam:CreateServiceLinkedRole` 权限。

如果该服务相关角色尚不存在，并且您当前的 IAM 角色没有足够的权限创建该角色，则集群创建操作将会失败。

## 第 2 步：创建集群
<a name="_step_2_create_cluster"></a>

您可以使用以下工具来创建集群：
+  [`eksctl`](#step2-eksctl) 
+  [AWS 管理控制台](#step2-console) 
+  [AWS CLI](#step2-cli) 

### 创建集群 – eksctl
<a name="step2-eksctl"></a>

1. 您需要在设备或 AWS CloudShell 上安装 `0.215.0` 版或更高版本的 `eksctl` 命令行工具。要安装或更新 `eksctl`，请参阅 `eksctl` 文档中的 [Installation](https://eksctl.io/installation)。

1. 在默认 AWS 区域中，使用 Amazon EKS 默认 Kubernetes 版本创建 Amazon EKS `IPv4` 集群。在运行命令之前，进行以下替换：

1. 将 *region-code* 替换为您要在其中创建集群的 AWS 区域。

1. 将 *my-cluster* 替换为您的集群名称。名称只能包含字母数字字符（区分大小写）和连字符。该名称必须以字母数字字符开头，且不得超过 100 个字符。对于您在其中创建集群的 AWS 区域和 AWS 账户，该名称必须在其内具有唯一性。

1. 将 *1.35* 替换为任何 [Amazon EKS 支持的版本](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)。

1. 更改 `vpc-private-subnets` 的值以满足您的要求。您还可以添加其他 ID。您必须指定至少两个子网 ID。如果您想要指定公有子网，您可以将 `--vpc-private-subnets` 更改为 `--vpc-public-subnets`。公有子网有一个与互联网网关的路由相关联的路由，但私有子网没有关联的路由表。我们建议尽可能使用私有子网。

   您选择的子网必须符合 [Amazon EKS 子网要求](network-reqs.md#network-requirements-subnets)。在选择子网之前，我们建议您熟悉所有的 [Amazon EKS VPC 以及子网要求和注意事项](network-reqs.md)。

1. 运行如下命令：

   ```
   eksctl create cluster --name my-cluster --region region-code --version 1.35 --vpc-private-subnets subnet-ExampleID1,subnet-ExampleID2 --without-nodegroup
   ```

   集群预配置需要几分钟时间。在创建集群时，将显示几行输出。输出的最后一行类似于以下示例行。

   ```
   [✓]  EKS cluster "my-cluster" in "region-code" region is ready
   ```

1. 继续[第 3 步：更新 kubeconfig](#step3) 

#### 可选设置
<a name="_optional_settings"></a>

要查看在使用 `eksctl` 创建集群时可指定的大多数选项，请使用 `eksctl create cluster --help` 命令。要查看所有可用的选项，请使用 `config` 文件。有关更多信息，请参阅 `eksctl` 文档中的[使用配置文件](https://eksctl.io/usage/creating-and-managing-clusters/#using-config-files)和[配置文件架构](https://eksctl.io/usage/schema/)。您可以在 GitHub 上查找[配置文件示例](https://github.com/weaveworks/eksctl/tree/master/examples)。

以下是可选设置，如果需要，必须将这些设置添加到上一个命令中。您只能在创建集群时启用这些选项，而不能在创建集群后启用。如果您需要指定这些选项，则必须使用 [eksctl 配置文件](https://eksctl.io/usage/creating-and-managing-clusters/#using-config-files)创建集群，然后指定设置，而不是使用上一个命令。
+ 如果您想指定 Amazon EKS 分配给它创建的网络接口的一个或多个安全组，请指定 [securityGroup](https://eksctl.io/usage/schema/#vpc-securityGroup) 选项。

  无论您是否选择任何安全组，Amazon EKS 都会创建一个安全组，以实现集群和 VPC 之间的通信。Amazon EKS 将此安全组以及您选择的任何安全组与它创建的网络接口关联起来。有关 Amazon EKS 创建的集群安全组的更多信息，请参阅 [查看集群的 Amazon EKS 安全组要求](sec-group-reqs.md)。您可以修改 Amazon EKS 创建的集群安全组中的规则。
+ 如果您想指定 Kubernetes 从中分配服务 IP 地址的 `IPv4` 无类别域间路由块（CIDR），请指定 [serviceIPv4CIDR](https://eksctl.io/usage/schema/#kubernetesNetworkConfig-serviceIPv4CIDR) 选项。

  指定自己的范围有助于防止 Kubernetes 服务与对等或连接到 VPC 的其他网络之间发生冲突。使用 CIDR 表示法输入范围。例如：`10.2.0.0/16`。

  此 CIDR 块必须满足以下要求：
  + 处于以下范围之一：`10.0.0.0/8`、`172.16.0.0/12` 或 `192.168.0.0/16`。
  + 具有最小大小 `/24` 和最大大小 `/12`。
  + 与您的 Amazon EKS 资源的 VPC 范围不重叠。

    您只能在使用 `IPv4` 地址系列和创建集群时指定此选项。如果没有指定此选项，Kubernetes 会从 `10.100.0.0/16` 或 `172.20.0.0/16` CIDR 块分配服务 IP 地址。
+ 如果您要创建集群并希望集群将 `IPv6` 地址（而不是 `IPv4` 地址）分配到容器组（pod）和服务，请指定 [ipFamily](https://eksctl.io/usage/schema/#kubernetesNetworkConfig-ipFamily) 选项。

  默认情况下，Kubernetes 会将 `IPv4` 地址分配给容器组（pod）和服务。在决定使用 `IPv6` 系列前，请确保您熟悉 [VPC 要求和注意事项](network-reqs.md#network-requirements-vpc)、[子网要求和注意事项](network-reqs.md#network-requirements-subnets)、[查看集群的 Amazon EKS 安全组要求](sec-group-reqs.md) 和 [了解如何将 IPv6 地址分配给集群、容器组（pod）和服务](cni-ipv6.md) 主题中的所有考虑因素和要求。如果选择 `IPv6` 系列，则不同于可为其指定地址范围的 `IPv4` 系列，您无法指定从中分配 `IPv6` 服务地址的 Kubernetes 的地址范围。Kubernetes 从唯一的本地地址范围 (`fc00::/7`) 分配服务地址。

### 创建集群 – AWS 控制台
<a name="step2-console"></a>

1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 请选择 **Add cluster**（添加集群），然后选择 **Create**（创建）。

1. 在**配置选项**下，选择**自定义配置** 
   + 有关快速创建启用 EKS 自动模式的集群的信息，请参阅[使用 AWS 管理控制台创建 EKS 自动模式集群](automode-get-started-console.md)。

1. 在 **EKS 自动模式**下，将**使用 EKS 自动模式**切换为关闭。
   + 有关创建具有自定义配置的 EKS 自动模式集群的信息，请参阅[创建 Amazon EKS 自动模式集群](create-cluster-auto.md)。

1. 在 **Configure cluster**（配置集群）页面上，输入以下字段：
   +  **Name**（名称）– 集群的名称。名称只能包含字母数字字符（区分大小写）、连字符和下划线。该名称必须以字母数字字符开头，且不得超过 100 个字符。对于您在其中创建集群的 AWS 区域和 AWS 账户，该名称必须在其内具有唯一性。
   +  **集群 IAM 角色** – 选择您创建的 Amazon EKS 集群 IAM 角色，以允许 Kubernetes 控制面板来代表您管理 AWS 资源。
   +  **Kubernetes version（Kubernetes 版本）**– 要用于集群的 Kubernetes 的版本。建议选择最新版本，除非您需要早期版本。
   +  **支持类型** – 要为集群设置的 Kubernetes 版本策略。如果您希望集群仅根据标准支持版本运行，则可以选择**标准支持**。如果您希望集群在某个版本的标准支持终止时进入扩展支持，则可以选择**扩展支持**。如果您选择的 Kubernetes 版本当前处于延期支持状态，则无法选择标准支持选项。
   +  **Secrets encryption**（密钥加密）–（可选）选择此选项以使用 KMS 密钥启用 Kubernetes 密钥的密钥加密。您也可以在创建集群后启用此功能。在启用此功能之前，请确保您熟悉[在现有集群上使用 KMS 加密 Kubernetes 密钥](enable-kms.md)中的信息。
   +  **Tags（标签）**– （可选）向集群添加任何标签。有关更多信息，请参阅 [使用标签整理 Amazon EKS 资源](eks-using-tags.md)。
   +  **ARC 可用区转移** –（可选）您可以使用 Route53 应用程序恢复控制器来缓解受损的可用区。有关更多信息，请参阅 [了解 Amazon EKS 中的 Amazon 应用程序恢复控制器（ARC）可用区转移](zone-shift.md)。

1. 在“配置集群”页面的**集群访问权限**部分中，输入以下字段：
   +  **引导集群管理员访问权限** – 集群创建者自动成为 Kubernetes 管理员。如果要禁用此功能，请选择**不允许集群管理员访问权限**。
   +  **集群身份验证模式** – 确定您希望如何向 IAM 用户和角色授予 Kubernetes API 访问权限。有关更多信息，请参阅 [设置集群身份验证模式](grant-k8s-access.md#set-cam)。

     完成此页面后，请选择**下一步**。

1. 在 **Specify networking (指定联网)** 页面上，为以下字段选择值：
   +  **VPC** – 选择符合 [Amazon EKS VPC 要求](network-reqs.md#network-requirements-vpc)的现有 VPC 以在其中创建集群。在选择 VPC 之前，我们建议您熟悉 [查看 Amazon EKS 对 VPC 和子网的联网要求](network-reqs.md) 中的所有要求和考虑因素。集群创建后，您无法更改要使用的 VPC。如果没有列出任何 VPC，则需要先创建一个。有关更多信息，请参阅 [为您的 Amazon EKS 集群创建 Amazon VPC](creating-a-vpc.md)。
   +  **Subnets**（子网）– 预设情况下，已预先选中在之前字段中指定的 VPC 中的所有可用子网。您必须至少选择两个子网。

     您选择的子网必须符合 [Amazon EKS 子网要求](network-reqs.md#network-requirements-subnets)。在选择子网之前，我们建议您熟悉所有的 [Amazon EKS VPC 以及子网要求和注意事项](network-reqs.md)。

      **Security groups**（安全组）–（可选）指定您希望 Amazon EKS 将之与其创建的网络接口关联的一个或多个安全组。

     无论您是否选择任何安全组，Amazon EKS 都会创建一个安全组，以实现集群和 VPC 之间的通信。Amazon EKS 将此安全组以及您选择的任何安全组与它创建的网络接口关联起来。有关 Amazon EKS 创建的集群安全组的更多信息，请参阅 [查看集群的 Amazon EKS 安全组要求](sec-group-reqs.md)。您可以修改 Amazon EKS 创建的集群安全组中的规则。
   +  **选择集群 IP 地址系列** - 您可以选择 **IPv4** 和 **IPv6**。

     默认情况下，Kubernetes 会将 `IPv4` 地址分配给容器组（pod）和服务。在决定使用 `IPv6` 系列前，请确保您熟悉 [VPC 要求和注意事项](network-reqs.md#network-requirements-vpc)、[子网要求和注意事项](network-reqs.md#network-requirements-subnets)、[查看集群的 Amazon EKS 安全组要求](sec-group-reqs.md)和 [了解如何将 IPv6 地址分配给集群、容器组（pod）和服务](cni-ipv6.md) 主题中的所有注意事项和要求。如果选择 `IPv6` 系列，则不同于可为其指定地址范围的 `IPv4` 系列，您无法指定从中分配 `IPv6` 服务地址的 Kubernetes 的地址范围。Kubernetes 从唯一的本地地址范围 (`fc00::/7`) 分配服务地址。
   + （可选）选择 **Configure Kubernetes Service IP address range**（配置 Kubernetes 服务 IP 地址范围），然后指定**服务 `IPv4` 范围**。

     指定自己的范围有助于防止 Kubernetes 服务与对等或连接到 VPC 的其他网络之间发生冲突。使用 CIDR 表示法输入范围。例如：`10.2.0.0/16`。

     此 CIDR 块必须满足以下要求：
     + 处于以下范围之一：`10.0.0.0/8`、`172.16.0.0/12` 或 `192.168.0.0/16`。
     + 具有最小大小 `/24` 和最大大小 `/12`。
     + 与您的 Amazon EKS 资源的 VPC 范围不重叠。

   您只能在使用 `IPv4` 地址系列和创建集群时指定此选项。如果没有指定此选项，Kubernetes 会从 `10.100.0.0/16` 或 `172.20.0.0/16` CIDR 块分配服务 IP 地址。
   + 对于**集群端点访问**中，选择一个选项。创建集群后，您可以更改此选项。在选择非默认选项之前，请务必熟悉这些选项及其影响。有关更多信息，请参阅 [集群 API 服务器端点](cluster-endpoint.md)。

     完成此页面后，请选择**下一步**。

1. （可选）在**配置可观测性**页面上，选择要开启的**指标**和**控制面板日志记录**选项。默认情况下，每种日志类型都处于关闭状态。
   + 有关 Prometheus 指标选项的更多信息，请参阅[第 1 步：开启 Prometheus 指标](prometheus.md#turn-on-prometheus-metrics)。
   + 有关**控制面板日志记录**选项的更多信息，请参阅 [将控制面板日志发送到 CloudWatch Logs](control-plane-logs.md)。

   完成此页面后，请选择**下一步**。

1. 在 **Select add-ons**（选择附加组件）页面上，选择要添加到集群的附加组件。预先选择特定附加组件。您可以根据需要选择任意数量的 **Amazon EKS 附加组件**和 **AWS Marketplace 附加组件**。如果未列出要安装的 **AWS Marketplace 附加组件**，则您可以单击页码编号查看更多页面结果或通过在搜索框中输入文本来搜索可用的 **AWS Marketplace 附加组件**。您也可以按**类别**、**供应商**或**定价模式**进行搜索，然后从搜索结果中选择附加组件。创建集群时，您可以查看、选择和安装任何支持 EKS 容器组身份的附加组件，详情请参阅[了解 EKS 容器组身份如何向容器组（pod）授予对 AWS 服务的访问权限](pod-identities.md)。

   完成此页面后，请选择**下一步**。

   系统会默认安装 Amazon VPC CNI、CoreDNS 和 kube-proxy 等插件。如果您禁用任何默认插件，则可能会影响您运行 Kubernetes 应用程序的能力。

1. 在**配置选定插件设置**页面上，选择要安装的版本。创建集群后，您可以随时更新到更高版本。

   对于支持 EKS 容器组身份的附加组件，您可以使用控制台自动生成角色，其中包含专门为该附加组件预先填充的名称、AWS 托管策略和信任策略。您可以重复使用现有角色或为支持的附加组件创建新角色。有关使用控制台为支持 EKS 容器组身份的附加组件创建角色的步骤，请参阅[创建附加组件（AWS 控制台）](creating-an-add-on.md#create_add_on_console)。如果附加组件不支持 EKS 容器组身份，则系统会显示一条消息，说明如何在创建集群后使用向导为服务账户（IRSA）创建 IAM 角色。

   创建集群后，您可以更新每个附加组件的配置。有关配置附加组件的更多信息，请参阅[更新 Amazon EKS 附加组件](updating-an-add-on.md)。完成此页面后，请选择**下一步**。

1. 在 **Review and create (审核和创建)** 页面上，审核您在之前页面输入或选择的信息。如果需要进行更改，请选择 **Edit**（编辑）。在您感到满意后，选择**创建**。**Status**（状态）字段在预置集群时显示 **CREATING**（正在创建）。
**注意**  
您可能会收到一个错误，指示请求中的可用区之一没有足够容量来创建 Amazon EKS 集群。如果发生这种情况，错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户中支持的可用区的子网创建集群。有关更多信息，请参阅 [容量不足](troubleshooting.md#ice)。

   集群预配置需要几分钟时间。

1. 继续[第 3 步：更新 kubeconfig](#step3) 

### 创建集群 – AWS CLI
<a name="step2-cli"></a>

1. 使用以下命令创建集群。在运行命令之前，进行以下替换：
   + 将 *region-code* 替换为您要在其中创建集群的 AWS 区域。
   + 将 *my-cluster* 替换为您的集群名称。名称只能包含字母数字字符（区分大小写）、连字符和下划线。该名称必须以字母数字字符开头，且不得超过 100 个字符。对于您在其中创建集群的 AWS 区域和 AWS 账户，该名称必须在其内具有唯一性。
   + 将 *1.35* 替换为任何 [Amazon EKS 支持的版本](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)。
   + 将 *111122223333* 替换为账户 ID，并将 *myAmazonEKSClusterRole* 替换为您的集群 IAM 角色的名称。
   + 将 `subnetIds` 的值替换为您自己的值。您还可以添加其他 ID。您必须指定至少两个子网 ID。

     您选择的子网必须符合 [Amazon EKS 子网要求](network-reqs.md#network-requirements-subnets)。在选择子网之前，我们建议您熟悉所有的 [Amazon EKS VPC 以及子网要求和注意事项](network-reqs.md)。
   + 如果您不想指定安全组 ID，请从命令中删除 `,securityGroupIds=sg-<ExampleID1>`。如果您想指定一个或多个安全组 ID，请将 `securityGroupIds` 的值替换为您自己的值。您还可以添加其他 ID。

     无论您是否选择任何安全组，Amazon EKS 都会创建一个安全组，以实现集群和 VPC 之间的通信。Amazon EKS 将此安全组以及您选择的任何安全组与它创建的网络接口关联起来。有关 Amazon EKS 创建的集群安全组的更多信息，请参阅 [查看集群的 Amazon EKS 安全组要求](sec-group-reqs.md)。您可以修改 Amazon EKS 创建的集群安全组中的规则。

     ```
     aws eks create-cluster --region region-code --name my-cluster --kubernetes-version 1.35 \
        --role-arn arn:aws:iam::111122223333:role/myAmazonEKSClusterRole \
        --resources-vpc-config subnetIds=subnet-ExampleID1,subnet-ExampleID2,securityGroupIds=sg-ExampleID1
     ```
**注意**  
您可能会收到一个错误，指示请求中的可用区之一没有足够容量来创建 Amazon EKS 集群。如果发生这种情况，错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户中支持的可用区的子网创建集群。有关更多信息，请参阅 [容量不足](troubleshooting.md#ice)。

     以下是可选设置，如果需要，必须将这些设置添加到上一个命令中。您只能在创建集群时启用这些选项，而不能在创建集群后启用。
   + 默认情况下，EKS 会在创建集群期间安装多个联网插件。这包括 Amazon VPC CNI、CoreDNS 和 kube-proxy 等。

     如果要禁用这些默认联网插件的安装，请使用以下参数。这可以用于 Cilium 等替代 CNI。有关更多信息，请参阅 [EKS API 参考](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html)。

      `aws eks create-cluster --no-bootstrap-self-managed-addons …​` 
   + 如果您想指定 Kubernetes 从中分配服务 ID 地址的 `IPv4` 无类别域间路由（CIDR）块，您必须通过将 `--kubernetes-network-config serviceIpv4Cidr=<cidr-block>` 添加到以下命令中来指定它。

     指定自己的范围有助于防止 Kubernetes 服务与对等或连接到 VPC 的其他网络之间发生冲突。使用 CIDR 表示法输入范围。例如：`10.2.0.0/16`。

     此 CIDR 块必须满足以下要求：
     + 处于以下范围之一：`10.0.0.0/8`、`172.16.0.0/12` 或 `192.168.0.0/16`。
     + 具有最小大小 `/24` 和最大大小 `/12`。
     + 与您的 Amazon EKS 资源的 VPC 范围不重叠。

   您只能在使用 `IPv4` 地址系列和创建集群时指定此选项。如果没有指定此选项，Kubernetes 会从 `10.100.0.0/16` 或 `172.20.0.0/16` CIDR 块分配服务 IP 地址。
   + 如果您创建集群并希望集群分配 `IPv6` 地址而不是 `IPv4` 地址给容器组（pod）和服务，请将 `--kubernetes-network-config ipFamily=ipv6` 添加到以下命令。

     默认情况下，Kubernetes 会将 `IPv4` 地址分配给容器组（pod）和服务。在决定使用 `IPv6` 系列前，请确保您熟悉 [VPC 要求和注意事项](network-reqs.md#network-requirements-vpc)、[子网要求和注意事项](network-reqs.md#network-requirements-subnets)、[查看集群的 Amazon EKS 安全组要求](sec-group-reqs.md)和 [了解如何将 IPv6 地址分配给集群、容器组（pod）和服务](cni-ipv6.md) 主题中的所有注意事项和要求。如果选择 `IPv6` 系列，则不同于可为其指定地址范围的 `IPv4` 系列，您无法指定从中分配 `IPv6` 服务地址的 Kubernetes 的地址范围。Kubernetes 从唯一的本地地址范围 (`fc00::/7`) 分配服务地址。

1. 预置集群需要几分钟时间。可使用以下命令查询集群的状态。

   ```
   aws eks describe-cluster --region region-code --name my-cluster --query "cluster.status"
   ```

   在返回的输出为 `ACTIVE` 之前，请勿继续执行下一步。

1. 继续[第 3 步：更新 kubeconfig](#step3) 

## 第 3 步：更新 kubeconfig
<a name="step3"></a>

1. 如果您使用 `eksctl` 创建了集群，则可以跳过此步骤。这是因为 `eksctl` 已经为您完成了此步骤。通过向 `kubectl` `config` 文件添加新上下文来启用 `kubectl` 与您的集群通信。有关如何创建和更新文件的更多信息，请参阅 [通过创建 kubeconfig 文件将 kubectl 连接到 EKS 集群](create-kubeconfig.md)。

   ```
   aws eks update-kubeconfig --region region-code --name my-cluster
   ```

   示例输出如下。

   ```
   Added new context arn:aws:eks:region-code:111122223333:cluster/my-cluster to /home/username/.kube/config
   ```

1. 通过运行以下命令以确认与集群的通信。

   ```
   kubectl get svc
   ```

   示例输出如下。

   ```
   NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
   kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   28h
   ```

## 第 4 步：集群设置
<a name="_step_4_cluster_setup"></a>

1. （推荐）要使用某些 Amazon EKS 附加组件，或启用个别 Kubernetes 工作负载以具有特定 AWS Identity and Access Management（IAM）权限，请为集群[创建一个 IAM OpenID Connect（OIDC）提供者](enable-iam-roles-for-service-accounts.md)。您只需为集群创建一次 IAM OIDC 提供程序。要了解有关 Amazon EKS 附加组件的详情，请参阅 [Amazon EKS 附加组件](eks-add-ons.md)。要了解有关将特定 IAM 权限分配给工作负载的详情，请参阅 [服务账户的 IAM 角色](iam-roles-for-service-accounts.md)。

1. （推荐）在将 Amazon EC2 节点部署到集群之前，为适用于 Kubernetes 的 Amazon VPC CNI 插件配置集群。默认情况下，该插件随集群一起安装。当您将 Amazon EC2 节点添加到集群时，插件将自动部署到您添加的每个 Amazon EC2 节点上。该插件要求您将以下 IAM 策略之一附加到 IAM 角色。如果集群使用 `IPv4` 系列，请使用 [AmazonEKS\$1CNI\$1Policy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html) 托管 IAM 策略。如果您的集群使用 `IPv6` 系列，请使用[您创建的 IAM 策略](cni-iam-role.md#cni-iam-role-create-ipv6-policy)。

   您将策略附加到的 IAM 角色可以是节点 IAM 角色，也可以是仅用于插件的专用角色。我们建议将策略附加到此角色。有关创建角色的更多信息，请参阅[配置 Amazon VPC CNI 插件以使用 IRSA](cni-iam-role.md)或 [Amazon EKS 节点 IAM 角色](create-node-role.md)。

1. 如果您使用 AWS 管理控制台 部署了集群，则可以跳过此步骤。默认情况下，AWS 管理控制台 会部署适用于 Kubernetes 的 Amazon VPC CNI 插件、CoreDNS 和 `kube-proxy` Amazon EKS 附加组件。

   如果使用 `eksctl` 或 AWS CLI 部署集群，则系统将部署适用于 Kubernetes 的 Amazon VPC CNI 插件、CoreDNS 和 `kube-proxy` 自主管理型附加组件。您可以将使用集群部署的适用于 Kubernetes 的 Amazon VPC CNI 插件、CoreDNS 和 `kube-proxy` 自主管理型附加组件迁移到 Amazon EKS 附加组件。有关更多信息，请参阅 [Amazon EKS 附加组件](eks-add-ons.md)。

1. （可选）如果您尚未执行此操作，可以为集群启用 Prometheus 指标。有关更多信息，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的[创建抓取程序](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-create)。

1. 如果您计划将工作负载部署到使用 Amazon EBS 卷的集群，则在部署工作负载之前，您必须将 [Amazon EBS CSI](ebs-csi.md) 安装到您的集群。

## 后续步骤
<a name="_next_steps"></a>
+ 创建集群的 [IAM 主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)是唯一可以访问集群的主体。[向其它 IAM 主体授予权限](grant-k8s-access.md)，以便它们可以访问您的集群。
+ 如果创建集群的 IAM 主体仅具有先决条件中引用的最低 IAM 权限，则您可能想要为该主体添加额外的 Amazon EKS 权限。有关向 IAM 主体授予 Amazon EKS 权限的更多信息，请参阅[适用于 Amazon EKS 的身份和访问管理](security-iam.md)。
+ 如果您希望创建集群的 IAM 主体或任何其他主体在 Amazon EKS 控制台中查看 Kubernetes 资源，请向实体授予[所需权限](view-kubernetes-resources.md#view-kubernetes-resources-permissions)。
+ 如果您希望节点和 IAM 主体从 VPC 内访问您的集群，请为集群启用私有端点。默认情况下，将启用公有端点。如需要，可以在启用私有端点后禁用公有端点。有关更多信息，请参阅 [集群 API 服务器端点](cluster-endpoint.md)。
+  [为集群启用密钥加密](enable-kms.md)。
+  [为集群配置日志记录](control-plane-logs.md)。
+  [将节点添加到集群](eks-compute.md)。