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

创建 Amazon EKS 集群

本主题说明如何创建 Amazon EKS 集群。如果您是首次创建 Amazon EKS 集群,建议您按照我们的 开始使用 Amazon EKS 指南之一操作。指南提供了使用节点创建 Amazon EKS 集群的完整的端到端演练。

要连接外部 Kubernetes 集群以在 Amazon EKS 中查看,请参阅 Amazon EKS Connector

重要

创建 Amazon EKS 集群后,创建集群的 IAM 实体(用户或角色)将作为管理员(具有 system:masters 权限)添加到 Kubernetes RBAC 授权表。最初,仅该 IAM 用户可以使用 kubectl 调用 Kubernetes API 服务器。有关更多信息,请参阅 让 IAM 用户和角色有权访问您的集群。如果使用控制台创建集群,则必须确保在集群上运行 kubectl 命令时,相同的 IAM 用户凭证位于Amazon开发工具包凭证链中。

您可以使用 eksctl、Amazon Web Services Management Console 或 Amazon CLI 来创建集群。

eksctl

先决条件

计算机或 Amazon CloudShell 上已安装 0.84.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅安装 eksctl

在您的默认区域中使用 Amazon EKS 最新 Kubernetes 版本创建 Amazon EKS IPv4 集群。如果要创建 IPv6 集群,则必须使用配置文件部署集群。有关示例,请参阅 部署 IPv6 集群和节点。将 example-values 替换为您自己的值。您可以将 1.21 替换为任何受支持的版本。集群名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 128 个字符。

eksctl create cluster \ --name my-cluster \ --version 1.21 \ --without-nodegroup

(可选)将 --with-oidc 标志添加到上一条命令,以便为集群自动创建一个 Amazon Identity and Access Management (IAM) OIDC 提供程序。通过创建 OIDC 提供程序,可以使一些 Amazon EKS 附加组件或您自己的个人 Kubernetes 工作负载具有特定的 Amazon Identity and Access Management (IAM) 权限。您只需为集群创建一次 IAM OIDC 提供程序。要了解有关 Amazon EKS 附加组件的详情,请参阅 Amazon EKS 附加组件。要了解有关将特定 IAM 权限分配给工作负载的详情,请参阅 技术概览

提示

要查看在使用 eksctl 创建集群时可指定的大多数选项,请使用 eksctl create cluster --help 命令。要查看所有选项,您可以使用配置文件。有关更多信息,请参阅 eksctl 文档中的使用配置文件配置文件架构。您可以在 GitHub 上查找配置文件示例

重要

如果您计划在部署集群后在 Amazon Outposts、Amazon Wavelength 或 Amazon Local Zones 中部署自托管节点,则必须拥有符合 Amazon EKS 要求的现有 VPC,并将 --vpc-private-subnets 选项与上一个命令一起使用。您指定的子网 ID 不能是 Amazon Outposts、Amazon Wavelength 或 Amazon Local Zones 子网。有关使用现有 VPC 的更多信息,请参阅 eksctl 文档中的使用现有 VPC:其他自定义配置

警告

有一个 secretsEncryption 选项,需要 Amazon Key Management Service (Amazon KMS) 中的现有 Amazon KMS key。如果您使用带 secretsEncryption 选项的配置文件创建集群,并且您使用的 KMS 密钥会被删除,则无法恢复集群。如果启用密钥加密,将使用您选择的 KMS 密钥对 Kubernetes 密钥加密。KMS 密钥必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 KMS 密钥,则用户必须具有对 KMS 密钥的访问权限。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的允许其他账户中的用户使用 KMS 密钥

预设情况下,create-key 命令会创建一个具有密钥策略的对称密钥,该密钥策略向账户的根管理员授予对 Amazon KMS 操作和资源的访问权限。有关更多信息,请参阅创建密钥。如果要缩小权限的范围,请确保允许对将调用 create-cluster API 的委托人的策略执行 kms:DescribeKeykms:CreateGrant 操作。Amazon EKS 不支持策略条件 kms:GrantIsForAWSResource。如果此操作位于 KMS 密钥策略语句中,则将无法创建集群。

