Amazon EKS – eksctl 入门 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Amazon EKS – eksctl 入门

本指南帮助您使用 Amazon Elastic Kubernetes Service(用于在 Amazon EKS 上创建和管理 Kubernetes 集群的简单命令行实用程序)创建开始使用 eksctl (Amazon EKS) 所需的所有资源。在本教程结束时,您将获得一个可以将应用程序部署到的正在运行的 Amazon EKS 集群。

本指南中的过程会自动为您创建几个资源,您在使用 AWS 管理控制台 创建集群时必须手动创建这些资源。如果您希望手动创建大多数资源以更好地了解它们之间的交互方式,请使用 AWS 管理控制台 创建集群和计算。有关更多信息,请参阅 Amazon EKS – AWS 管理控制台 和 AWS CLI 入门.

Prerequisites

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

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

  • eksctl 一种命令行工具,用于处理 EKS 集群,可自动执行许多单独的任务。–本指南要求您使用版本 0.35.0 或更高版本。有关更多信息,请参阅 eksctl 命令行实用程序.

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

步骤 1:创建 Amazon EKS 集群和节点

创建您的集群和节点。

重要

要想尽快开始,本主题介绍了使用默认设置创建集群和节点的步骤。在创建集群和节点用于生产用途之前,我们建议您熟悉所有设置,并部署具有满足您要求的设置的集群和节点。有关更多信息,请参阅 创建 Amazon EKS 集群Amazon EKS 个节点.

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

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

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

[ Fargate – Linux ]

  1. 使用以下命令通过 Amazon EKS 和 AWS Fargate 配置文件 创建 Pod 执行角色 集群。将 my-cluster 替换为您自己的值,并将 us-west-2 替换为任何 Amazon EKSFargate 支持的区域。如果您要部署到 非洲(开普敦)、亚太地区(香港)、欧洲(米兰) 或 中东(巴林) 区域,则必须为您的账户启用终端节点。有关更多信息,请参阅在 AWS STS 区域中激活和停用 AWS. 默认情况下,将为所有其他区域启用该终端节点。

    eksctl create cluster \ --name my-cluster \ --region us-west-2 \ --fargate

    上一个命令主要使用默认设置创建集群和 Fargate 配置文件。要查看创建的所有资源,请在 eksctl-<my-cluster>-cluster 控制台中查看名为 AWS CloudFormation 的堆栈。有关所有设置和选项的列表,请输入 eksctl create cluster -h。有关所有设置和选项的文档,请参阅 文档中的创建和管理集群eksctl

    输出

    创建集群和 Fargate 配置文件时,您将看到几行输出。创建过程需要几分钟时间。输出的最后一行类似于以下示例行。

    ... [✓] EKS cluster "my-cluster" in "us-west-2" region is ready

    如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群

    eksctlkubectl 中创建了 config ~/.kube 文件或在 config 中的现有 ~/.kube 文件中添加了新集群的配置。

  2. 测试配置。

    kubectl get svc

    输出

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

