亚马逊 EKS 入门 — AWS 管理控制台和 AWS CLI - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊 EKS 入门 — AWS 管理控制台和 AWS CLI

本指南可帮助您创建要使用 AWS 管理控制台和 AWS CLI 开始使用 Amazon EAmazon Elastic Kubernetes Service 所需的所有资源。在本指南中,您将手动创建每个资源。本教程结束时,您将获得一个正在运行的 Amazon EKS 集群,您可以向其部署应用程序。

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

Prerequisites

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

  • AWS CLI— 用于使用 AWS 服务(包括 Amazon EKS)的命令行工具。本指南要求您使用 2.1.26 或更高版本或 1.19.7 或更高版本。有关更多信息,请参阅 。安装、更新和卸载 AWS CLI在 AWS 命令行界面用户指南中。在安装 AWS CLI 后,建议您还对其进行配置。有关更多信息,请参阅 。使用 AWS 配置进行快速配置在 AWS 命令行界面用户指南中。

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

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

步骤 1: 创建 Amazon EKS 群集

创建 Amazon EKS 群集。

重要

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

创建您的集群集群

  1. 使用符合 Amazon EKS 要求的公有和私有子网创建 Amazon VPC。

    aws cloudformation create-stack \ --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
  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. 从打开 Amazon EKS 控制台https://console.aws.amazon.com/eks/home#/clusters

    请确保在您的主机右上角选择的区域北京。如果没有,请选择区域名称旁边的下拉列表,然后选择中国(北京)。尽管您可以在任何Amazon EKS 支持的区域,在本教程中,它是在中国(北京)

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

  5. 在存储库的配置群集页面输入集群的名称,例如 my-cluster (my-cluster) ,然后选择 我的亚马逊群集角色 对于 来说为集群服务角色。将剩余设置保留为默认值,然后选择下一步

  6. 在存储库的指定网络页面上,选择vpc-00x0000x000x0x000 | my-eks-vpc-stack-VPC来自 的VPC下拉列表中)。将剩余设置保留为默认值,然后选择下一步

  7. 在存储库的配置日志记录页面上,选择下一步

  8. 在存储库的审核和创建页面上,选择Create

    集群名称右侧的群集状态为创建,直至集群配置过程完成。请勿继续执行下一步,直到该状态变为处于活动状态

    注意

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

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

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

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

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

    aws eks update-kubeconfig \ --region us-west-2 \ --name my-cluster

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

  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. 选择配置” 选项卡。

  2. 详细信息部分中,复制OpenID Connect

  3. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  4. 在导航面板中,选择身份提供商

  5. 选择添加提供程序

  6. 适用于提供商类型中,选择OpenID Connect

  7. 适用于提供商 URL,请从步骤 2 中粘贴集群的 OIDC 提供商 URL,然后选择获取指纹

  8. 适用于受众,输入sts.amazonaws.com,然后选择添加提供程序

步骤 4: 创建节点

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

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

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

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

Fargate – Linux

创建 Fargate 配置文件。当部署 Kubernetes 窗格时使用的条件符合配置文件中定义的条件时,这些窗格将部署到 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. 从打开 Amazon EKS 控制台https://console.aws.amazon.com/eks/home#/clusters

  3. 选择要为其创建 Fargate 配置文件的集群,并选择配置选项卡,然后计算” 选项卡。

  4. UNERFargate 配置文件中,选择添加 Fargate 配置文件

  5. 在存储库的配置 Fargate 配置文件页面上,输入以下信息并选择下一步

    1. 适用于名称中,为 Fargate 配置文件输入唯一名称,例如 my-profile.

    2. 适用于Pod 执行角色中,选择 我的亚马逊网关解决方案角色 角色。

    3. 选择Subnets下拉列表并取消选择任何具有Public以其名称。Fargate 上运行的窗格仅支持私有子网。

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

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

  7. 在存储库的审核和创建页面上,查看 Fargate 配置文件的信息,然后选择Create

Managed nodes – Linux

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

