开始使用 Amazon EKS – Amazon Web Services Management Console 和 Amazon CLI - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

开始使用 Amazon EKS – Amazon Web Services Management Console 和 Amazon CLI

本指南帮助您创建通过 Amazon Web Services Management Console 和 Amazon CLI 开始使用 Amazon Elastic Kubernetes Service (Amazon EKS) 所需的所有资源。在本指南中,您将手动创建每个资源。在本教程的最后,将为您提供一个运行中的 Amazon EKS 集群,您可向其部署应用程序。

本指南中的步骤可让您完全了解每个资源的创建方式以及资源之间如何相互交互。如果您希望系统自动为您创建大部分资源,请使用 eksctl CLI 创建集群和节点。有关更多信息,请参阅 开始使用 Amazon EKS – eksctl

先决条件

在开始使用本教程之前,您必须安装并配置创建和管理 Amazon EKS 集群所需的以下工具和资源。

  • Amazon CLI – 与Amazon服务(包括 Amazon EKS)一起使用的命令行工具。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的安装、更新和卸载 Amazon CLI。在安装 Amazon CLI 后,建议您还要对其进行配置。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的如何使用 aws configure 快速配置

  • kubectl – 用于与 Kubernetes 集群一起使用的命令行工具。有关更多信息,请参阅 安装或更新 kubectl

  • 所需的 IAM 权限 – 您正在使用的 IAM 安全主体必须具有使用 Amazon EKS IAM 角色、服务相关角色、Amazon CloudFormation、VPC 和相关资源的权限。有关更多信息,请参阅 IAM 用户指南中的用于 Amazon Elastic Kubernetes Service 的操作、资源和条件密钥使用服务相关角色。您必须以同一用户身份完成本指南中的所有步骤。要查看当前用户,请运行以下命令:

    aws sts get-caller-identity
  • 我们建议您在 Bash shell 中完成本主题中的步骤。如果您没有使用 Bash shell,则某些脚本命令(例如行延续字符以及变量的设置和使用方式)需要调整 shell。此外,您的 Shell 的引用和转义规则可能有所不同。有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的在 Amazon CLI 中将引号和字符串结合使用

第 1 步:创建 Amazon EKS 集群

重要

为了尽可能简单快速地入门,本主题包括创建具有原定设置的集群的步骤。创建用于生产用途的集群前,我们建议您熟悉所有设置,并使用符合您要求的设置部署集群。有关更多信息,请参阅 创建 Amazon EKS 集群。一些设置仅在创建集群时可以启用。

创建集群的步骤
  1. 创建具有公有和私有子网且符合 Amazon EKS 要求的 Amazon VPC。region-code 替换为 Amazon EKS 支持的任何 Amazon Web Services 区域。有关 Amazon Web Services 区域 列表,请参阅 Amazon 一般参考指南中的 Amazon EKS 端点和配额您可以将 my-eks-vpc-stack 替换为您选择的任何名称。

    aws cloudformation create-stack \ --region region-code \ --stack-name my-eks-vpc-stack \ --template-url https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
    提示

    如需查看上一个命令创建的所有资源的列表,请前往 https://console.aws.amazon.com/cloudformation 打开 Amazon CloudFormation 控制台。选择 my-eks-vpc-stack 堆栈,然后选择 Resources(资源)选项卡。

  2. 创建集群 IAM 角色并向其附加所需的 Amazon EKS IAM 托管策略。Amazon EKS 托管的 Kubernetes 集群会代表您调用其他 Amazon 服务,以管理您用于该服务的资源。

    1. 将以下内容复制到名为 eks-cluster-role-trust-policy.json 的文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 创建角色。

      aws iam create-role \ --role-name myAmazonEKSClusterRole \ --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
    3. 将所需的 Amazon EKS 托管 IAM policy 附加到角色。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \ --role-name myAmazonEKSClusterRole
  3. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

    确保控制台右上角显示的 Amazon Web Services 区域 是您要在其中创建集群的Amazon Web Services 区域。如果不是,请选择 Amazon Web Services 区域名称旁边的下拉菜单,然后选择要使用的 Amazon Web Services 区域。

  4. 请选择 Add cluster(添加集群),然后选择 Create(创建)。如果没有看到此选项,请先选择左侧导航面板中的 Clusters(集群)。

  5. Configure cluster(配置集群)页面上,请执行以下操作:

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

    2. 对于 Cluster Service Role(集群服务角色),请选择 myAmazonEKSClusterRole

    3. 其余设置保留为默认值,然后选择 Next(下一步)。

  6. Specify networking(指定联网)页面中,请执行以下操作:

    1. 请从 VPC 下拉列表中选择在上一步创建的 VPC ID。此 ID 形如 vpc-00x0000x000x0x000 | my-eks-vpc-stack-VPC

    2. 其余设置保留为默认值,然后选择 Next(下一步)。

  7. 配置可观测性页面上,选择下一步

  8. 选择附加组件页中,选择下一个

    有关附加组件的更多信息,请参阅 Amazon EKS 附加组件

  9. 配置选定的附加组件设置页面上,选择下一个

  10. 请在 Review and create(审核和创建)页面上,选择 Create(创建)。

    集群名称右侧的集群状态会保持为 Creating(正在创建)几分钟,直至集群调配过程完成。在该状态变为 Active(有效)之前,请勿继续执行下一步。

    注意

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

