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

创建 Amazon EKS 集群。

本主题概述了可用选项,并介绍了创建 Amazon EKS 集群时需要考虑的内容。如果您需要在 Amazon Outpost 上创建集群,请参阅 在 Amazon Outposts 上创建本地 Amazon EKS 集群以实现高可用性。如果您是首次创建 Amazon EKS 集群,我们建议您按照 开始使用 Amazon EKS 中的指南之一操作。这些指南可帮助您创建一个简单的默认集群,而无需扩展到所有可用选项。

先决条件

  • 满足 Amazon EKS 要求的现有 VPC 和子网。在部署集群用于生产用途前,我们建议您彻底了解 VPC 和子网要求。如果您没有 VPC 和子网,则可以使用 Amazon EKS 提供的 Amazon CloudFormation 模板创建它们。

  • 您的设备或 Amazon CloudShell 上安装了 kubectl 命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为 1.29,则可以将 kubectl1.281.291.30 版本与之配合使用。要安装或升级 kubectl,请参阅 设置 kubectl 和 eksctl

  • 在您的设备或 Amazon CloudShell 上安装和配置 Amazon 命令行界面(Amazon CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 Amazon CLI 的最新版本落后几个版本。要安装最新版本,请参阅《Amazon 命令行界面用户指南》中的安装使用 aws configure 快速配置。Amazon CloudShell 中安装的 Amazon CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《Amazon CloudShell 用户指南》中的将 Amazon CLI 安装到您的主目录

  • 具有 createdescribe Amazon EKS 集群权限的 IAM 主体。有关更多信息,请参阅在 Outpost 上创建本地 Kubernetes 集群列出或描述所有集群

第 1 步:创建集群 IAM 角色

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

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

    cat >eks-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
  3. 创建 Amazon EKS 集群 IAM 角色。如有必要,使用您在上一步中将文件写入到的计算机上的路径为 eks-cluster-role-trust-policy.json 添加前言。该命令将您在上一步中创建的信任策略与角色关联。要创建 IAM 角色,必须为正在创建角色的 IAM 主体分配 iam:CreateRole 操作(权限)。

    aws iam create-role --role-name myAmazonEKSClusterRole --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
  4. 您可以分配 Amazon EKS 托管策略或创建自己的自定义策略。有关必须在自定义策略中使用的最低权限,请参阅 Amazon EKS 集群 IAM 角色

    将名为 AmazonEKSClusterPolicy 的 Amazon EKS 托管 IAM 策略附加到角色。要将 IAM 策略附加到某个 IAM 主体,必须为附加该策略的主体分配以下 IAM 操作(权限)之一:iam:AttachUserPolicyiam:AttachRolePolicy

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

第 2 步:创建集群

您可以使用以下工具来创建集群:

创建集群 – eksctl

  1. 您需要在设备或 Amazon CloudShell 上安装 0.194.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 eksctl 文档中的 Installation

  2. 在您的默认 Amazon 区域中,使用 Amazon EKS 默认 Kubernetes 版本创建 Amazon EKS IPv4 集群。在运行命令之前,进行以下替换:

  3. region-code 替换为您要在其中创建集群的 Amazon 区域。

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

  5. 1.29 替换为任何 Amazon EKS 支持的版本

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

    您选择的子网必须符合 Amazon EKS 子网要求。在选择子网之前,我们建议您熟悉所有的 Amazon EKS VPC 以及子网要求和注意事项

  7. 运行以下命令:

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

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

    [✓] EKS cluster "my-cluster" in "region-code" region is ready
  8. 继续第 3 步:更新 kubeconfig

可选设置

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

以下是可选设置,如果需要,必须将这些设置添加到上一个命令中。您只能在创建集群时启用这些选项,而不能在创建集群后启用。如果您需要指定这些选项,则必须使用 eksctl 配置文件创建集群,然后指定设置,而不是使用上一个命令。

  • 如果您想指定 Amazon EKS 分配给它创建的网络接口的一个或多个安全组,请指定 securityGroup 选项。

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

  • 如果您想指定 Kubernetes 从中分配服务 ID 地址的 IPv4 无类别域间路由块,请指定 serviceIPv4CIDR 选项。

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

    此 CIDR 块必须满足以下要求:

    • 处于以下范围之一:10.0.0.0/8172.16.0.0/12192.168.0.0/16

    • 具有最小大小 /24 和最大大小 /12

    • 与您的 Amazon EKS 资源的 VPC 范围不重叠。

      您只能在使用 IPv4 地址系列和创建集群时指定此选项。如果您没有指定此选项,Kubernetes 从 10.100.0.0/16172.20.0.0/16 CIDR 块分配服务 IP 地址。

  • 如果您创建集群并希望集群将 IPv6 地址(而不是 IPv4 地址)分配到Pods和服务,则请指定 ipFamily 选项。

    默认情况下,Kubernetes 将 IPv4 地址分配给 Pods 和服务。在决定使用 IPv6 系列之前,请务必熟悉 VPC 要求和注意事项子网要求和注意事项查看集群的 Amazon EKS 安全组要求了解如何将 IPv6 地址分配给集群、pods 和服务 主题中的所有注意事项和要求。如果您选择 IPv6 系列,您无法指定从中分配 IPv6 服务地址的 Kubernetes 的地址范围,就像您可以为 IPv4 系列进行的那样。Kubernetes 从唯一的本地地址范围(fc00::/7)中分配服务地址。

创建集群 – Amazon 控制台

  1. 打开 Amazon EKS console 控制台

  2. 请选择 Add cluster(添加集群),然后选择 Create(创建)。

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

    • Name(名称)– 集群的名称。名称只能包含字母数字字符(区分大小写)、连字符和下划线。该名称必须以字母数字字符开头,且不得超过 100 个字符。对于您在其中创建集群的 Amazon 区域和 Amazon 账户,该名称必须在其内具有唯一性。

    • Kubernetes 版本 – 要用于集群的 Kubernetes 版本。建议选择最新版本,除非您需要早期版本。

    • 支持类型 – 您要为集群设置的 Kubernetes 版本策略。如果您希望集群仅根据标准支持版本运行,则可以选择标准支持。如果您希望集群在某个版本的标准支持终止时进入扩展支持,则可以选择扩展支持。如果您选择的 Kubernetes 版本当前处于扩展支持状态,则无法选择标准支持选项。

    • Cluster Service Role(集群服务角色)– 选择您创建的 Amazon EKS 集群 IAM 角色以允许 Kubernetes 控制面板来代表您管理 Amazon 资源。

    • Secrets encryption(密钥加密)–(可选)选择此选项以使用 KMS 密钥启用 Kubernetes 密钥的密钥加密。您也可以在创建集群后启用此功能。在启用此功能之前,请确保您熟悉在现有集群上使用 Amazon KMS 加密 Kubernetes 密钥中的信息。

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

      完成此页面后,请选择下一步

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

    • VPC – 选择符合 Amazon EKS VPC 要求的现有 VPC 以在其中创建集群。在选择 VPC 之前,我们建议您熟悉查看 Amazon EKS 对 VPC 和子网的联网要求中的所有要求和注意事项。集群创建后,您无法更改要使用的 VPC。如果没有列出任何 VPC,则需要先创建一个。有关更多信息,请参阅 为您的 Amazon EKS 集群创建 Amazon VPC

    • Subnets(子网)– 预设情况下,已预先选中在之前字段中指定的 VPC 中的所有可用子网。您必须至少选择两个子网。

      您选择的子网必须符合 Amazon EKS 子网要求。在选择子网之前,我们建议您熟悉所有的 Amazon EKS VPC 以及子网要求和注意事项

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

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

    • 选择集群 IP 地址系列 - 您可以选择 IPv4 和 IPv6

      默认情况下,Kubernetes 将 IPv4 地址分配给 Pods 和服务。在决定使用 IPv6 系列前,请确保您熟悉 VPC 要求和注意事项子网要求和注意事项查看集群的 Amazon EKS 安全组要求了解如何将 IPv6 地址分配给集群、pods 和服务 主题中的所有注意事项和要求。如果您选择 IPv6 系列,您无法指定从中分配 IPv6 服务地址的 Kubernetes 的地址范围,就像您可以为 IPv4 系列进行的那样。Kubernetes 从唯一的本地地址范围(fc00::/7)中分配服务地址。

    • (可选)选择 Configure Kubernetes Service IP address range(配置服务 IP 地址范围),然后指定 Service IPv4 range(服务范围)。

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

      此 CIDR 块必须满足以下要求:

      • 处于以下范围之一:10.0.0.0/8172.16.0.0/12192.168.0.0/16

      • 具有最小大小 /24 和最大大小 /12

      • 与您的 Amazon EKS 资源的 VPC 范围不重叠。

    您只能在使用 IPv4 地址系列和创建集群时指定此选项。如果您没有指定此选项,Kubernetes 从 10.100.0.0/16172.20.0.0/16 CIDR 块分配服务 IP 地址。

    • 对于集群端点访问中,选择一个选项。创建集群后,您可以更改此选项。在选择非默认选项之前,请务必熟悉这些选项及其影响。有关更多信息,请参阅 控制对集群 API 服务器端点的网络访问权限

      完成此页面后,请选择下一步

  5. (可选)在配置可观测性页面上,选择要开启的指标控制面板日志记录选项。默认情况下,每种日志类型都处于关闭状态。

    完成此页面后,请选择下一步

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

    完成此页面后,请选择下一步

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

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

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

    创建集群后,您可以更新每个附加组件的配置。有关配置附加组件的更多信息,请参阅更新 Amazon EKS 附加组件。完成此页面后,请选择下一步

  8. Review and create (审核和创建) 页面上,审核您在之前页面输入或选择的信息。如果需要进行更改,请选择 Edit(编辑)。在您感到满意后,选择创建Status(状态)字段在预置集群时显示 CREATING(正在创建)。

    注意

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

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

  9. 继续第 3 步:更新 kubeconfig

创建集群 – Amazon CLI

  1. 使用以下命令创建集群。在运行命令之前,进行以下替换:

    您只能在使用 IPv4 地址系列和创建集群时指定此选项。如果您没有指定此选项,Kubernetes 从 10.100.0.0/16172.20.0.0/16 CIDR 块分配服务 IP 地址。

    • region-code 替换为您要在其中创建集群的 Amazon 区域。

    • my-cluster 替换为您的集群名称。名称只能包含字母数字字符(区分大小写)、连字符和下划线。该名称必须以字母数字字符开头,且不得超过 100 个字符。对于您在其中创建集群的 Amazon 区域和 Amazon 账户,该名称必须在其内具有唯一性。

    • 1.30 替换为任何 Amazon EKS 支持的版本

    • 111122223333 替换为账户 ID,并将 myAmazonEKSClusterRole 替换为您的集群 IAM 角色的名称。

    • subnetIds 的值替换为您自己的值。您还可以添加其他 ID。您必须指定至少两个子网 ID。

      您选择的子网必须符合 Amazon EKS 子网要求。在选择子网之前,我们建议您熟悉所有的 Amazon EKS VPC 以及子网要求和注意事项

    • 如果您不想指定安全组 ID,请从命令中删除 ,securityGroupIds=sg-<ExampleID1>。如果您想指定一个或多个安全组 ID,请将 securityGroupIds 的值替换为您自己的值。您还可以添加其他 ID。

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

      aws eks create-cluster --region region-code --name my-cluster --kubernetes-version 1.30 \ --role-arn arn:aws-cn:iam::111122223333:role/myAmazonEKSClusterRole \ --resources-vpc-config subnetIds=subnet-ExampleID1,subnet-ExampleID2,securityGroupIds=sg-ExampleID1
      注意

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

      以下是可选设置,如果需要,必须将这些设置添加到上一个命令中。您只能在创建集群时启用这些选项,而不能在创建集群后启用。

    • 默认情况下,EKS 会在创建集群期间安装多个联网插件。这包括 Amazon VPC CNI、CoreDNS 和 kube-proxy 等。

      如果要禁用这些默认联网插件的安装,请使用以下参数。这可以用于 Cilium 等替代 CNI。有关更多信息,请参阅 EKS API 参考

      aws eks create-cluster --bootstrapSelfManagedAddons false

    • 如果您想指定 Kubernetes 从中分配服务 ID 地址的 IPv4 无类别域间路由(CIDR)块,您必须通过添加 --kubernetes-network-config serviceIpv4Cidr=<cidr-block> to the following command. 来指定它。指定自己的范围有助于防止 Kubernetes 服务与对等或连接到您的 VPC 的其它网络之间的冲突。使用 CIDR 表示法输入范围。例如:10.2.0.0/16。此 CIDR 块必须满足以下要求:

      • 处于以下范围之一:10.0.0.0/8172.16.0.0/12192.168.0.0/16

      • 具有最小大小 /24 和最大大小 /12

      • 与您的 Amazon EKS 资源的 VPC 范围不重叠。

    • 如果您创建集群并希望集群分配 IPv6 地址而不是 IPv4 地址到Pods和服务,请将 --kubernetes-network-config ipFamily=ipv6 添加到以下命令中。

      默认情况下,Kubernetes 将 IPv4 地址分配给 Pods 和服务。在决定使用 IPv6 系列前,请确保您熟悉 VPC 要求和注意事项子网要求和注意事项查看集群的 Amazon EKS 安全组要求了解如何将 IPv6 地址分配给集群、pods 和服务 主题中的所有注意事项和要求。如果您选择 IPv6 系列,您无法指定从中分配 IPv6 服务地址的 Kubernetes 的地址范围,就像您可以为 IPv4 系列进行的那样。Kubernetes 从唯一的本地地址范围(fc00::/7)中分配服务地址。

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

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

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

  3. 继续第 3 步:更新 kubeconfig

第 3 步:更新 kubeconfig

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

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

    示例输出如下。

    Added new context arn:aws-cn:eks:region-code:111122223333:cluster/my-cluster to /home/username/.kube/config
  2. 通过运行以下命令以确认与集群的通信。

    kubectl get svc

    示例输出如下。

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

第 4 步:集群设置

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

  2. (推荐)在将 Amazon EC2 节点部署到集群之前为 Amazon VPC CNI plugin for Kubernetes 插件配置集群。默认情况下,该插件随集群一起安装。当您将 Amazon EC2 节点添加到集群时,插件将自动部署到您添加的每个 Amazon EC2 节点上。该插件要求您将以下 IAM 策略之一附加到 IAM 角色。如果集群使用 IPv4 系列,请使用 AmazonEKS_CNI_Policy 托管 IAM 策略。如果您的集群使用 IPv6 系列,请使用您创建的 IAM 策略

    您将策略附加到的 IAM 角色可以是节点 IAM 角色,也可以是仅用于插件的专用角色。我们建议将策略附加到此角色。有关创建角色的更多信息,请参阅配置 Amazon VPC CNI 插件以使用 IRSAAmazon EKS 节点 IAM 角色

  3. 如果您使用 Amazon Web Services Management Console 部署了集群,则可以跳过此步骤。Amazon Web Services Management Console在默认情况下会部署 Amazon VPC CNI plugin for Kubernetes、CoreDNS、kube-proxy Amazon EKS 附加组件。

    如果您使用 eksctl 或 Amazon CLI 部署集群,则系统将部署 Amazon VPC CNI plugin for Kubernetes、CoreDNS 和 kube-proxy 自行管理的附加组件。您可以将使用您的集群部署的 Amazon VPC CNI plugin for Kubernetes、CoreDNS 和 kube-proxy 自行管理的附加组件迁移到 Amazon EKS 附加组件中。有关更多信息,请参阅 Amazon EKS 附加组件

  4. (可选)如果您尚未执行此操作,可以为集群启用 Prometheus 指标。有关更多信息,请参阅《Amazon Managed Service for Prometheus 用户指南》中的创建抓取程序

  5. 如果您计划将工作负载部署到使用 Amazon EBS 卷的集群,并且您创建了 1.23 或更高版本的集群,则在部署工作负载之前,您必须将 Amazon EBS CSI 安装到您的集群。

后续步骤