如果你是开发人员,通常会希望将容器化应用部署到Kubernetes上。但问题是,怎么做呢?为什么不尝试一下AWS EKS CLI呢?
在本教程中,您将学习如何设置AWS EKS CLI来创建一个Kubernetes集群,这样您就可以专注于编写代码,而不是管理基础设施。
继续阅读并开始创建您的集群吧!
先决条件
本教程将进行实际操作演示。如果您想跟着做,请确保您有一台个人电脑和一个AWS账户。如果您还没有AWS账户,可以使用免费套餐账户。免费套餐账户可供选择。
创建管理员用户
在创建Kubernetes集群之前,您需要创建一个管理员用户。管理员用户可以让您登录到AWS控制台以配置您的集群。通过AWS控制台创建一个具有管理员权限的用户来开始本教程。
1. 登录您的AWS控制台,然后导航到IAM仪表板。
点击下面显示的用户(左侧面板) —> 添加用户(右上角)开始添加用户。

2. 接下来,在用户名字段中提供一个用户名,这里使用K8-Admin,选中访问密钥 – 编程访问选项,然后点击下一步:权限。
选择访问密钥 – 编程访问选项,因为它可以通过程序直接与AWS通信执行操作。

3. 点击直接附加现有策略选项,选中AdministratorAccess策略,然后点击下一步:标签。
策略AdministratorAccess赋予用户(K8-Admin)对AWS的完全访问权限,具体如下:
- 允许用户使用CloudFormation
- 创建EC2实例和CloudWatch日志
- 配置弹性负载均衡器。

4. 点击下一步:审阅跳过添加标签。

5. 最后,审查用户详细信息,然后点击创建用户完成管理员用户的创建。

一旦管理员用户创建完成,您将在屏幕顶部收到成功的消息,类似下面的消息。注意访问密钥ID和秘密 访问密钥,您将在稍后用这些密钥登录。

启动 EC2 实例
现在您已经创建了 K8-Admin,您可以创建您的第一个 EC2 实例。您将使用此实例作为您的主节点,在此节点上运行命令来创建集群。
1. 导航到您的 EC2 仪表板,点击页面右侧的 EC2,然后点击 启动实例。这样会将您的浏览器重定向到一个页面,在该页面上您可以选择一个 亚马逊机器镜像(AMI)(第二步)。

2. 接下来,点击列表中的 选择,位于右侧,选择 Amazon Linux 2 AMI(HVM),如下所示。
Amazon Linux 2 AMI(HVM) 提供了专为最新一代硬件优化的 Linux 内核 5.10。此 AMI 还具有生产级 Kubernetes 集群所需的许多功能。

3. 对于实例类型保持默认值(t2.micro),然后点击 下一步:配置实例详情 来配置实例。

4. 启用 自动分配公共 IP 选项,然后点击 下一步:添加存储。此选项确保您的每个容器都可以访问您的 Kubernetes 主节点和您的 EC2 实例的公共 IP。

5. 在添加存储页面中保留默认设置(Root),然后点击下一步: 添加标签。 根卷需要用于在实例内读写数据。

6. 跳过添加标签,然后点击下一步: 配置安全组。

7. 保持安全组的默认设置,如下所示,然后点击审核并启动。

8. 审核实例启动详情,然后点击启动以启动实例。将会弹出一个窗口,您可以选择选择一个现有的密钥对或创建一个新的(第九步)。

9. 在对话框中配置密钥对如下:
- 在下拉框中选择创建新的密钥对。
- 选择RSA作为密钥对类型。
- 提供您首选的密钥对名称。但是在本教程中,密钥对名称设置为my-nvkp。
- 点击下载密钥对,然后点击启动实例。

您的实例可能需要一两分钟才能完全启动。一旦您的实例运行起来,您将在您的EC2仪表板中看到它,如下所示。

配置AWS CLI工具
现在您的实例正在运行,是时候配置命令行(CLI)工具了。与您的AWS账户一起使用CLI工具对于创建Kubernetes集群至关重要。
1. 在您的EC2仪表板上,勾选选择实例的框,如下所示。单击连接以初始化连接到实例。

2. 接下来,单击连接按钮,以连接到您在第一步中先前选择的实例。

一旦连接到您的EC2实例,您的浏览器将重定向到下面显示的交互式终端,作为您与EC2实例的临时SSH会话。
交互式终端允许您连接到命令行并对新实例运行管理命令。