第 2 步:将计算机配置为与您的集群通信

在本部分中,您将为集群创建一个 kubeconfig 文件。此文件中的设置会启用 kubectl CLI 与您的集群进行通信。

将计算机配置为与您的集群通信的步骤
  1. 为集群创建或更新 kubeconfig 文件。region-code 替换为您要在其中创建集群的 Amazon Web Services 区域。my-cluster 替换为您的集群名称。

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

    预设情况下,config 文件创建在 ~/.kube 中或者新集群的配置已添加到 ~/.kube 的现有 config 文件中。

  2. 测试配置。

    kubectl get svc
    注意

    如果您收到任何授权或资源类型错误,请参阅故障排除主题中的 未经授权或访问被拒绝 (kubectl)

    示例输出如下。

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

第 3 步:创建节点

重要

为了尽可能简单快速地入门,本主题包括创建具有原定设置的节点的步骤。在创建用于生产用途的节点之前,我们建议您熟悉所有设置,并使用符合您要求的设置部署节点。有关更多信息,请参阅 Amazon EKS 节点。一些设置仅在创建节点时可以启用。

您可以使用下列节点类型之一创建集群。要了解有关各个类型的更多信息,请参阅 Amazon EKS 节点。部署集群后,您可以添加其他节点类型。

  • Fargate - Linux - 如果要在 Amazon Fargate 上运行 Linux 应用程序,请选择此类型的节点。Fargate 是一种无服务器计算引擎,允许部署 Kubernetes Pods,而不管理 Amazon EC2 实例。

  • 托管节点 – Linux如果要运行,请选择此类型的节点 Amazon Linux 应用程序。虽然本指南中未作介绍,但您还可以向集群添加 Windows 自行管理节点和 Bottlerocket 节点。

Fargate – Linux

创建 Fargate 配置文件。当部署 Kubernetes Pods 时使用的条件符合配置文件中定义的条件时,这些 Pods 将会部署到 Fargate。