[ 托管节点 – Linux ]

  • 创建集群和 Linux 托管节点组。将 my-cluster 替换为您自己的值,并将 us-west-2 替换为任何 Amazon EKS 支持的区域如果您要部署到 非洲(开普敦)、亚太地区(香港)、欧洲(米兰) 或 中东(巴林) 区域,则必须为您的账户启用终端节点。有关更多信息,请参阅在 AWS STS 区域中激活和停用 AWS. 默认情况下,将为所有其他区域启用该终端节点。

    <your-key>(包括 <>)替换为现有密钥对的名称。如果您没有密钥对,则可以使用以下命令创建一个。如有必要,请将 us-west-2 更改为您在其中创建集群的 区域。请务必将返回输出保存在本地计算机上的文件中。有关更多信息,请参阅 中的创建或导入密钥对Amazon EC2 用户指南(适用于 Linux 实例)。

    虽然本指南中不需要密钥,但您只能在创建节点组时指定要使用的密钥。如果指定密钥,您可以在创建节点后通过 SSH 连接到节点。要运行命令,您需要具有 AWS CLI 版本 2.1.7 或更高版本或者 1.18.190 或更高版本。有关更多信息,请参阅 中的安装、更新和卸载 AWS CLIAWS Command Line Interface 用户指南。

    aws ec2 create-key-pair --region us-west-2 --key-name myKeyPair

    使用以下命令创建集群和节点。

    eksctl create cluster \ --name my-cluster \ --region us-west-2 \ --with-oidc \ --ssh-access \ --ssh-public-key <your-key> \ --managed

    上一个命令使用主要的默认 Amazon EKS 设置创建具有节点的集群。要查看创建的所有资源,请在 eksctl-<my-cluster>-cluster 上的 AWS CloudFormation 控制台中查看名为 https://console.amazonaws.cn/cloudformation 的堆栈。有关所有设置和选项的列表,请输入 eksctl create cluster -h。有关所有设置和选项的文档,请参阅 文档中的创建和管理集群eksctl

    输出

    在创建集群和节点时,您将看到几行输出。集群和节点创建需要几分钟时间。输出的最后一行类似于以下示例行。

    ... [✓] EKS cluster "my-cluster" in "us-west-2" region is ready

    eksctlkubectl 中创建了 config ~/.kube 文件或在 config 中的现有 ~/.kube 文件中添加了新集群的配置。

步骤 2:查看资源

  1. 查看集群节点。

    kubectl get nodes -o wide

    Amazon EC2 节点输出

    NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME ip-192-168-12-49.us-west-2.compute.internal Ready <none> 6m7s v1.18.9-eks-d1db3c 192.168.12.49 52.35.116.65 Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 docker://19.3.6 ip-192-168-72-129.us-west-2.compute.internal Ready <none> 6m4s v1.18.9-eks-d1db3c 192.168.72.129 44.242.140.21 Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 docker://19.3.6

    Fargate 节点输出

    NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME fargate-ip-192-168-141-147.us-west-2.compute.internal Ready <none> 8m3s v1.18.8-eks-7c9bda 192.168.141.147 <none> Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 containerd://1.3.2 fargate-ip-192-168-164-53.us-west-2.compute.internal Ready <none> 7m30s v1.18.8-eks-7c9bda 192.168.164.53 <none> Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 containerd://1.3.2

    有关此处看到的内容的更多信息,请参阅查看节点

  2. 查看集群上运行的工作负载。

    kubectl get pods --all-namespaces -o wide

    Amazon EC2 output

    NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system aws-node-6ctpm 1/1 Running 0 7m43s 192.168.72.129 ip-192-168-72-129.us-west-2.compute.internal <none> <none> kube-system aws-node-cbntg 1/1 Running 0 7m46s 192.168.12.49 ip-192-168-12-49.us-west-2.compute.internal <none> <none> kube-system coredns-559b5db75d-26t47 1/1 Running 0 14m 192.168.78.81 ip-192-168-72-129.us-west-2.compute.internal <none> <none> kube-system coredns-559b5db75d-9rvnk 1/1 Running 0 14m 192.168.29.248 ip-192-168-12-49.us-west-2.compute.internal <none> <none> kube-system kube-proxy-l8pbd 1/1 Running 0 7m46s 192.168.12.49 ip-192-168-12-49.us-west-2.compute.internal <none> <none> kube-system kube-proxy-zh85h 1/1 Running 0 7m43s 192.168.72.129 ip-192-168-72-129.us-west-2.compute.internal <none> <none>

    Fargate output

    NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system coredns-69dfb8f894-9z95l 1/1 Running 0 18m 192.168.164.53 fargate-ip-192-168-164-53.us-west-2.compute.internal <none> <none> kube-system coredns-69dfb8f894-c8v66 1/1 Running 0 18m 192.168.141.147 fargate-ip-192-168-141-147.us-west-2.compute.internal <none> <none>

    有关此处看到的内容的更多信息,请参阅查看工作负载

步骤 3:删除集群和节点

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

删除您的集群和节点。

eksctl delete cluster --name my-cluster

后续步骤

现在,您有一个带节点的工作 Amazon EKS 集群,您已准备好开始安装 Kubernetes 插件并将应用程序部署到集群。以下文档主题可帮助您扩展集群的此功能。

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

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

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

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

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