本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 ]
-
使用以下命令通过 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
如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群。
eksctl
在kubectl
中创建了config
~/.kube
文件或在config
中的现有~/.kube
文件中添加了新集群的配置。 -
测试配置。
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
eksctl
在kubectl
中创建了config
~/.kube
文件或在config
中的现有~/.kube
文件中添加了新集群的配置。
步骤 2:查看资源
-
查看集群节点。
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
有关此处看到的内容的更多信息,请参阅查看节点。
-
查看集群上运行的工作负载。
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 节点。
-
集群管理 – 了解如何使用重要工具来管理集群。