创建 Fargate 配置文件的步骤
  1. 创建 IAM 角色并向其附加所需的 Amazon EKS IAM 托管策略。当您的集群在 Fargate 基础设施上创建 Pods 时,在 Fargate 基础设施上运行的组件必须代表您调用 Amazon API。这是为了他们可以执行诸如从 Amazon ECR 中拉取容器镜像或将日志路由到其他 Amazon 服务的操作。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

    1. 将以下内容复制到名为 pod-execution-role-trust-policy.json 的文件中。请将 region-code 替换为集群所在的 Amazon Web Services 区域。如果您希望在账户中在所有 Amazon Web Services 区域 使用相同角色,请将 region-code 替换为 *。请将 111122223333 替换为账户 ID,并将 my-cluster 替换为您的集群名称。如果您希望在账户中对所有集群使用相同角色,请将 my-cluster 替换为 *

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:eks:region-code:111122223333:fargateprofile/my-cluster/*" } }, "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 创建 Pod 执行 IAM 角色。

      aws iam create-role \ --role-name AmazonEKSFargatePodExecutionRole \ --assume-role-policy-document file://"pod-execution-role-trust-policy.json"
    3. 将所需的 Amazon EKS 托管 IAM 策略附加到角色。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy \ --role-name AmazonEKSFargatePodExecutionRole
  2. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  3. Clusters(集群)页面上,选择 my-cluster 集群。

  4. my-cluster 页面上,请执行以下操作:

    1. 请选择 Compute(计算)选项卡。

    2. Fargate Profiles(Fargate 配置文件)下,选择 Add Fargate Profile(添加 Fargate 配置文件)。

  5. Configure Fargate Profile(配置 Fargate 配置文件)页面上,请执行以下操作:

    1. 对于 Name(名称),为 Fargate 配置文件输入唯一名称,例如 my-profile

    2. 对于 Pod execution role(容器组(pod)执行角色),选择您在上一步中创建的 AmazonEKSFargatePodExecutionRole

    3. 选择 Subnets(子网)下拉列表并取消选择名称中带有 Public 的所有子网。Fargate 上运行的 Pods 仅支持私有子网。

    4. 选择下一步

  6. Configure Pod selection(配置选择)页面上,请执行以下操作:

    1. 对于命名空间,请输入 default

    2. 选择下一步

  7. Review and create(查看和创建)页面上,查看 Fargate 配置文件的信息,然后选择 Create(创建)

  8. 几分钟后,Fargate Profile configuration(Fargate 配置文件配置)部分中的 Status(状态)将从 Creating(正在创建)变为 Active(有效)。在该状态变为 Active(有效)之前,请勿继续执行下一步。

  9. 如果您计划将所有 Pods 部署到 Fargate(不部署到 Amazon EC2 节点),请执行以下操作以创建另一个 Fargate 配置文件,并在 Fargate 上运行默认名称解析器 (CoreDNS)。

    注意

    否则,您目前会没有任何节点。

    1. 请在 Fargate Profile(Fargate 配置文件)页面上,选择 my-profile

    2. Fargate profiles(Fargate 配置文件)下,选择 Add Fargate profile(添加 Fargate 配置文件)。

    3. 对于名称,请输入 CoreDNS

    4. 对于 Pod execution role(容器组(pod)执行角色),选择您在上一步中创建的 AmazonEKSFargatePodExecutionRole

    5. 选择 Subnets(子网)下拉列表并取消选择名称中带有 Public 的所有子网。Fargate 上运行的 Pods 仅支持私有子网。

    6. 选择下一步

    7. 对于命名空间,请输入 kube-system

    8. 请选择 Match labels(匹配标签),然后选择 Add label(添加标签)。

    9. 输入 k8s-app 作为 Key(密钥),输入 kube-dns 作为值。必须这样设置,默认的名称解析器(CoreDNS)才能部署到 Fargate。

    10. 选择下一步

    11. Review and create(查看和创建)页面上,查看 Fargate 配置文件的信息,然后选择 Create(创建)

    12. 运行以下命令以从 CoreDNS Pods 中删除默认的 eks.amazonaws.com/compute-type : ec2 注释。

      kubectl patch deployment coredns \ -n kube-system \ --type json \ -p='[{"op": "remove", "path": "/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'
    注意

    系统根据您添加的 Fargate 配置文件标签创建和部署两个节点。由于它们不适用于 Fargate 节点,因此您不会看到 Node groups(节点组)中列出任何内容,但将看到 Overview(概览)选项卡中列出新节点。

Managed nodes – Linux

创建托管节点组,指定您在前面的步骤中创建的子网和节点 IAM 角色。

要创建 Amazon EC2 Linux 托管节点组
  1. 创建节点 IAM 角色并向其附加所需的 Amazon EKS IAM 托管策略。Amazon EKS 节点 kubelet 守护进程代表您调用 Amazon API。节点通过 IAM 实例配置文件和关联的策略获得这些 API 调用的权限。

    1. 将以下内容复制到名为 node-role-trust-policy.json 的文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 创建节点 IAM 角色。

      aws iam create-role \ --role-name myAmazonEKSNodeRole \ --assume-role-policy-document file://"node-role-trust-policy.json"
    3. 将所需的托管 IAM policy 附加到角色。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name myAmazonEKSNodeRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name myAmazonEKSNodeRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name myAmazonEKSNodeRole
  2. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  3. 选择您在 第 1 步:创建 Amazon EKS 集群 中创建的集群的名称,例如 my-cluster

  4. my-cluster 页面上,请执行以下操作:

    1. 请选择 Compute(计算)选项卡。

    2. 请选择 Add Node Group(添加节点组)。

  5. Configure Node Group(配置节点组)页面上,请执行以下操作:

    1. 对于 Name(名称),输入托管节点组的唯一名称,例如 my-nodegroup。节点组名称的长度不能超过 63 个字符。它必须以字母或数字开头,但也可以包括其余字符的连字符和下划线。

    2. 对于 Node IAM role name(节点 IAM 角色名称),请选择您在上一步中创建的 myAmazonEKSNodeRole 角色。我们建议让每个节点组使用各自的唯一 IAM 角色。

    3. 选择下一步

  6. 请在 Set compute and scaling configuration(设置计算和扩缩配置)页面上,接受默认值并选择 Next(下一步)。

  7. 请在 Specify networking(指定联网)页面,接受默认值,选择 Next(下一步)。

  8. Review and create (审核并创建) 页面上,审核托管节点组配置并选择 Create (创建)

  9. 几分钟后,Node Group configuration(节点组配置)部分中的 Status(状态)将从 Creating(正在创建)变为 Active(有效)。在该状态变为 Active(有效)之前,请勿继续执行下一步。

第 4 步:查看资源

您可以查看节点和 Kubernetes 工作负载。

查看节点和工作负载
  1. 在左侧导航窗格中,选择集群。在 Clusters(集群)列表中,选择您创建的集群名称,例如 my-cluster

  2. my-cluster 页面上,选择以下选项:

    1. Compute(计算)选项卡– 您可以看到为集群部署的节点列表。您可以选择节点的名称以查看有关该节点的详细信息。

    2. Resources(资源)选项卡 – 您将看到默认情况下部署到 Amazon EKS 集群的所有 Kubernetes 资源。在控制台中选择任何资源类型以了解有关它的更多信息。

第 5 步:删除资源

在使用完成针对本教程而创建的集群和节点后,应删除这些资源。如果要在删除资源前对此集群执行更多操作,请参阅 后续步骤

删除您按照本指南中的说明创建的资源
  1. 请删除您创建的任何节点组或 Fargate 配置文件

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

    2. 在左侧导航窗格中,选择集群。请在集群列表中,选择 my-cluster

    3. 请选择 Compute(计算)选项卡。

    4. 如果您创建了节点组,请 my-nodegroup 节点组,然后选择 Delete(删除)。输入 my-nodegroup,然后选择删除

    5. 请选择您创建的每个 Fargate 配置文件,然后选择 Delete(删除)。请输入配置文件的名称,然后选择 Delete(删除)。

      注意

      删除第二个 Fargate 配置文件时,您可能需要等待第一个配置文件完成删除。

    6. 在节点组或 Fargate 配置文件删除后再继续操作。

  2. 请删除集群。

    1. 在左侧导航窗格中,选择集群。请在集群列表中,选择 my-cluster

    2. 选择删除集群

    3. 输入 my-cluster,然后选择 Delete(删除)。请在集群删除后再继续操作。

  3. 删除创建的 VPC Amazon CloudFormation 堆栈。

    1. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

    2. 选择 my-eks-vpc-stack 堆栈,然后选择 Delete(删除)。

    3. 请在 Delete my-eks-vpc-stack (删除 my-eks-vpc-stack)确认对话框中,选择 Delete stack(删除堆栈)。

  4. 删除您创建的 IAM 角色。

    1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

    2. 在左侧导航窗格中,选择 Roles(角色)

    3. 请从列表中选择您创建的每个角色(myAmazonEKSClusterRole,以及 AmazonEKSFargatePodExecutionRolemyAmazonEKSNodeRole)。请选择 Delete(删除),输入请求的确认文本,然后选择 Delete(删除)。

后续步骤

以下文档主题可帮助您扩展集群的此功能。