如何使用 AWS EKS CLI 创建 Kubernetes 集群

如果你是开发人员,通常会希望将容器化应用部署到Kubernetes上。但问题是,怎么做呢?为什么不尝试一下AWS EKS CLI呢?

在本教程中,您将学习如何设置AWS EKS CLI来创建一个Kubernetes集群,这样您就可以专注于编写代码,而不是管理基础设施。

继续阅读并开始创建您的集群吧!

先决条件

本教程将进行实际操作演示。如果您想跟着做,请确保您有一台个人电脑和一个AWS账户。如果您还没有AWS账户,可以使用免费套餐账户。免费套餐账户可供选择。

创建管理员用户

在创建Kubernetes集群之前,您需要创建一个管理员用户。管理员用户可以让您登录到AWS控制台以配置您的集群。通过AWS控制台创建一个具有管理员权限的用户来开始本教程。

1. 登录您的AWS控制台,然后导航到IAM仪表板。

点击下面显示的用户(左侧面板) —> 添加用户(右上角)开始添加用户。

Initializing User Creation

2. 接下来,在用户名字段中提供一个用户名,这里使用K8-Admin,选中访问密钥 – 编程访问选项,然后点击下一步:权限

选择访问密钥 – 编程访问选项,因为它可以通过程序直接与AWS通信执行操作。

Configuring User Details

3. 点击直接附加现有策略选项,选中AdministratorAccess策略,然后点击下一步:标签

策略AdministratorAccess赋予用户(K8-Admin)对AWS的完全访问权限,具体如下:

Setting up AdministratorAccess policies

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

Skipping the tags screen

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

Creating the admin user

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

Previewing the admin user keys

启动 EC2 实例

现在您已经创建了 K8-Admin,您可以创建您的第一个 EC2 实例。您将使用此实例作为您的主节点,在此节点上运行命令来创建集群。

1. 导航到您的 EC2 仪表板,点击页面右侧的 EC2,然后点击 启动实例。这样会将您的浏览器重定向到一个页面,在该页面上您可以选择一个 亚马逊机器镜像(AMI)(第二步)。

Launching an EC2 Instance

2. 接下来,点击列表中的 选择,位于右侧,选择 Amazon Linux 2 AMI(HVM),如下所示。

Amazon Linux 2 AMI(HVM) 提供了专为最新一代硬件优化的 Linux 内核 5.10。此 AMI 还具有生产级 Kubernetes 集群所需的许多功能。

Selecting Amazon Linux 2 AMI (HVM)

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

Previewing the instance type

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

Configuring instance details

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

Configuring the storage

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

Previewing the tags

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

Previewing the Security Group

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

Launching an instance

9. 在对话框中配置密钥对如下:

  • 在下拉框中选择创建新的密钥对
  • 选择RSA作为密钥对类型
  • 提供您首选的密钥对名称。但是在本教程中,密钥对名称设置为my-nvkp
  • 点击下载密钥对,然后点击启动实例
Creating a new key pair

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

Previewing the newly-created instance

配置AWS CLI工具

现在您的实例正在运行,是时候配置命令行(CLI)工具了。与您的AWS账户一起使用CLI工具对于创建Kubernetes集群至关重要。

1. 在您的EC2仪表板上,勾选选择实例的框,如下所示。单击连接以初始化连接到实例。

Connecting to the Ec2 instance.

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

Connecting to the instance

一旦连接到您的EC2实例,您的浏览器将重定向到下面显示的交互式终端,作为您与EC2实例的临时SSH会话。

交互式终端允许您连接到命令行并对新实例运行管理命令。

Previewing the interactive terminal

3. 运行下面的aws命令以检查您的CLI版本。

aws --version

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

Checking the AWS CLI version

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

 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 
Downloading the CLI tool v2+

5. 运行以下命令解压已下载的文件并确定过时的AWS CLI安装位置。

unzip awscliv2.zip
which aws

从下面的输出中可以看出,过时的AWS CLI已安装在/usr/bin/aws。您需要使用更新版本更新此路径。

Updating outdated AWS CLI

运行以下命令执行以下操作并在您的实例上更新AWS CLI的安装路径:

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

重新运行以下aws --version命令以检查更新后的AWS CLI是否已正确安装。

aws --version

如下所示,安装的AWS CLI版本为2.4.7,这是撰写时的最新AWS CLI版本为2.4.7。

Checking the AWS CLI updated version

接下来,运行aws configure命令以使用新的AWS CLI工具配置您的实例。

aws configure

按照以下提示输入相应的值:

  • AWS访问密钥ID [无]– 输入您在上一节“创建您的管理员用户”中记录的访问密钥ID。
  • AWS秘密访问密钥 [无]– 输入您在上一节“创建您的管理员用户”中记录的秘密访问密钥。
  • 默认区域名称 [无]– 选择一个受支持的区域,例如us-east-1
  • 默认输出格式 [无]– 输入json,因为JSON格式是与Kubernetes一起使用的首选标准。
Configuring the AWS Environment

配置 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
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/bin

3. 最后,运行以下命令确认您已成功安装eksctl