集群预配置需要几分钟时间。在集群创建过程中,您将看到几行输出。输出的最后一行类似于以下示例行。

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

创建集群后,您可以将随集群一起部署的 Amazon VPC CNI、CoreDNS 和 kube-proxy 自行管理附加组件迁移到 Amazon EKS 附加组件。有关更多信息,请参阅 Amazon EKS 附加组件

Amazon Web Services Management Console

先决条件

使用控制台创建集群

  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 选择创建集群

  3. Configure cluster (配置集群) 页面上,填写以下字段:

    • Name(名称)– 集群的唯一名称。

    • Kubernetes version(Kubernetes 版本)– 要用于集群的 Kubernetes 的版本。

    • Cluster Service Role(集群服务角色)– 选择 Amazon EKS 集群角色以允许 Kubernetes 控制层面来代表您管理Amazon资源。有关更多信息,请参阅先决条件

    • Secrets encryption(密钥加密):(可选)选择此选项以使用 KMS 密钥启用 Kubernetes 密钥的密钥加密。KMS 密钥必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 KMS 密钥,则用户必须具有对 KMS 密钥的访问权限。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的允许其他账户中的用户使用 KMS 密钥

      如果未列出任何密钥,则必须先创建一个密钥。有关更多信息,请参阅创建密钥

      注意

      预设情况下,create-key 命令会创建一个具有密钥策略的对称密钥,该密钥策略向账户的根管理员授予对 Amazon KMS 操作和资源的访问权限。有关更多信息,请参阅创建密钥。如果要缩小权限的范围,请确保允许对将调用 create-cluster API 的委托人的策略执行 kms:DescribeKeykms:CreateGrant 操作。

      Amazon EKS 不支持策略条件 kms:GrantIsForAWSResource。如果此操作位于 KMS 密钥策略语句中,则将无法创建集群。

      警告

      删除 KMS 密钥会将集群永久性置于降级状态。如果计划删除用于创建集群的任何 KMS 密钥,请在删除前确认这是预期操作。删除 KMS 密钥后,将无法恢复集群。有关更多信息,请参阅删除 Amazon KMS 密钥.。

    • Tags(标签)– (可选)向集群添加任何标签。有关更多信息,请参阅 为您的 Amazon EKS 资源添加标签

  4. 选择 Next(下一步)。

  5. Specify networking (指定联网) 页面上,为以下字段选择值:

    • VPC – 选择要用于集群的现有 VPC。如果没有列出任何 VPC,则需要先创建一个。有关更多信息,请参阅先决条件

    • 子网 – 预设情况下,已预先选中在之前字段中指定的 VPC 中的可用子网。取消选择不希望托管集群资源的任何子网,例如工作线程节点或负载均衡器。您的子网必须满足 Amazon EKS 集群的要求。有关更多信息,请参阅 集群 VPC 和子网注意事项

      重要
      • 如果您选择在 2020 年 3 月 26 日之前使用任一 Amazon EKS Amazon CloudFormation VPC 模板创建的子网,请注意于 2020 年 3 月 26 日引入的原定设置更改。有关更多信息,请参阅 为 Amazon EKS 集群创建 VPC

      • 不要选择 Amazon Outposts、Amazon Wavelength 或者 Amazon Local Zones 中的子网。如果您计划在部署集群后在 Amazon Outposts、Amazon Wavelength 或 Amazon Local Zones 子网中部署自我管理的节点,则请确保您所选的 VPC 中具有或可以在其中创建 Outposts 子网。

      安全组 – 您创建 VPC 时在 Amazon CloudFormation 输出中生成的 SecurityGroups 值。此安全组的下拉名称中有 ControlPlaneSecurityGroup

      重要

      节点 Amazon CloudFormation 模板会修改您在此处指定的安全组,因此 Amazon EKS 强烈建议您对每个集群控制层面使用专用安全组(每个集群一个). 如果与其他资源共享此安全组,您可以阻止或中断与这些资源的连接。

    • Choose cluster IP address family(选择集群 IP 地址系列)- 如果您选择的集群版本为 1.20 版或更早版本,则仅 IPv4 选项可用。如果您选择的集群版本为 1.21 版或更高版本,则您可以选择 Kubernetes 将 IPv4 还是 IPv6 地址分配给容器和服务。集群创建后,您无法更改此选项。如果您选择 IPv6,则无法选择 Configure Kubernetes Service IP address range(配置 Kubernetes 服务 IP 地址范围)选项。Kubernetes 从唯一的本地地址范围 (fc00::/7) 分配服务地址。您无法指定自定义地址范围。

    • (可选)如果要指定 Kubernetes 从其分配服务 IP 地址的 CIDR 块,请选择 Configure Kubernetes Service IP address range(配置 Kubernetes 服务 IP 地址范围)并指定 Service IPv4 range(IPv4 服务范围)。此 CIDR 块必须满足以下要求:

      • 在下列地址范围之一内:10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16。

      • 介于 /24 和 /12 之间。

      • 与 VPC 中指定的任何 CIDR 块不重叠。

      我们建议您指定一个与对等或连接到 VPC 的任何其他网络不重叠的 CIDR 块。如果不指定 CIDR 块,Kubernetes 会分配 10.100.0.0/16 或 172.20.0.0/16 CIDR 块中的服务 IP 地址。

      重要

      您只能在创建集群时指定自定义 CIDR 块,并且在创建集群后,无法更改此值。

    • 对于 Cluster endpoint access(集群端点访问)– 选择以下选项之一:

      • Public(公有)– 仅允许对集群的 Kubernetes API 服务器端点进行公有访问。来自集群 VPC 外部的 Kubernetes API 请求将使用公有终端节点。预设情况下,允许从任何源 IP 地址访问。您可以选择限制对一个或多个 CIDR 范围(如 192.168.0.0/16)的访问,例如,通过选择 Advanced settings (高级设置),然后选择 Add source (添加源)

      • Private(私有)– 仅允许对集群的 Kubernetes API 服务器端点进行私有访问。源自集群的 VPC 内的 Kubernetes API 请求将使用私有 VPC 终端节点。

        重要

        如果您创建了没有出站 Internet 访问的 VPC,则您必须启用私有访问。

      • Public and private(公有和私有)– 启用公有和私有访问。

      有关以前选项的更多信息,请参阅修改集群终端节点访问

  6. 您可以接受 Networking add-ons(联网附加组件)部分的默认值,安装默认版本的 Amazon VPC CNICoreDNSkube-proxy Amazon EKS 附加组件,或者也可以选择其他版本。如果您不需要任何附加组件的功能,则可以在创建集群后将其删除。如果您需要自行管理任何这些附加组件的 Amazon EKS 管理设置,则可在集群创建后删除附加组件的 Amazon EKS 管理。有关更多信息,请参阅 Amazon EKS 附加组件

    重要

    Amazon VPC CNI 附加组件配置为使用分配给 Amazon EKS 节点 IAM 角色 的 IAM 权限。创建集群后,但在将任何 Amazon EC2 节点部署到集群前,您必须确保 AmazonEKS_CNI_Policy 托管 IAM 策略(集群使用 IPv4 时)或 AmazonEKS_CNI_IPv6_Policy IAM 策略(集群使用 IPv6 时您自行创建)附加到节点 IAM 角色,或附加到与 Kubernetes 服务账户关联的其他角色(附加组件以该身份运行)。我们建议您参阅 配置 Amazon VPC CNI 插件以将 IAM 角色用于服务账户 中的说明,将策略分配给与节点 IAM 角色不同的 IAM 角色。创建集群和 IAM 角色后,您可以更新附加组件以使用您创建的 IAM 角色。

  7. 选择 Next(下一步)。

  8. Configure logging (配置日志记录) 页面上,您可以选择要启用的日志类型,此操作是可选的。预设情况下,每个日志类型均为已禁用。有关更多信息,请参阅 Amazon EKS 控制层面日志记录

  9. 选择 Next(下一步)。

  10. Review and create (审核和创建) 页面上,审核您在之前页面输入或选择的信息。如果需要对任何选择进行更改,请选择 Edit (编辑)。对设置满意后,选择 Create (创建)Status (状态) 字段显示 CREATING (正在创建),直至集群配置过程完成。

    注意

    您可能会收到一个错误,指示请求中的可用区之一没有足够容量来创建 Amazon EKS 集群。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户中支持的可用区的子网创建集群。有关更多信息,请参阅 容量不足

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

  11. 按照 为 Amazon EKS 创建 kubeconfig 中的程序操作,启用与新集群之间的通信。

  12. (可选)要使用某些 Amazon EKS 附加组件,或启用个别 Kubernetes 工作负载以具有特定 Amazon Identity and Access Management (IAM) 权限,您需要为集群创建一个 OpenID Connect (OIDC) 提供程序。要为集群创建 IAM OIDC 提供程序,请参阅 为集群创建 IAM OIDC 提供商。您只需为集群创建一次 IAM OIDC 提供程序。要了解有关 Amazon EKS 附加组件的详情,请参阅 Amazon EKS 附加组件。要了解有关将特定 IAM 权限分配给工作负载的详情,请参阅 技术概览

  13. 如果您要将 Amazon EC2 节点部署到集群,则必须将以下策略之一附加到集群 IAM 角色或您专门为 Amazon VPC CNI 附加组件创建的 IAM 角色(此选项需要在上一步中选择)。有关创建角色和配置附加组件以使用该角色的更多信息,请参阅以下内容 配置 Amazon VPC CNI 插件以将 IAM 角色用于服务账户

    • AmazonEKS_CNI_Policy IAM 托管策略,如果您使用 IPv4 系列创建 1.20 版或更早版本,或者 1.21 版或更高版本的集群。

    • 您创建的 IAM 策略,如果您使用 IPv6 系列创建 1.21 版或更高版本的集群。

  14. (可选)将 VPC CNI 附加组件配置为使用自己的 IAM 角色。此选项需要在上一步中创建 IAM OIDC 提供程序,并需要您在上一步中专门为附加组件创建 IAM 角色。有关更多信息,请参阅 更新 Amazon VPC CNI Amazon EKS 附加组件