3. 运行下面的aws
命令以检查您的CLI版本。
从下面的输出中可以看出,您正在运行Amazon Linux 2实例上的版本1.18.147,该版本已过时。您需要下载并安装AWS CLI版本2+,以确保您可以访问所有Kubernetes功能(第三步)。

4. 现在,运行下面的curl
命令以下载CLI工具v2+并将其保存在名为awscliv2.zip
的zip文件中。

5. 运行以下命令解压已下载的文件并确定过时的AWS CLI安装位置。
从下面的输出中可以看出,过时的AWS CLI已安装在/usr/bin/aws。您需要使用更新版本更新此路径。

运行以下命令执行以下操作并在您的实例上更新AWS CLI的安装路径:
- 在您的Amazon Linux 2实例上安装更新后的AWS CLI工具(
sudo ./aws/install
)。 - 设置目录(
--install-dir /usr/bin/aws-cli
),用于安装CLI工具。这样做可以让您在其他实例上传输更新后的AWS CLI而无需重新安装CLI工具。 - 如果您当前的环境中有AWS CLI工具的新路径,则更新(
--update
)您当前的shell环境。

重新运行以下aws --version
命令以检查更新后的AWS CLI是否已正确安装。
如下所示,安装的AWS CLI版本为2.4.7,这是撰写时的最新AWS CLI版本为2.4.7。

接下来,运行aws configure
命令以使用新的AWS CLI工具配置您的实例。
按照以下提示输入相应的值:
- AWS访问密钥ID [无]– 输入您在上一节“创建您的管理员用户”中记录的访问密钥ID。
- AWS秘密访问密钥 [无]– 输入您在上一节“创建您的管理员用户”中记录的秘密访问密钥。
- 默认区域名称 [无]– 选择一个受支持的区域,例如us-east-1。
- 默认输出格式 [无]– 输入json,因为JSON格式是与Kubernetes一起使用的首选标准。

配置 Amazon EKS 命令行工具(eksctl)
由于您的目标是使用 AWS EKS CLI 创建 Kubernetes 集群,您还将配置 Amazon EKS(eksctl) 命令行工具。该工具允许您在 Amazon EKS 上创建和管理 Kubernetes 集群。
1. 在您的 EC2 实例上安装最新版本 Kubernetes 命令行工具(kubectl)。该工具允许您针对 Kubernetes 集群运行命令。
2. 接下来,运行下面的 curl
命令,将最新的 eksctl
发布版从 GitHub 检索到您的 /tmp 目录中作为 .tar.gz 文件,然后将存档内容解压缩到 /tmp 目录中。
运行以下命令执行以下操作:
- 从 GitHub 检索最新的
eksctl
发布版(--location
)为 .tar.gz 存档("<https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$>(uname -s)_amd64.tar.gz"
) - 将存档内容解压缩到 /tmp 目录中(
tar xz -C /tmp
),同时使用--silent
标志来抑制命令的进度输出。 - 移动(
sudo mv
)eksctl 二进制文件(/tmp/eksctl
)到您安装 AWS CLI 的路径(/usr/bin
)
3. 最后,运行以下命令确认您已成功安装eksctl
。
下面的输出确认您已成功安装eksctl。

如果您是eksctl
的新用户,可以运行以下命令获取所有支持的eksctl
命令及其用法的列表。

配置您的EKS集群
现在您已经配置了eksctl,您可以使用eksctl
命令来创建您的第一个EKS集群。
运行以下eksctl
命令来创建您的第一个集群并执行以下操作:
- 创建一个名为
dev
的3节点Kubernetes集群,其中一个节点类型为t3.micro
,区域为us-east-1
。 - 为此由EKS管理的节点组定义至少一个节点(
--nodes-min 1
)和最多四个节点(--nodes-max 4
)。节点组的名称为standard-workers
。 - 创建一个名为
standard-workers
的节点组,并为standard-workers
节点组选择一个机器类型。

2. 转到您的CloudFormation仪表板,查看命令执行的操作。eksctl create cluster
命令使用CloudFormation在您的AWS帐户中配置基础设施。
如下所示,正在创建一个名为 eksctl-dev-cluster 的 CloudFormation 堆栈。此过程可能需要 15 分钟或更长时间才能完成。

3. 现在,导航至您的 EKS 仪表板,您将看到一个名为 dev 的集群已被创建。单击 dev 超链接以访问 dev 的 EKS 集群仪表板。