创建您的 Amazon EC2 Linux 托管节点组

  1. 为 Amazon VPC CNI 插件创建 IAM 角色,并将所需的 Amazon EKS IAM 托管策略附加到其中。默认情况下,亚马逊 EKS 亚马逊 VPC CNI 插件安装在集群上。该插件允许 Kubernetes Pod 在 Pod 内具有与其在 VPC 网络上相同的 IP 地址。

    1. 将以下内容复制到名为的文件中cni-role-trust-policy.json。Replace<111122223333>(包括<>),然后将替换为您的账户 ID<XXXXXXXXXX45D83924220DC4815XXXXX>替换为最后一个/OpenID Connect

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.cn-north-1.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.cn-north-1.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 角色相关联。Replace<111122223333>(包括<>),并输入您的账户 ID。

    aws eks update-addon \ --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. 从打开 Amazon EKS 控制台https://console.aws.amazon.com/eks/home#/clusters

  5. 选择您在中创建的集群的名称步骤 1: 创建 Amazon EKS 群集之外的压缩算法(例如 my-cluster (my-cluster).

  6. 选择配置” 选项卡。

  7. 在存储库的配置选项卡上,选择计算选项卡,然后选择Add 节点组

  8. 在存储库的配置节点组页面上,填写相应参数,接受剩余默认值,然后选择下一步

    • 名称— 为托管节点组输入唯一名称,例如my-nodegroup

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

  9. 在存储库的设置计算和扩展配置页面上,接受默认值并选择下一步

  10. 在存储库的指定网络页面上,选 key pair 用于SSH key pair,然后选择下一步。如果还没有 key pair,您可以使用下面的命令进行创建。如果需要,可以更改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. 几分钟后,状态中的节点组配置部分将从创建处于活动状态。请勿继续执行下一步,直到该状态变为处于活动状态

步骤 5: 查看资源

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

查看您的节点

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

  2. 在存储库的概述选项卡上,您可以看到节点为群集部署的。您可以选择节点的名称以查看有关该节点的详细信息。有关您在此处看到的更多信息,请参阅View 节点

  3. 在存储库的工作负载选项卡上,您将看到默认情况下部署到 Amazon EKS 群集的工作负载列表。您可以选择工作负载的名称以查看有关该工作量的详细信息。有关您在此处看到的更多信息,请参阅查看工作负载

步骤 6:删除群集和节点

在您完成为本教程创建的集群和节点的操作后,应通过删除集群和节点进行清除。如果在清除该集群前要对其执行更多操作,请参阅后续步骤

删除集群和节点

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

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

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

    3. 选择配置” 选项卡。在存储库的计算选项卡上,选择:

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

      • 这些区域有:Fargate 配置文件在上一步中创建的,并选择Delete。输入配置文件的名称,然后选择。Delete

  2. 请删除集群。

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

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

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

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

    1. 打开 AWS CloudFormation 控制台 (https://console.aws.amazon.com/cloudformation)。

    2. 选择要删除的 VPC 堆栈,然后选择Delete

    3. 在存储库的删除堆栈确认屏幕上,选择删除堆栈

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

    1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

    3. 选择myAmazonEKSClusterRole从列表中。Select删除角色,然后选择是,删除。删除存储在设备上的myAmazonEKSFargatePodExecutionRole 或者 myAmazonEKSNodeRole角色和myAmazonEKSCNIRole角色(如果您创建了一个)。

后续步骤

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

  • 创建集群的 IAM 实体(用户或角色)将添加到 Kubernetes RBAC 授权表作为管理员(使用system:masters权限)。最初,仅该 IAM 用户可以使用调用 Kubernetes API 服务器。kubectl。如果您希望其他用户有权访问集群,则您必须将这些用户添加到aws-auth ConfigMap。有关更多信息,请参阅 管理集群的用户或 IAM 角色

  • 限制对 IMDS 的访问— 如果您计划将 IAM 角色分配给所有 Kubernetes 服务账户,以便容器只具有所需的最低权限,并且集群中没有容器因其他原因(如检索当前区域)需要访问 Amazon EC2 实例元数据服务 (IMDS),那么我们建议您使用阻止对 IMDS 的容器访问。有关更多信息,请参阅 服务账户的 IAM 角色限制对 IMDS 和 Amazon EC2 实例配置文件证书的访问

  • Cluster Autoscaler— 配置 Kubernetes Cluster Autoscaler 自动调整节点组中的节点数。

  • 部署示例 Linux 工作负载— 部署示例 Linux 应用程序以测试您的集群和 Linux 节点。

  • 集群管理— 了解如何使用重要工具来管理集群。