Amazon CLI

先决条件

使用 Amazon CLI 创建集群

  1. 使用以下命令创建集群。替换您在 Amazon EKS 集群 IAM 角色 中创建的 Amazon EKS 集群 IAM 角色的 Amazon Resource Name (ARN) 以及您在 为 Amazon EKS 集群创建 VPC 中创建的 VPC 的子网和安全组 ID。将 my-cluster 替换为集群名称,将 region-code 替换为支持的区域。您可以将 1.21 替换为任何受支持的版本

    对于 subnetIds,请不要指定 Amazon Wavelength 中的子网。如果您计划在部署集群后在 Amazon Wavelength 子网中部署自我管理的节点,则请确保您指定的 VPC 中具有或可以在其中创建子网。

    如果想要集群将 IPv6 地址(而不是 IPv4 地址)分配给容器和服务,请将 --kubernetes-network-config ipFamily=ipv6 添加到以下命令并指定 1.21 或更高版本用于 --kubernetes-version

    aws eks create-cluster \ --region region-code \ --name my-cluster \ --kubernetes-version 1.21 \ --role-arn arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-EXAMPLEBKZRQR \ --resources-vpc-config subnetIds=subnet-a9189fe2,subnet-50432629,securityGroupIds=sg-f5c54184
    注意

    如果 IAM 用户没有管理员特权,则必须为该用户明确添加权限以调用 Amazon EKS API 操作。有关更多信息,请参阅 Amazon EKS 基于身份的策略示例

    输出:

    { "cluster": { "name": "my-cluster", "arn": "arn:aws:eks:region-code:111122223333:cluster/my-cluster", "createdAt": 1527785885.159, "version": "1.21", "roleArn": "arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-AFNL4H8HB71F", "resourcesVpcConfig": { "subnetIds": [ "subnet-a9189fe2", "subnet-50432629" ], "securityGroupIds": [ "sg-f5c54184" ], "vpcId": "vpc-a54041dc", "endpointPublicAccess": true, "endpointPrivateAccess": false }, "status": "CREATING", "certificateAuthority": {} } }
    注意

    您可能会收到一个错误,指示请求中的可用区之一没有足够容量来创建 Amazon EKS 集群。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户中支持的可用区的子网创建集群。有关更多信息,请参阅 容量不足

    要加密 Kubernetes 密钥,请先使用 create-key 操作创建 KMS 密钥。

    MY_KEY_ARN=$(aws kms create-key --query KeyMetadata.Arn —-output text)
    注意

    默认情况下,create-key 命令将创建对称密钥来加密和解密数据。此密钥策略向账户的根用户管理员授予对 Amazon KMS 操作和资源的访问权限。有关更多信息,请参阅创建密钥。如果要缩小权限的范围,请确保允许对将调用 create-cluster API 的委托人的策略执行 kms:DescribeKeykms:CreateGrant 操作。

    Amazon EKS 不支持策略条件 kms:GrantIsForAWSResource。如果此操作位于 KMS 密钥策略语句中,则将无法创建集群。

    --encryption-config 命令添加 aws eks create-cluster 参数。只有在创建集群时,才能启用 Kubernetes 密钥的加密。

    --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"$MY_KEY_ARN"}}]'

    keyArn 成员可以包含您的 KMS 密钥的别名或 ARN。KMS 密钥必须

    • 对称

    • 能够加密和解密数据

    • 在与集群相同的区域中创建

    • 如果 KMS 密钥是在其他账户中创建的,则用户必须拥有对 KMS 密钥的访问权限。

    有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的允许其他账户中的用户使用 KMS 密钥

    警告

    删除 KMS 密钥会将集群永久性置于降级状态。如果计划删除用于创建集群的任何 KMS 密钥,请在删除前确认这是预期操作。删除 KMS 密钥后,将无法恢复集群。有关更多信息,请参阅删除 Amazon KMS 密钥.。

  2. 集群预配置需要几分钟时间。可使用以下命令查询集群的状态。如果集群状态为 ACTIVE,则可继续操作。

    aws eks describe-cluster \ --region region-code \ --name my-cluster \ --query "cluster.status"
  3. 按照 为 Amazon EKS 创建 kubeconfig 中的程序操作,启用与新集群之间的通信。

  4. (可选)要使用某些 Amazon EKS 附加组件,或启用个别 Kubernetes 工作负载以具有特定 Amazon Identity and Access Management (IAM) 权限,您需要为集群创建一个 OpenID Connect (OIDC) 提供程序。要为集群创建 IAM OIDC 提供程序,请参阅 为集群创建 IAM OIDC 提供商。您只需为集群创建一次 IAM OIDC 提供程序。要了解有关 Amazon EKS 附加组件的详情,请参阅 Amazon EKS 附加组件。要了解有关将特定 IAM 权限分配给工作负载的详情,请参阅 技术概览

  5. 如果您要将 Amazon EC2 节点部署到集群,则必须将以下策略之一附加到集群 IAM 角色或您专门为 Amazon VPC CNI 附加组件创建的 IAM 角色(此选项需要在上一步中选择)。有关创建角色和配置附加组件以使用该角色的更多信息,请参阅以下内容 配置 Amazon VPC CNI 插件以将 IAM 角色用于服务账户

    • AmazonEKS_CNI_Policy IAM 托管策略,如果您使用 IPv4 系列创建 1.20 版或更早版本,或者 1.21 版或更高版本的集群。

    • 您创建的 IAM 策略,如果您使用 IPv6 系列创建 1.21 版或更高版本的集群。

  6. (可选)将随集群一起部署的 Amazon VPC CNI、CoreDNS 和 kube-proxy 自行管理附加组件迁移到 Amazon EKS 附加组件。有关更多信息,请参阅 Amazon EKS 附加组件。将 Amazon EKS VPC CNI 附加组件配置为使用自己的 IAM 角色。此选项需要在上一步中创建 IAM OIDC 提供程序,并需要您在上一步中专门为附加组件创建 IAM 角色。有关更多信息,请参阅 更新 Amazon VPC CNI Amazon EKS 附加组件