如下,您可以查看 dev 的 EKS 集群详情,例如 节点名称、实例类型、节点组 和 状态。

4. 切换到您的 EC2 仪表板,您将看到有四个节点正在运行,其中三个在您的 AWS 账户中具有 t3.micro 角色(三个工作节点和一个主节点)。

5. 最后,运行以下命令来更新您的 kubectl 配置(update-kubeconfig
)以使用您的集群终端节点、证书和凭证。

在 EKS 集群上部署应用程序
您已经创建了您的 EKS 集群,并确认它正常运行。但是现在,EKS 集群只是闲置在一旁。对于此演示,您将利用 EKS 集群部署一个 NGINX 应用程序。
1. 运行以下yum
命令以自动接受安装过程中的所有提示来安装
git
。

2. 接下来,运行以下git clone
命令,从GitHub仓库克隆配置文件到当前目录。您将使用这些文件在您的pod上创建一个NGINX部署,并创建一个负载均衡器(ELB)。

3. 运行以下命令进入ata-elk
目录,并为NGINX创建一个服务(./nginx-svc.yaml
)(kubectl apply
)。

4. 接下来,运行kubectl get service
检查NGINX服务的状态。
如下所示,服务类型是负载均衡器,并且Kubernetes创建了一个服务(nginx-svc),这是您的NGINX部署。您还可以在EXTERNAL IP列下看到由EKS创建的负载均衡器的外部DNS主机名。
记下负载均衡器的外部DNS主机名,因为您稍后将需要它来测试负载均衡器。

5. 运行以下kubectl
命令部署NGINX pod。

6. 运行以下 kubectl get
命令来检查你的 NGINX deployment
和 NGINX pod
的状态。
如下面的输出所示,你的部署中有三个 pod,而且全部都在运行。

7. 接下来,运行 kubectl get node
命令来检查你的工作节点的状态。

8. 现在,运行以下 curl
命令来测试你的负载均衡器。用你之前记录的 DNS 名称(步骤五)替换 <LOAD_BALANCER_DNS_HOSTNAME>
。
你将会看到来自由 EKS 创建的 NGINX 服务的 NGINX 欢迎页面,如下所示。下面的输出确认了你的负载均衡器正常工作,而且你可以访问你的 NGINX pod。

9. 最后,为了再次确认,复制并粘贴负载均衡器的 DNS 名称到一个新的浏览器选项卡中。
你还会收到来自 NGINX 的欢迎页面,这表明你的应用程序正在运行。

测试高可用性的 Kubernetes 控制
现在你有一个运行中的集群,你将测试 Kubernetes 控制平面是否高可用。你的应用程序的正常运行取决于这个功能。如果控制平面不工作,你的应用程序将会停止,无法为用户提供服务。
通过高可用性的 Kubernetes 控制功能,你增加了应用程序的可用性。你将通过停止你的 EKS 工作节点来测试这个功能,并查看 Kubernetes 是否会启动新的节点来替换失败的节点。
1. 在你的 EC2 仪表板中,停止所有的 EKS 工作节点实例,如下所示。

2. 接下来,运行以下命令来检查工作节点的状态。
您将会得到一系列状态,如待处理、运行中和终止中。为什么呢?因为当您试图停止所有工作节点时,Kubernetes会检测到故障并迅速启动另一个节点。

3. 现在运行kubectl get pod
命令来测试高可用性的 Kubernetes 控制功能。
您可以在输出中看到有三个新的 pod(通过年龄标识),处于运行中状态。这些新的 pod 表明高可用性的 Kubernetes 控制功能正在按预期工作。

4. 运行以下kubectl get service
命令来列出所有可用的服务。
您可以在下面看到 Kubernetes 创建了一个新的服务,负载均衡器的 DNS 名称现在已经不同了。kubectl get service

5. 最后,复制并粘贴负载均衡器的 DNS 名称到您的浏览器中。您将会得到 NGINX 的欢迎页面,就像在“在 EKS 集群上部署应用程序”部分的最后一步中所做的那样。
结论
通过本教程,您已经学会了如何在 EKS 集群中创建一个 NGINX 服务,以及测试高可用性的控制平面功能。
到此为止,您应该对如何在您的 AWS 环境中创建 EKS 集群有了良好的理解。
接下来对你来说是什么?也许学习如何使用Docker和K8s在AWS上部署NodeJS应用?