开始使用 Amazon EKS – AWS Management Console 和 AWS CLI - Amazon EKS

开始使用 Amazon EKS – AWS Management Console 和 AWS CLI

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

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

Prerequisites

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

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

  • kubectl – 用于与 Kubernetes 集群一起使用的命令行工具。本指南要求您使用 1.21 版或更高版本。有关更多信息,请参阅 安装 kubectl

  • 所需的 IAM 权限 – 您正在使用的 IAM 安全主体必须具有使用 Amazon EKS IAM 角色和服务相关角色的权限、AWS CloudFormation 以及 VPC 和相关资源。有关更多信息,请参阅 IAM 用户指南中的用于 Amazon Elastic Container Service for Kubernetes 的操作、资源和条件键使用服务相关角色。您必须以同一用户身份完成本指南中的所有步骤。

第 1 步:创建 Amazon EKS 集群

创建 Amazon EKS 集群。

重要

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

创建集群的步骤

  1. 创建具有公有和私有子网且符合 Amazon EKS 要求的 Amazon VPC。可以将示例值替换为您自己的值,但我们建议在本教程中使用示例值。

    aws cloudformation create-stack \ --region us-west-2 \ --stack-name my-eks-vpc-stack \ --template-url https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
  2. 创建集群 IAM 角色并向其附加所需的 Amazon EKS IAM 托管策略。Amazon EKS 托管的 Kubernetes 集群会代表您调用其他AWS服务,以管理您用于该服务的资源。

    1. 将以下内容复制到名为 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://"cluster-role-trust-policy.json"
    3. 将所需的 Amazon EKS 托管 IAM 策略附加到角色。

      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 控制台。

    确保在控制台右上角选择的区域为俄勒冈,如果不是,请选择地区名称旁边的下拉菜单并选择美国西部(俄勒冈)us-west-2 。尽管您可以在任何一个 Amazon EKS 支持的区域中创建集群,在本教程中,则是在美国西部(俄勒冈)us-west-2 创建的。

  4. 选择 Create cluster(创建集群)。如果您看不到此选项,请在 Create EKS cluster(创建 EKS 集群)框中输入集群的名称,例如 my-cluster,然后选择 Next step(下一步)

  5. Configure cluster(配置集群)页面上输入集群的名称,例如 my-cluster,然后对 Cluster Service Role(集群服务角色)选择 myAmazonEKSClusterRole。其余设置保留为原定设置值,然后选择 Next(下一步)

  6. Specify networking(指定联网)页面上,从 VPC 下拉列表中选择 vpc-00x0000x000x0x000 | my-eks-vpc-stack-VPC。其余设置保留为原定设置值,然后选择 Next(下一步)

  7. Configure logging(配置日志记录)页面上,选择 Next(下一步)

  8. Review and create(审核和创建)页面上,选择 Create(创建)

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

    注意

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

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

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

将计算机配置为与您的集群通信的步骤

  1. 为集群创建或更新 kubeconfig 文件。如有必要,将 us-west-2 替换为您在其中创建集群的区域。

    aws eks update-kubeconfig \ --region us-west-2 \ --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 步:创建 IAM OpenID Connect (OIDC) 提供商

为您的集群创建 IAM OpenID Connect (OIDC) 提供商,以便工作负载使用的 Kubernetes 服务账户可以访问AWS资源。您只需要对集群完成此步骤一次。

  1. 选择 Configuration(配置)选项卡。

  2. Details(详细信息)部分复制 OpenID Connect provider URL(OpenID Connect 提供商 URL)的值。

  3. 打开 IAM 控制台:https://console.aws.amazon.com/iam/

  4. 在导航窗格中,选择 Identity Providers(身份提供商)

  5. 选择 Add Provider(添加提供程序)

  6. 对于 Provider Type(提供商类型),选择 OpenID Connect

  7. 对于 Provider URL(提供商 URL),粘贴第 2 步中复制的集群 OIDC 提供商 URL,然后选择 Get thumbprint(获取指纹)

  8. 对于 Audience(受众),输入 sts.amazonaws.com,然后选择 Add provider(添加提供商)

第 4 步:创建节点

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

  • Fargate – Linux – 如果要在 AWS Fargate 上运行 Linux 应用程序,请选择此类型。

  • 托管节点 – Linux – 如果要在 Amazon EC2 实例上运行 Amazon Linux 应用程序,请选择此类型。虽然本指南中未作介绍,但您还可以向集群添加 Windows 自托管节点Bottlerocket 节点。即使您的所有工作负载均为 Windows 工作负载,集群也必须至少包含一个 Linux 节点。

选择带有要创建的节点类型的名称的选项卡。

Fargate – Linux

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

创建 Fargate 配置文件的步骤

  1. 创建 IAM 角色并向其附加所需的 Amazon EKS IAM 托管策略。当您的集群在 Fargate 基础设施上创建 Pod 时,Fargate 基础设施上运行的组件需要代表您调用 AWS API,以执行诸如从 Amazon ECR 提取容器镜像或将日志路由到其他AWS服务之类的操作。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

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

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

      aws iam create-role \ --role-name myAmazonEKSFargatePodExecutionRole \ --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 myAmazonEKSFargatePodExecutionRole
  2. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  3. 选择要为其创建 Fargate 配置文件的集群,然后依次选择 Configuration(配置)选项卡和 Compute(计算)选项卡。

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

  5. Configure profile(配置 Fargate 配置文件)页面上,输入以下信息并选择 Next(下一步)

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

    2. 对于 Pod execution role(Pod 执行角色),选择您在第一步中创建的 myAmazonEKSFargatePodExecutionRole

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

  6. Configure pods selection (配置 Pod 选择) 页面上,输入以下信息并选择 Next (下一步)

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

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

