如何使用 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,選中Access key – 程式化存取選項,然後點擊下一步:權限

選擇Access key – 程式化存取選項是因為它可以通過應用程式直接與AWS通信以執行操作。

Configuring User Details

3. 點擊直接附加現有策略選項,選中AdministratorAccess策略,然後點擊下一步:標籤

AdministratorAccess策略允許用戶(K8-Admin)完全訪問AWS,並且還有以下權限:

Setting up AdministratorAccess policies

4. 點擊下一步:檢查跳過添加標籤。

Skipping the tags screen

5. 最後,查看用戶詳細信息,然後點擊創建用戶完成創建管理員用戶。

Creating the admin user

管理員用戶創建完成後,您將在屏幕頂部收到一條成功消息,如下所示。請注意Access key IDSecret存取密鑰,您稍後將使用這些密鑰進行登錄。

Previewing the admin user keys

啟動 EC2 實例

現在您已經建立了 K8-Admin,您可以創建您的第一個 EC2 實例。您將使用此實例作為主節點,在這裡運行命令以創建集群。

1. 在您的 EC2 儀表板上導航,點擊頁面的最右邊的EC2,然後點擊啟動實例。這樣會將您的瀏覽器重定向到一個頁面,您可以在該頁面上選擇Amazon Machine Image (AMI)(第二步)。

Launching an EC2 Instance

2. 接下來,點擊選擇,位於列表中的Amazon Linux 2 AMI (HVM)的右側,如下所示。

Amazon Linux 2 AMI (HVM) 配備了針對最新一代硬件的最佳性能調整的 Linux 內核。此 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)在添加存储页面,然后点击下一步添加标签。 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

現在您的實例正在運行,是時候配置命令行(CLI)工具了。將CLI工具與您的AWS帳戶配合使用對於創建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

6. 執行以下命令以執行以下操作,並更新您實例上的 AWS CLI 安裝路徑:

  • 在您的 Amazon Linux 2 實例上安裝更新的 AWS CLI 工具(sudo ./aws/install)。
  • 設置目錄(--install-dir /usr/bin/aws-cli),以安裝 CLI 工具。這樣做可以使您將更新的 AWS CLI 轉移到其他實例,而無需重新安裝 CLI 工具。
  • 使用新路徑更新您當前的 shell 環境,以便 AWS CLI 工具在當前環境中進行更新。
sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin/aws-cli --update
Installing the CLI tool v2

7. 重新執行以下aws --version命令,檢查已正確安裝更新的 AWS CLI。

aws --version

已安裝的 AWS CLI 版本為2.4.7,如下所示,該版本為撰寫時的最新 AWS CLI 版本為 2.4.7。

Checking the AWS CLI updated version

8. 接下來,執行aws configure命令,使用新的 AWS CLI 工具配置您的實例。

aws configure

按照以下提示輸入相應的值:

  • AWS Access Key ID [None] – 輸入您在前一部分“創建您的管理員用戶”中注意到的 Access Key ID。
  • AWS Secret Access Key [None] – 輸入您在前一部分“創建您的管理員用戶”中注意到的 Secret Access Key。
  • Default region name [None] – 選擇支持的區域,例如us-east-1
  • Default output format [None] – 輸入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命令,從GitHub檢索最新的eksctl版本到您的/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 命令來創建您的第一個集群,並執行以下操作:

  • 使用一個節點類型 t3.micro 和區域 us-east-1,創建一個名為 dev 的 3 節點 Kubernetes 集群。
  • 為此由 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,在安裝過程中自動接受所有提示(-y)。

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目錄,並創建(kubectl apply)一個NGINX服務(./nginx-svc.yaml)。

# 切換到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 命令來測試您的負載平衡器。將 <LOAD_BALANCER_DNS_HOSTNAME> 替換為您之前記錄的 DNS 名稱(第五步)。

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

您將獲得各種狀態,如 PendingRunningTerminating。為什麼?因為當您嘗試停止所有工作節點時,Kubernetes 檢測到失敗並迅速啟動另一個節點。

Checking the status of the worker node

3. 現在執行 kubectl get pod 命令測試高可用性的 Kubernetes 控制功能。

kubectl get pod

您可以在輸出中看到有三個新的 pod(根據其年齡識別)處於 Running 狀態。這些新的 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 集群上部署應用程序」部分的最後一步中所做的那樣。

結論

通過本教程,您已經學會如何在您的 AWS 環境中創建 EKS 集群,部署來自您容器的 NGINX 服務,並測試高可用性控制平面功能。

到目前為止,您應該對如何在您的 AWS 環境中創建 EKS 集群有了很好的理解。

你的下一步計劃是什麼呢?也許是學習如何使用Docker和K8s在AWS上部署一個NodeJS應用程式吧?

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