创建 Amazon EKS 集群 - Amazon EKS

创建 Amazon EKS 集群

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

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

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

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

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

创建 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:CreateRole 操作(权限)。

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

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

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

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

    eksctl
    先决条件

    您的设备或 AWS CloudShell 上安装了 0.172.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 eksctl 文档中的 Installation

    创建集群的步骤

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

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

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

    • 1.28 替换为 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.28 --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 地址。

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

      默认情况下,Kubernetes 将 IPv4 地址分配给 Pods 和服务。在决定使用 IPv6 系列前,请确保您熟悉 VPC 要求和注意事项子网要求和注意事项Amazon EKS 安全组要求和注意事项集群、Pods 和 services 的 IPv6 地址 主题中的所有考虑因素和要求。如果您选择 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(名称)– 集群的名称。它必须在您的 AWS 账户 中具有唯一性。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。对于您在其中创建集群的 AWS 区域 和 AWS 账户,该名称必须在其内具有唯一性。

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

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

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

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

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

    4. 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 创建的集群安全组中的规则。

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

        默认情况下,Kubernetes 将 IPv4 地址分配给 Pods 和服务。在决定使用 IPv6 系列前,请确保您熟悉 VPC 要求和注意事项子网要求和注意事项Amazon EKS 安全组要求和注意事项集群、Pods 和 services 的 IPv6 地址 主题中的所有考虑因素和要求。如果您选择 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 地址。

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

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

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

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

    6. Select add-ons(选择附加组件)页面上,选择要添加到集群的附加组件。您可以根据需要选择任意数量的 Amazon EKS 附加组件AWS Marketplace 附加组件。如果未列出要安装的 AWS Marketplace 附加组件,则可以通过在搜索框中输入文本来搜索可用的 AWS Marketplace 附加组件。您也可以按 category(类别)、vendor(供应商)或 pricing model(定价模式)进行搜索,然后从搜索结果中选择附加组件。完成此页面后,请选择下一步

    7. 配置选定插件设置页面上,选择要安装的版本。创建集群后,您可以随时更新到更高版本。创建集群后,您可以更新每个附加组件的配置。有关配置附加组件的更多信息,请参阅更新附加组件。完成此页面后,请选择下一步

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

      注意

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

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

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

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

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

      • 1.29 替换为 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.29 \ --role-arn arn:aws:iam::111122223333:role/myAmazonEKSClusterRole \ --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 地址。

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

        默认情况下,Kubernetes 将 IPv4 地址分配给 Pods 和服务。在决定使用 IPv6 系列前,请确保您熟悉 VPC 要求和注意事项子网要求和注意事项Amazon EKS 安全组要求和注意事项集群、Pods 和 services 的 IPv6 地址 主题中的所有考虑因素和要求。如果您选择 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 提供商。要了解有关 Amazon EKS 附加组件的详情,请参阅 Amazon EKS 附加组件。要了解有关将特定 IAM 权限分配给工作负载的详情,请参阅 服务账户的 IAM 角色

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

    AmazonEKS_CNI_Policy 托管 IAM policy

    如果您的集群使用 IPv4 系列

    您创建的 IAM policy

    如果您的集群使用 IPv6 系列

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

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

  9. 如果启用了 Prometheus 指标,则必须设置 aws-auth ConfigMap 以授予抓取程序集群内权限。有关更多信息,请参阅《Amazon Managed Service for Prometheus 用户指南》中的配置您的 Amazon EKS 集群

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

向您建议的后续步骤: