如果您是開發人員,通常希望將容器化應用部署到 Kubernetes。但問題是,如何?為什麼不試試 AWS EKS CLI 呢?
在本教程中,您將學習如何設置 AWS EKS CLI 來創建一個 Kubernetes 集群,這樣您就可以專注於代碼而不是管理基礎架構。
繼續閱讀,並開始今天創建您的集群!
先決條件
本教程將進行實際演示。如果您想跟著做,請確保您有一台電腦和一個 AWS 帳戶。如果您沒有 AWS 帳戶,可以使用免費的免費層帳戶。
創建管理員用戶
在創建 Kubernetes 集群之前,您將創建一個管理員用戶。管理員用戶允許您登錄 AWS 控制台以配置您的集群。通過 AWS 控制台創建一個具有管理員權限的用戶來開始這個教程。
1. 登錄您的 AWS 控制台,並導航到您的 IAM 面板。
點擊左側的 用戶 —> 頂部右側的 添加用戶 以初始化添加用戶。

2. 接下來,在用戶名欄位中提供一個用戶名,這裡使用K8-Admin,選中Access key – 程式化存取選項,然後點擊下一步:權限。
選擇Access key – 程式化存取選項是因為它可以通過應用程式直接與AWS通信以執行操作。

3. 點擊直接附加現有策略選項,選中AdministratorAccess策略,然後點擊下一步:標籤。
AdministratorAccess策略允許用戶(K8-Admin)完全訪問AWS,並且還有以下權限:
- 允許用戶使用CloudFormation
- 創建EC2實例和CloudWatch日誌
- 配置彈性負載均衡器。

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

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

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

啟動 EC2 實例
現在您已經建立了 K8-Admin,您可以創建您的第一個 EC2 實例。您將使用此實例作為主節點,在這裡運行命令以創建集群。
1. 在您的 EC2 儀表板上導航,點擊頁面的最右邊的EC2,然後點擊啟動實例。這樣會將您的瀏覽器重定向到一個頁面,您可以在該頁面上選擇Amazon Machine Image (AMI)(第二步)。

2. 接下來,點擊選擇,位於列表中的Amazon Linux 2 AMI (HVM)的右側,如下所示。
Amazon Linux 2 AMI (HVM) 配備了針對最新一代硬件的最佳性能調整的 Linux 內核。此 AMI 還具有生產級 Kubernetes 集群所需的許多功能。

3. 保留實例類型的默認值(t2.micro),然後點擊下一步:配置實例詳細信息以配置實例。

4. 啟用自動分配公共 IP選項,然後點擊下一步:添加存儲。此選項確保每個容器都可以訪問您的 Kubernetes 主節點和 EC2 實例的公共 IP。

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

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

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

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

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

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

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

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

7. 重新執行以下aws --version
命令,檢查已正確安裝更新的 AWS CLI。
已安裝的 AWS CLI 版本為2.4.7,如下所示,該版本為撰寫時的最新 AWS CLI 版本為 2.4.7。

8. 接下來,執行aws configure
命令,使用新的 AWS CLI 工具配置您的實例。
按照以下提示輸入相應的值:
- 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 一起使用的首選標準。

配置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
)
3. 最後,執行以下命令以確認您已成功安裝 eksctl
。
下面的輸出確認您已成功安裝 eksctl。

如果您是第一次使用 eksctl
,您可以執行以下命令以獲取所有支持的 eksctl
命令及其用法的列表。

配置您的 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
節點組的機器類型。

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
,在安裝過程中自動接受所有提示(-y
)。

2. 接下來,執行以下git clone
命令,從GitHub存儲庫克隆配置文件到當前目錄。 您將使用這些文件在您的pod上創建一個NGINX部署並創建一個負載均衡器(ELB)。

3. 執行以下命令進入ata-elk
目錄,並創建(kubectl apply
)一個NGINX服務(./nginx-svc.yaml
)。

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
命令來測試您的負載平衡器。將 <LOAD_BALANCER_DNS_HOSTNAME>
替換為您之前記錄的 DNS 名稱(第五步)。
您將在由 EKS 創建的 NGINX 服務的 NGINX 歡迎頁面中看到以下輸出。下面的輸出確認了您的負載平衡器正常運作,並且您可以訪問您的 NGINX pod。

9. 最後,為了進行雙重檢查,複製並粘貼負載平衡器的 DNS 名稱到一個新的瀏覽器標籤中。
您還將從 NGINX 獲得一個歡迎頁面,這表明您的應用程序正在運行。

測試高可用性的 Kubernetes 控制
現在您有一個正在運行的集群,您將測試 Kubernetes 控制平面是否高度可用。您的應用程序的正常運行時間取決於此功能。如果控制平面不工作,您的應用程序將停止運行,無法為用戶提供服務。
通過高度可用的 Kubernetes 控制功能,您可以增加應用程序的可用性。您將通過停止您的 EKS 工作節點來測試此功能,並查看 Kubernetes 是否啟動新節點以替換失敗的節點。
1. 在您的 EC2 控制台中,停止所有的 EKS 工作節點實例,如下圖所示。

2. 接下來,執行以下命令檢查工作節點的狀態。
您將獲得各種狀態,如 Pending、Running 和 Terminating。為什麼?因為當您嘗試停止所有工作節點時,Kubernetes 檢測到失敗並迅速啟動另一個節點。

3. 現在執行 kubectl get pod
命令測試高可用性的 Kubernetes 控制功能。
您可以在輸出中看到有三個新的 pod(根據其年齡識別)處於 Running 狀態。這些新的 pod 表明高可用性的 Kubernetes 控制功能正在按預期運作。

4. 執行下面的 kubectl get service
命令列出所有可用的服務。
您可以在下面看到 Kubernetes 建立了一個新的服務,負載平衡器的 DNS 名稱現在已經不同了。 kubectl get service

5. 最後,將負載平衡器的 DNS 名稱複製並粘貼到您的瀏覽器中。您將得到來自 NGINX 的歡迎頁面,就像在「在 EKS 集群上部署應用程序」部分的最後一步中所做的那樣。
結論
通過本教程,您已經學會如何在您的 AWS 環境中創建 EKS 集群,部署來自您容器的 NGINX 服務,並測試高可用性控制平面功能。
到目前為止,您應該對如何在您的 AWS 環境中創建 EKS 集群有了很好的理解。
你的下一步計劃是什麼呢?也許是學習如何使用Docker和K8s在AWS上部署一個NodeJS應用程式吧?