Managed nodes – Linux

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

创建 Amazon EC2 Linux 托管节点组的步骤

  1. 为 Amazon VPC CNI 插件创建 IAM 角色,并向其附加所需的 Amazon EKS IAM 托管策略。预设情况下,Amazon EKS Amazon VPC CNI 插件安装在集群上。此插件会将 VPC 中的 IP 地址分配给每个 Pod 分配。

    1. 将以下内容复制到名为 cni-role-trust-policy.json 的文件中。将 111122223333 替换为您的账户 ID,并将 XXXXXXXXXX45D83924220DC4815XXXXX 替换为 OpenID Connect 提供商 URL 最后 / 后面的值。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/XXXXXXXXXX45D83924220DC4815XXXXX" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/XXXXXXXXXX45D83924220DC4815XXXXX:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
    2. 为 Amazon VPC CNI 插件创建 IAM 角色。

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

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name myAmazonEKSCNIRole
  2. 关联 VPC CNI 插件使用的 Kubernetes 服务账户与 IAM 角色。将 111122223333 替换为您的账户 ID。

    aws eks update-addon \ --region us-west-2 \ --cluster-name my-cluster \ --addon-name vpc-cni \ --service-account-role-arn arn:aws:iam::111122223333:role/myAmazonEKSCNIRole
  3. 创建节点 IAM 角色并向其附加所需的 Amazon EKS IAM 托管策略。Amazon EKS 节点 kubelet 守护进程代表您调用 AWS 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. 将所需的 Amazon EKS 托管 IAM 策略附加到角色。

      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
  4. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

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

  6. 选择 Configuration(配置)选项卡。

  7. Configuration(配置)页面上,选择 Compute(计算)选项卡,然后选择 Add Node Group(添加节点组)

  8. Configure node group(配置节点组)页面上,填写相应参数,接受其余的原定设置值,然后选择 Next(下一步)

    • Name(名称)– 为托管节点组输入唯一名称,例如 my-nodegroup

    • 节点 IAM 角色名称 – 选择 myAmazonEKSNodeRole。在本入门指南中,此角色只能用于此节点组,不能用于其他节点组。

  9. Set compute and scaling configuration(设置计算和扩展配置)页面上,接受原定设置值并选择 Next(下一步)

  10. Specify networking(指定联网)页面上,选择要用于 SSH key pair 的现有密钥对,然后选择 Next(下一步)。如果还没有密钥对,可以使用以下命令创建一个:如有需要,可以将 us-west-2 更改为您在其中创建集群的区域。请务必将返回输出保存在本地计算机上的文件中。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中创建或导入密钥对。虽然在本指南中不需要密钥,但您只能在创建节点组时指定要使用的密钥。指定密钥操作允许您在创建节点后通过 SSH 将密钥传输到节点。

    aws ec2 create-key-pair --region us-west-2 --key-name myKeyPair
  11. Review and create (审核并创建) 页面上,审核托管节点组配置并选择 Create (创建)

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

第 5 步:查看资源

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

查看节点的步骤

  1. 在左侧窗格中,选择 Clusters(集群),然后在 Clusters(集群)列表中,选择您创建的集群的名称,例如 my-cluster

  2. Overview(概览)选项卡上,您可以看到为集群部署的 Nodes(节点)。您可以选择节点的名称以查看有关该节点的详细信息。有关您在此处查看的内容的更多信息,请参阅 查看节点

  3. 在集群的 Workloads(工作负载)选项卡上,您将看到预设情况下部署到 Amazon EKS 集群的工作负载列表。您可以选择工作负载的名称以查看有关该工作负载的详细信息。有关您在此处查看的内容的更多信息,请参阅 查看工作负载

第 6 步:删除集群和节点

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

删除集群和节点的步骤

  1. 删除所有节点组和 Fargate 配置文件

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

    2. 在左侧导航中,选择 Clusters(集群),然后在集群列表中,选择要删除的集群的名称。

    3. 选择 Configuration(配置)选项卡。在 Compute(计算)选项卡上,选择:

      • 在上一步中创建的节点组,然后选择 Delete(删除)。输入节点组的名称,然后选择 Delete(删除)

      • 在上一步中创建的 Fargate Profile(Fargate 配置文件),然后选择 Delete(删除)。输入配置文件的名称,然后选择 Delete(删除)

  2. 请删除集群。

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

    2. 选择要删除的集群并选择 Delete (删除)

    3. 在删除集群确认屏幕上,选择 Delete (删除)

  3. 删除您在本指南中创建的 VPC AWS CloudFormation 堆栈。

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

    2. 选择要删除的 VPC 堆栈并选择 Delete(删除)

    3. Delete Stack(删除堆栈)确认屏幕上,选择 Delete stack(删除堆栈)

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

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

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

    3. 从列表中选择 myAmazonEKSClusterRole。选择 Delete role(删除角色),然后选择 Yes, Delete(是,删除)。删除您创建的 myAmazonEKSFargatePodExecutionRole myAmazonEKSNodeRole 角色以及 myAmazonEKSCNIRole 角色(如果您创建了一个)。

后续步骤

现在,您已有使用节点运行的 Amazon EKS 集群,那么就可以准备开始安装 Kubernetes 插件并将应用程序部署到您的集群。以下文档主题可帮助您扩展集群的此功能。