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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建 Amazon EKS 群集

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

重要

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

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

eksctl

Prerequisite

eksctl版本 0.54.0 或更高版本已安装。要安装或升级,请参阅eksctl 命令行实用程序

在您的默认区域中使用 Amazon EKS 最新 Kubernetes 版本创建集群。将替换为<example-values>(包括<>)与您自己的值。可以替换<1.20>使用任何格式支持的版本

eksctl create cluster \ --name <my-cluster> \ --version <1.20> \ --with-oidc \ --without-nodegroup
提示

要查看在使用 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,或者AmazonLocal Zones 展子网。有关使用现有 VPC 的更多信息,请参阅使用现有 VPC:其他自定义配置中的eksctl文档中)。

警告

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

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

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

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

创建 1.18 或更高版本的集群后,您可以迁移亚马逊 VPC CNI、CoreDNS 络和kube-proxy随集群一起部署的附加组件到 Amazon EKS 加载项。有关更多信息,请参阅 Amazon EKS 附加组件

Amazon Web Services Management Console

Prerequisites

使用控制台创建集群

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

  2. 选择 Create Cluster (创建集群)

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

    • 名称— 集群的独特名称。

    • Kubernetes 版本— 要用于集群的 Kubernetes 的版本。

    • Cluster 服务角色— 选择 Amazon EKS 集群角色以允许 Kubernetes 控制层面来管理Amazon资源代表您。有关更多信息,请参阅 Amazon EKS 群集 IAM 角色

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

      使用 Amazon KMS CMK 进行 Kubernetes 密钥加密需要 Kubernetes 版本 1.13 或更高版本。如果未列出任何密钥,则必须先创建一个密钥。有关更多信息,请参阅创建密钥

      注意

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

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

      警告

      删除 CMK 会将集群永久性置于降级状态。如果计划删除用于创建集群的任何 CMK,请在删除前确认这是预期操作。删除密钥后,将无法恢复集群。

    • 标签—(可选)将任意标签添加到您的集群。有关更多信息,请参阅 为您的亚马逊 EKS 资源添加标签

  4. 选择 Next (下一步)

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

    • VPC— 选择要用于集群的现有 VPC。如果没有列出,则需要先创建一个。有关更多信息,请参阅 为您的 Amazon EKS 集群创建 VPC

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

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

      • 不要在Amazon Outposts、Amazon Wavelength或者AmazonLocal Zones。如果您计划在Amazon Outposts、Amazon Wavelength或者Amazon部署集群后,Local Zones 子网,然后确保您在选择的 VPC 中具有或可以创建 Outposts 子网。

      安全组SecurityGroups值Amazon CloudFormation输出时生成的VPC。此安全组具有下拉列表名称中的 ControlPlaneSecurityGroup

      重要

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

    • (可选) 选择配置 Kubernetes 服务 IP 地址范围并指定IPv4 服务范围如果要指定哪个 CIDR 块 Kubernetes 从中分配服务 IP 地址。CIDR 块必须满足以下要求:

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

      • 介于 /24 和 /12 之间。

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

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

      重要

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

    • 适用于集群终端节点访问— 选择以下任一选项:

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

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

        重要

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

      • 公有和私有部门— 启用公有和私有访问。

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

  6. 如果您在上一页上选择 Kubernetes 版本 1.17 或更早版本,请跳到下一步。如果您选择了版本 1.18 或更高版本,则可以接受网络附加组件部分安装默认版本的AmazonVPC CNICoreDNS, 和kube-proxy亚马逊 EKS 加载项,或者您可以选择其他版本。如果您不需要任何加载项的功能,则可以在创建集群后将其删除。

    您只能将 Amazon EKS 附加组件与 1.18 或更高版本集群一起使用,因为 Amazon EKS 附加组件需要服务器端应用 Kubernetes 功能,该功能在 Kubernetes 1.18 之前无法使用。如果您为集群选择了不同的 Kubernetes 版本,则不会显示此选项。

    重要

    这些区域有:AmazonVPC CNI 附加组件配置为使用分配给亚马逊 EKS 节点 IAM 角色。创建集群后,但在将任何 Amazon EC2 节点部署到集群之前,您必须确保AmazonEKS_CNI_PolicyIAM 策略附加到节点 IAM 角色,或附加组件运行为的 Kubernetes 服务账户关联的其他角色。我们建议您将策略分配给与节点 IAM 角色不同的 IAM 角色,方法是完成配置 Amazon VPC CNI 插件以便为服务账户使用 IAM 角色。创建集群和 IAM 角色后,您可以更新附加组件以使用您创建的 IAM 角色。

  7. 选择 Next (下一步)

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

  9. 选择 Next (下一步)

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

    注意

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

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

  11. 按照所述的过程操作创建kubeconfigAmazon EKS以启用与新集群的通信。

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

  13. 如果您要将 Amazon EC2 节点部署到您的集群,则必须将AmazonEKS_CNI_PolicyIAM 托管策略适用于您的集群 IAM 角色或您专门为 Amazon VPC CNI 加载项创建的 IAM 角色。有关创建角色和配置附加组件以使用它的详细信息,请参阅配置 Amazon VPC CNI 插件以便为服务账户使用 IAM 角色