eksctl version

下面的输出确认您已成功安装eksctl

Checking the eksctl CLI tool version

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

eksctl --help
Previewing the eksctl help page

配置您的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节点组选择一个机器类型。
eksctl create cluster --name dev --version 1.21 --region us-east-1 --nodegroup-name standard-workers --node-type t3.micro --nodes 3 --nodes-min 1 --nodes-max 4 --managed
Provisioning your EKS Cluster

2. 转到您的CloudFormation仪表板,查看命令执行的操作。eksctl create cluster命令使用CloudFormation在您的AWS帐户中配置基础设施。

如下所示,正在创建一个名为 eksctl-dev-cluster 的 CloudFormation 堆栈。此过程可能需要 15 分钟或更长时间才能完成。

Previewing the eksctl-dev-cluster stack.

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

Navigating to the dev EKS Cluster dashboard.

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

Previewing the dev EKS Cluster dashboard.

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

Previewing the EC2 dashboard.

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

aws eks update-kubeconfig --name dev --region us-east-1
Updating kubectl config

在 EKS 集群上部署应用程序

您已经创建了您的 EKS 集群,并确认它正常运行。但是现在,EKS 集群只是闲置在一旁。对于此演示,您将利用 EKS 集群部署一个 NGINX 应用程序。

1. 运行以下yum命令以自动接受安装过程中的所有提示来安装 git

sudo yum install -y git
Installing Git

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

git clone https://github.com/Adam-the-Automator/aws-eks-cli.git
Cloning the configuration files

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

# 切换到 ata-elk 目录
cd ata-elk
# 将./nginx-svc.yaml中的配置应用到pod中
kubectl apply -f ./nginx-svc.yaml
Creating a service for NGINX

4. 接下来,运行kubectl get service检查NGINX服务的状态。

kubectl get service

如下所示,服务类型是负载均衡器,并且Kubernetes创建了一个服务(nginx-svc),这是您的NGINX部署。您还可以在EXTERNAL IP列下看到由EKS创建的负载均衡器的外部DNS主机名。

记下负载均衡器的外部DNS主机名,因为您稍后将需要它来测试负载均衡器。

Checking the status of your NGINX

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

kubectl apply -f ./nginx-deployment.yaml
Deploying the NGINX pods

6. 运行以下 kubectl get 命令来检查你的 NGINX deployment 和 NGINX pod 的状态。

kubectl get deployment
kubectl get pod

如下面的输出所示,你的部署中有三个 pod,而且全部都在运行。

Checking the status of the NGINX deployment and pods

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

kubectl get node
Check the status of your worker nodes

8. 现在,运行以下 curl 命令来测试你的负载均衡器。用你之前记录的 DNS 名称(步骤五)替换 <LOAD_BALANCER_DNS_HOSTNAME>

curl "<LOAD_BALANCER_DNS_HOSTNAME>"

你将会看到来自由 EKS 创建的 NGINX 服务的 NGINX 欢迎页面,如下所示。下面的输出确认了你的负载均衡器正常工作,而且你可以访问你的 NGINX pod。

Checking your load balancer

9. 最后,为了再次确认,复制并粘贴负载均衡器的 DNS 名称到一个新的浏览器选项卡中。

你还会收到来自 NGINX 的欢迎页面,这表明你的应用程序正在运行。

Checking your load balancer with a browser

测试高可用性的 Kubernetes 控制

现在你有一个运行中的集群,你将测试 Kubernetes 控制平面是否高可用。你的应用程序的正常运行取决于这个功能。如果控制平面不工作,你的应用程序将会停止,无法为用户提供服务。

通过高可用性的 Kubernetes 控制功能,你增加了应用程序的可用性。你将通过停止你的 EKS 工作节点来测试这个功能,并查看 Kubernetes 是否会启动新的节点来替换失败的节点。

1. 在你的 EC2 仪表板中,停止所有的 EKS 工作节点实例,如下所示。

Stopping all of your EKS worker node instances

2. 接下来,运行以下命令来检查工作节点的状态。

kubectl get node

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

Checking the status of the worker node

3. 现在运行kubectl get pod命令来测试高可用性的 Kubernetes 控制功能。

kubectl get pod

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

Checking the status of the pods

4. 运行以下kubectl get service命令来列出所有可用的服务。

您可以在下面看到 Kubernetes 创建了一个新的服务,负载均衡器的 DNS 名称现在已经不同了。kubectl get service

kubectl get service
Kubernetes has created a new service

5. 最后,复制并粘贴负载均衡器的 DNS 名称到您的浏览器中。您将会得到 NGINX 的欢迎页面,就像在“在 EKS 集群上部署应用程序”部分的最后一步中所做的那样。

结论

通过本教程,您已经学会了如何在 EKS 集群中创建一个 NGINX 服务,以及测试高可用性的控制平面功能。

到此为止,您应该对如何在您的 AWS 环境中创建 EKS 集群有了良好的理解。

接下来对你来说是什么?也许学习如何使用Docker和K8s在AWS上部署NodeJS应用

Source:
https://adamtheautomator.com/aws-eks-cli/