在雲端原生時代,Kubernetes 已成為容器協調的首選平台。AWS EKS 提供了託管的 Kubernetes 服務,簡化了叢集的佈署和管理。本文將引導您在 AWS 上建立 EKS 叢集,並組態必要的工具,包含 AWS CLI 和 eksctl,讓您能更有效率地管理 Kubernetes 資源。透過逐步的指令和程式碼範例,您將能快速建立一個功能完善的 EKS 叢集,並為後續的應用程式佈署做好準備。此方法能有效降低管理 Kubernetes 控制平面元件的負擔,並整合 AWS 生態系中的其他服務,例如 IAM、Route 53 和 EC2 Auto Scaling 等,提供更彈性且穩定的叢集環境。
在 Amazon Web Services 上使用 Amazon Elastic Kubernetes Service 啟動 Kubernetes 叢集
讓我們繼續上一章的學習內容。在上一章中,我們在公有雲上啟動了一個 Kubernetes 叢集,邁出了在「三大」公有雲供應商之一上執行 Kubernetes 的第一步。現在,我們已經瞭解了 Google Cloud Platform(GCP)的 Kubernetes 服務,接下來將轉向 Amazon Web Services(AWS)的 Amazon Elastic Kubernetes Service(EKS)。
在本章中,您將學習如何在 macOS、Windows 和 Linux 上設定 AWS 賬戶並安裝支援工具集,然後最終啟動並與 Amazon EKS 叢集互動。我們將在本章中涵蓋以下主題:
- 什麼是 Amazon Web Services 和 Amazon Elastic Kubernetes Service?
- 準備本地環境
- 啟動您的 Amazon Elastic Kubernetes Service 叢集
- 佈署工作負載並與您的叢集互動
- 刪除您的 Amazon Elastic Kubernetes Service 叢集
技術需求
如果您計劃跟隨本章的內容,您將需要一個具有有效付款方式的 AWS 賬戶。
什麼是 Amazon Web Services 和 Amazon Elastic Kubernetes Service?
您可能已經聽說過 Amazon Web Services,或簡稱 AWS。截至2024年6月,AWS 是最早的公有雲供應商之一,並且擁有最大的市占率:31%,微軟 Azure 以 25% 位居第二,GCP 以 11% 位居第三。
Amazon Web Services
正如您可能已經猜到的,Amazon 擁有並營運 AWS。最初,Amazon 在2000年開始嘗試雲端服務,為其零售合作夥伴開發和佈署應用程式介面(APIs)。此後,AWS 已發展成為全球雲端運算的長官者,為各個行業的大小企業提供服務。
Chris Pinkham 和 Benjamin Black 在2003年撰寫了一份白皮書,並於2004年獲得 Jeff Bezos 的批准,該白皮書描述了一個基礎設施平台,可以透過程式設計方式佈署運算和儲存資源。
AWS 的首次公開宣告是在2004年底;然而,當時使用的術語是用來描述一系列允許第三方與 Amazon 零售產品目錄互動的工具和 APIs,而不是我們今天所知道的 AWS。
直到2006年,AWS 才重新推出,首先在3月推出了 Simple Storage Service(S3)。這項服務允許開發人員使用網頁 API 寫入和提供單個檔案,而不是從傳統的本地或遠端檔案系統讀取和寫入。
Amazon Elastic Kubernetes Service
雖然 AWS 是最早的主要公有雲供應商之一,但它卻是最後一個推出獨立 Kubernetes 服務的供應商。Amazon EKS 在2017年底首次宣佈,並於2018年6月在美國(US)東部(N. Virginia)和西部(Oregon)地區正式推出。
該服務旨在與其他 AWS 服務和功能協同工作,例如:
- AWS Identity and Access Management(IAM)允許您控制和管理終端使用者和程式化存取其他 AWS 服務。
- Amazon Route 53 是 Amazon 的網域名稱系統(DNS)服務。Amazon EKS 可以將其用作叢集的 DNS 源,這意味著服務發現和路由可以輕鬆地在您的叢集內進行管理。
- Amazon Elastic Block Store(EBS):如果您需要在 Amazon EKS 叢集中為容器提供永續性區塊儲存,Amazon EBS 提供此類別儲存,就像為您的 EC2 運算資源一樣。
- EC2 Auto Scaling:如果您的叢集需要擴充套件,則採用相同的技術來擴充套件您的 EC2 例項。
- 多可用區(AZs)可以是一個有用的功能。Amazon EKS 管理階層和叢集節點可以組態為在給定區域內的多個 AZs 中分佈,以為您的佈署帶來高用性(HA)和彈性。
在啟動我們的 Amazon EKS 叢集之前,我們需要下載、安裝和組態一些工具。您可能已經注意到,到目前為止已經提到的服務,但為什麼在 AWS 中執行的服務都以 Amazon 或 AWS 為字首?其實,以 Amazon 為字首的服務是獨立的服務,而以 AWS 為字首的服務則是設計用於與以 Amazon 為字首的服務一起使用的服務。
程式碼範例
aws eks create-cluster --name my-eks-cluster --role-arn arn:aws:iam::123456789012:role/eks-service-role --resources-vpc-config securityGroupIds=sg-12345678,subnetIds=subnet-12345678
內容解密:
此命令用於在 AWS 上建立一個新的 EKS 叢集。其中:
aws eks create-cluster是建立 EKS 叢集的命令。--name my-eks-cluster指定了叢集的名稱為my-eks-cluster。--role-arn arn:aws:iam::123456789012:role/eks-service-role指定了用於 EKS 叢集的 IAM 角色 ARN。--resources-vpc-config用於組態叢集的 VPC 設定,包括安全組 ID 和子網路 ID。
圖表說明
此圖示展示了在 AWS 上建立 EKS 叢集的主要步驟,包括檢查 IAM 角色、組態 VPC 設定、建立叢集以及驗證叢集狀態等過程。圖表清晰地呈現了建立過程中的邏輯順序和關鍵節點,有助於讀者理解整個流程。
重點整理
本章主要介紹瞭如何在 AWS 上使用 Amazon EKS 啟動 Kubernetes 叢集。首先,我們瞭解了 AWS 和 Amazon EKS 的基本概念和歷史背景。然後,我們討論了啟動 EKS 叢集前的準備工作,包括下載、安裝和組態必要的工具。最後,我們透過一個具體的命令示例展示瞭如何建立 EKS 叢集,並使用 Plantuml 圖表闡述了建立過程中的關鍵步驟。
在 Amazon Web Services 上使用 Amazon Elastic Kubernetes Service 啟動 Kubernetes 叢集
準備本地環境
在開始之前,我們需要安裝兩個命令列工具。首先,我們來討論如何註冊一個新的 AWS 帳戶。如果您已經有 AWS 帳戶,請跳過此步驟,直接進入「安裝 AWS 命令列介面」章節。
註冊 AWS 帳戶
註冊 AWS 帳戶的過程非常簡單,按照以下步驟進行:
- 前往 https://aws.amazon.com/,點選右上角的「Create an AWS account」按鈕。
- 填寫初始表格,包括您的電子郵件地址和所選的 AWS 帳戶名稱。電子郵件地址將用於帳戶還原和一些基本的管理功能。驗證您的電子郵件地址後,您將被要求為您的「root」帳戶設定密碼。
- 輸入密碼後,點選「Continue」並按照螢幕上的指示完成剩下的步驟。這些步驟包括確認您的付款詳細資訊和身份驗證,透過自動化的電話呼叫完成。
一旦您建立並啟用了您的帳戶,您將收到通知,可以開始使用 AWS 服務。大多數情況下,這將是立即生效,但最長可能需要 48 小時。
安裝 AWS 命令列介面
接下來,我們需要安裝 AWS 命令列介面(CLI)。我們將針對 Windows、Linux 和 macOS 三個平台進行安裝。
在 macOS 上安裝
使用 Homebrew 在 macOS 上安裝 AWS CLI 非常簡單,只需執行以下命令:
$ brew install awscli
安裝完成後,執行以下命令檢查版本號:
$ aws --version
在 Linux 上安裝
雖然各個發行版都有可用的套件,但最簡單的安裝 AWS CLI 的方法是下載並執行安裝程式。
執行以下命令下載並安裝 AWS CLI:
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
安裝完成後,您應該能夠執行 aws --version 命令,輸出結果與 macOS 和 Windows 版本類別似。
在 Windows 上安裝
與 macOS 類別似,您可以使用套件管理器安裝 AWS CLI。在這裡,我們使用 Chocolatey。執行以下命令:
$ choco install awscli
安裝完成後,執行 aws --version 命令,您將看到類別似於 macOS 的輸出結果。
AWS CLI 組態
安裝並檢查 AWS CLI 後,您需要將本地 CLI 安裝與您的 AWS 帳戶連結。為此,您需要登入 AWS 控制檯,網址為 http://console.aws.amazon.com/。
登入後,在頂部左側的搜尋框中輸入「IAM」,然後點選「IAM Identity Center」服務連結。
我們需要建立一個具有程式化存取許可權的使用者。按照以下步驟進行:
根據您的 AWS 帳戶年齡或存取級別,您可能需要啟用 IAM Identity Center。按照螢幕上的指示啟用該服務。
啟用 IAM Identity Center 後,我們需要建立一個具有程式化存取許可權的使用者。在頂部選單的搜尋框中再次搜尋「IAM」,然後選擇「IAM」,點選「Users」,然後點選「Create user」按鈕。
輸入使用者名稱「ekscluster」,確保不選擇「Provide user access to the AWS Management Console – optional」選項,然後點選「Next」。
此圖示
@startuml skinparam backgroundColor #FEFEFE skinparam componentStyle rectangle
title AWS EKS 叢集啟動與佈署
package “Kubernetes Cluster” { package “Control Plane” { component [API Server] as api component [Controller Manager] as cm component [Scheduler] as sched database [etcd] as etcd }
package "Worker Nodes" {
component [Kubelet] as kubelet
component [Kube-proxy] as proxy
package "Pods" {
component [Container 1] as c1
component [Container 2] as c2
}
}
}
api –> etcd : 儲存狀態 api –> cm : 控制迴圈 api –> sched : 調度決策 api –> kubelet : 指令下達 kubelet –> c1 kubelet –> c2 proxy –> c1 : 網路代理 proxy –> c2
note right of api 核心 API 入口 所有操作經由此處 end note
@enduml
此圖示顯示了建立使用者的流程。
4. 選擇「Attach existing policies directly」,選擇「AdministratorAccess」策略,然後點選「Next」。
5. 檢視資訊後,點選「Create user」按鈕。建立使用者後,選擇「ekscluster」使用者,點選「Security credentials」標籤,然後點選「Create access key」按鈕。選擇「Command Line Interface (CLI)」並按照指示建立存取金鑰。下載 CSV 檔案並點選「Done」。
#### 內容解密:
- **建立具有程式化存取許可權的使用者**:這是為了讓 AWS CLI 能夠存取您的 AWS 帳戶。
- **選擇 AdministratorAccess 策略**:這是一個寬鬆的策略,允許使用者對 AWS 資源進行廣泛的存取。在生產環境中,您應該根據實際需求選擇合適的策略。
- **下載 CSV 檔案**:這包含了您的存取金鑰,請妥善保管。
由於這是在非生產環境中的測試,我使用了相當寬鬆的策略。如果您要在更接近生產的環境中佈署,我建議參考 AWS 檔案以取得更詳細的,瞭解如何設定正確的許可權和策略。
請妥善保管您下載的檔案,因為它包含了有效的憑證,可以存取您的 AWS 帳戶。
## 在 Amazon Web Services 上使用 Amazon Elastic Kubernetes Service 啟動 Kubernetes 叢集
在上一章節中,我們已經設定好了 AWS CLI。現在,讓我們繼續在 Amazon Web Services(AWS)上使用 Amazon Elastic Kubernetes Service(EKS)來啟動一個 Kubernetes 叢集。
### 設定 AWS CLI
首先,請回到您的終端機並執行以下命令來建立一個預設的設定檔:
```bash
$ aws configure
這將要求您輸入一些資訊,包括:
- AWS 存取金鑰 ID:從您下載的 CSV 檔案中取得的存取金鑰 ID。
- AWS 秘密存取金鑰:從 CSV 檔案中取得的金鑰。
- 預設區網域名稱:例如
us-west-2。 - 預設輸出格式:可以留空。
要測試一切是否正常運作,您可以執行以下命令:
$ aws ec2 describe-regions
這將列出可用的 AWS 區域,輸出結果應該類別似於以下內容:
測試 AWS CLI 的輸出結果
輸出結果應該會顯示可用的 AWS 區域。
安裝 eksctl:Amazon EKS 的官方 CLI 工具
雖然可以使用 AWS CLI 來啟動 Amazon EKS 叢集,但過程複雜且涉及多個步驟。為了簡化這個過程,Weaveworks 建立了一個簡單的命令列工具,可以產生 AWS CloudFormation 範本並啟動您的叢集。
在不同作業系統上安裝 eksctl
在 macOS 和 Windows 上安裝 eksctl 的過程與之前相同。macOS 使用者可以執行以下命令:
$ brew install eksctl
同樣地,在 Windows 上,您可以執行:
$ choco install eksctl
在 Linux 上安裝 eksctl 的命令如下:
$ PLATFORM=$(uname -s)_$(uname -m)
$ curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
$ tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
$ sudo mv /tmp/eksctl /usr/local/bin
安裝完成後,您可以執行以下命令來檢查版本號:
$ eksctl version
啟動您的 Amazon Elastic Kubernetes Service 叢集
現在,所有先決條件都已安裝完畢,我們可以開始佈署我們的 Amazon EKS 叢集。一旦佈署完成,我們就可以開始與其互動,啟動工作負載,就像我們在第 15 章「Google Kubernetes Engine 上的 Kubernetes 叢集」中所做的那樣。
使用 eksctl 命令啟動叢集
我們將使用 eksctl 命令的預設值來啟動一個沙盒 Amazon EKS 叢集,以執行一些命令。這將啟動一個具有以下屬性的 Amazon EKS 叢集:
- 在
us-west-1區域 - 使用
m5.large例項型別的兩個工作節點 - 使用官方的 AWS EKS Amazon Machine Image(AMI)
- 使用 Amazon 的 Virtual Private Cloud(VPC)作為其網路服務
- 自動生成的隨機名稱
讓我們執行以下命令來啟動我們的叢集:
$ eksctl create cluster
AWS CloudFormation 是 Amazon 的基礎設施即程式碼(IaC)定義語言。它允許您定義您的 AWS 資源,以便它們可以在多個帳戶中佈署或在同一個帳戶中重複佈署。
建立叢集的過程
建立叢集的過程可能需要長達 30 分鐘的時間。在此過程中,您將看到類別似於以下的輸出結果:
[i] eksctl version 0.180.0-dev+763027060.2024-05-29T21:36:10Z
[i] using region us-west-2
[i] setting availability zones to [us-west-2d us-west-2b us-west-2c]
[i] subnets for us-west-2d - public:192.168.0.0/19 private:192.168.96.0/19
[i] subnets for us-west-2b - public:192.168.32.0/19 private:192.168.128.0/19
[i] subnets for us-west-2c - public:192.168.64.0/19 private:192.168.160.0/19
[i] nodegroup "ng-11c87ff4" will use "[AmazonLinux2/1.29]"
[i] using Kubernetes version 1.29
[i] creating EKS cluster "hilarious-wardrobe-1717847351" in "us-west-2" region with managed nodes
[i] will create 2 separate CloudFormation stacks for cluster itself and the initial managed nodegroup
[i] if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=us-west-2 --cluster=hilarious-wardrobe-1717847351'
[i] Kubernetes API endpoint access will use default of {publicAccess=true, privateAccess=false} for cluster "hilarious-wardrobe-1717847351" in "us-west-2"
建立叢集的詳細資訊
建立叢集的過程中,eksctl 命令會顯示詳細的資訊,包括所使用的區域、可用區、子網路、AMI 版本和 Kubernetes 版本。
叢集建立完成
建立叢集的過程完成後,您就可以開始與其互動,啟動工作負載。
建立叢集後的下一步
在下一章節中,我們將學習如何與新建立的 Amazon EKS 叢集互動,並在其上佈署工作負載。