Amazon CLI

Prerequisites

使用 Amazon CLI 创建集群

  1. 使用以下命令创建集群。替换您在中创建的 Amazon EKS 集群 IAM 角色的 Amazon 资源名称 (ARN)Amazon EKS 群集 IAM 角色以及在中创建的 VPC 的子网和安全组 ID为您的 Amazon EKS 集群创建 VPC。Replace<my-cluster>(包括<>),并使用您的集群名称和<region-code>使用支持的区域。可以替换<1.20>使用任何格式支持的版本

    适用于subnetIds,则不要在Amazon Wavelength。如果您计划在Amazon Wavelength子网,然后确保您在指定的 VPC 中具有或可以创建子网。

    aws eks create-cluster \ --region <region-code> \ --name <my-cluster> \ --kubernetes-version <1.20> \ --role-arn <arn:aws-cn: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-cn:eks:<region-code>:<111122223333>:cluster/<my-cluster>", "createdAt": <1527785885.159>, "version": "<1.20>", "roleArn": "arn:aws-cn: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 集群的足够容量。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户中支持的可用区的子网创建集群。有关更多信息,请参阅 容量不足

    要使用 Amazon Key Management Service (Amazon KMS) 中的客户主密钥 (CMK) 加密 Kubernetes 密钥,请先使用 create-key 操作创建 CMK。

    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。如果此操作位于密钥策略语句中,则将无法创建集群。

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

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

    keyArn 成员可以包含您的 CMK 的别名或 ARN。CMK 必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 CMK,则用户必须具有对 CMK 的访问权限。有关更多信息,请参阅 。允许其他账户中的用户使用 CMK中的Amazon Key Management Service开发人员指南。使用 Amazon KMS CMK 进行 Kubernetes 密钥加密需要 Kubernetes 版本 1.13 或更高版本。

    警告

    删除 CMK 会将集群永久性置于降级状态。如果计划删除用于创建集群的任何 CMK,请在删除前确认这是预期操作。删除密钥后,将无法恢复集群。

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

    aws eks describe-cluster \ --region <region-code> \ --name <my-cluster> \ --query "cluster.status"
  3. 在完成集群配置后,使用以下命令检索 endpointcertificateAuthority.data 值。必须将这些值添加到 kubectl 配置才能与集群通信。

    1. 检索 endpoint

      aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.endpoint" --output text
    2. 检索 certificateAuthority.data

      aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.certificateAuthority.data" --output text
  4. 按照所述的过程操作创建kubeconfigAmazon EKS以启用与新集群的通信。

  5. (可选)要使用 Amazon EKS 加载项,或启用单个 Kubernetes 工作负载具有特定 IAM 权限,您需要为您的集群启用 OpenID Connect (OIDC) 提供程序。要为集群配置 OIDC 提供商,请参阅为您的集群创建 IAM OIDC 提供商。您只需为您的集群启用 OIDC 提供程序一次。要了解有关 Amazon EKS 附加组件的更多信息,请参阅Amazon EKS 附加组件。要了解有关将特定 IAM 权限分配给您的工作负载的更多信息,请参阅技术概览

  6. 如果您要将 Amazon EC2 节点部署到您的集群,则必须将AmazonEKS_CNI_PolicyIAM 托管策略适用于您的集群 IAM 角色或您专门为 Amazon VPC CNI 加载项创建的 IAM 角色。有关创建角色和配置附加组件以使用它的详细信息,请参阅配置 Amazon VPC CNI 插件以便为服务账户使用 IAM 角色

  7. (可选)如果您创建了 1.18 或更高版本的集群,您可以迁移亚马逊 VPC CNI、CoreDNS 和kube-proxy随集群一起部署的附加组件到 Amazon EKS 加载项。有关更多信息,请参阅 Amazon EKS 附加组件