创建 Amazon EKS 集群 - Amazon EKS

创建 Amazon EKS 集群

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

先决条件

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

  • 计算机或 AWS CloudShell 上安装了 kubectl 命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为 1.21,则可以将 kubectl 版本 1.201.211.22 用于它。要安装或升级 kubectl,请参阅 安装或更新 kubectl

  • 您的计算机或 AWS CloudShell 上安装并配置了 2.7.13 版或更高版本,或 1.25.25 版或更高版本的 AWS CLI。有关更多信息,请参阅 AWS Command Line Interface 用户指南中的安装、更新和卸载 AWS CLI 以及使用 aws configure 进行快速配置

  • 具有 createdescribe Amazon EKS 集群权限的 IAM 用户或角色。有关更多信息,请参阅 Amazon EKS 的操作、资源和条件键

创建 Amazon EKS 集群后,创建集群的 IAM 实体(用户或角色)将作为管理员永久添加到 Kubernetes RBAC 授权表中。该实体具有 system:masters 权限。此实体的身份在您的集群配置中不可见。因此,重要的是要注意创建集群的实体并确保永远不会删除它。最初,仅创建服务器的 IAM 实体可以使用 kubectl 调用 Kubernetes API 服务器。如果使用控制台创建集群,则必须确保在集群上运行 kubectl 命令时,相同的 IAM 凭证位于 AWS 开发工具包凭证链中。创建集群后,您可以向其他 IAM 实体授予对集群的访问权限。

创建 Amazon EKS 集群

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

    创建 Amazon EKS 集群 IAM 角色

    1. 运行以下命令以创建 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
    2. 创建 Amazon EKS 集群 IAM 角色。如有必要,使用您在上一步中将文件写入到的计算机上的路径为 eks-cluster-role-trust-policy.json 添加前言。该命令将您在上一步中创建的信任策略与角色关联。要创建 IAM 角色,必须为正在创建角色的 IAM 实体(用户或角色)分配以下 IAM 操作(权限):iam:CreateRole

      aws iam create-role --role-name AmazonEKSClusterRole --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
    3. 将名为 AmazonEKSClusterPolicy 的 Amazon EKS 托管 IAM policy 附加到角色。要将 IAM policy 附加到 IAM 实体(用户或角色),必须为附加该策略的 IAM 实体分配以下 IAM 操作(权限)之一:iam:AttachUserPolicyiam:AttachRolePolicy

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name AmazonEKSClusterRole
  2. 创建 Amazon EKS 集群。

    您可以使用 eksctl、AWS Management Console 或 AWS CLI 创建集群。

    eksctl

    先决条件

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

    创建集群的步骤

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

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

    • my-cluster 替换为您的集群名称。

    • 1.22 替换为 Amazon EKS 支持的版本

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

      您选择的子网必须符合 Amazon EKS 子网要求。在选择子网之前,我们建议您熟悉所有的 Amazon EKS VPC 以及子网要求和考虑因素。集群创建后,您无法更改要使用的子网。

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

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

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

    要查看在使用 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 地址。

    • 如果您创建的是 1.21 版本或更高版本的集群或者希望集群分配 IPv6 地址而不是 IPv4 地址到 pods 和服务,请指定 ipFamily 选项。

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

    AWS Management Console

    创建集群的步骤

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

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

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

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

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

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

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

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

    4. 选择 Next(下一步)。

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

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

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

        您选择的子网必须符合 Amazon EKS 子网要求。在选择子网之前,我们建议您熟悉所有的 Amazon EKS VPC 以及子网要求和考虑因素。集群创建后,您无法更改要使用的子网。

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

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

      • Choose cluster IP address family(选择集群 IP 地址系列)- 如果您选择的集群版本为 1.20 版或更早版本,则仅 IPv4 选项可用。如果您选择了 1.21 或更高版本,则 IPv4IPv6 可用。

        默认情况下,Kubernetes 将 IPv4 地址分配给容器组(pod)和服务。在决定使用 IPv6 系列前,请确保您熟悉 VPC 要求和注意事项子网要求和注意事项Amazon EKS 安全组要求和注意事项将 IPv6 地址分配给 pods 和 services 主题中的所有考虑因素和要求。如果您选择 IPv6 系列,您无法指定从中分配 IPv6 服务地址的 Kubernetes 的地址范围,就像您可以为 IPv4 系列进行的那样。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/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 地址。

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

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

    7. 选择 Next(下一步)。

    8. Configure logging (配置日志记录) 页面上,您可以选择要启用的日志类型,此操作是可选的。预设情况下,每个日志类型均为已禁用。在选择其他选项前,请自行熟悉 Amazon EKS 控制面板日志记录 中的信息。创建集群后,您可以更改此选项。

    9. 选择 Next(下一步)。

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

      注意

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

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

    AWS CLI

    创建集群的步骤

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

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

      • my-cluster 替换为您的集群名称。

      • 1.22 替换为 Amazon EKS 支持的版本

      • 111122223333 替换为您的账户 ID,并将 AmazonEKSClusterRole 替换为您的集群 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.22 \ --role-arn arn:aws:iam::111122223333:role/AmazonEKSClusterRole \ --resources-vpc-config subnetIds=subnet-ExampleID1,subnet-ExampleID2,securityGroupIds=sg-ExampleID1
      注意

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

      可选设置

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

      • 如果您想指定 Kubernetes 从中分配服务 ID 地址的 IPv4 无类别域间路由块,您必须通过将 --kubernetes-network-config serviceIpv4Cidr=CIDR block 添加到以下命令中来指定它。

        指定自己的范围有助于防止 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 地址。

      • 如果您创建的是 1.21 版本或更高版本的集群或者希望集群分配 IPv6 地址而不是 IPv4 地址到 pods 和服务,请将 --kubernetes-network-config ipFamily=ipv6 添加到以下命令中。

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

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

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

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

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

    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
  4. 通过运行以下命令以确认与集群的通信。

    kubectl get svc

    输出示例如下。

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h
  5. (建议)要使用某些 Amazon EKS 附加组件,或启用个别 Kubernetes 工作负载以具有特定 AWS Identity and Access Management (IAM) 权限,请为集群创建一个 IAM OpenID Connect (OIDC) 提供程序。有关如何为集群创建 IAM OIDC 提供程序的说明,请参阅 为集群创建 IAM OIDC 提供商。您只需为集群创建一次 IAM OIDC 提供程序。要了解有关 Amazon EKS 附加组件的详情,请参阅 Amazon EKS 附加组件。要了解有关向工作负载分配特定 IAM 权限的更多信息,请参阅服务账户 IAM 角色技术概述

  6. (推荐)在将 Amazon EC2 节点部署到集群之前为 Amazon VPC CNI plugin for Kubernetes 插件配置集群。默认情况下,该插件随集群一起安装。当您将 Amazon EC2 节点添加到集群时,插件将自动部署到您添加的每个 Amazon EC2 节点上。该插件要求您将以下 IAM policy 之一附加到 IAM 角色:

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

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

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

向您建议的后续步骤: