在前半個月寫了許多 k8s 的觀念後,覺得可以先寫一點如何在 AWS 建立 k8s 叢集的內容。
採 2 種模式去實作查看差異:
為了能在 AWS 上建立叢集,需要先做一點前置的安裝作業:
(一) 建立 AWS 帳號
(二) 安裝 AWS CLI
(三) 設定 AWS CLI
(四) 安裝 kubectl
(五) 安裝 kops
(六) 安裝 Terraform
現在建立 AWS 帳號直接就有 12 個月的免費優惠方案,不過這些免費資源有一些限制。例如:AWS 提供每月可使用 750 小時的 AWS EC2 運算資源,不過有限制使用地區以及執行個體,執行個體如 Linux 只提供 t2.micro 或 t3.micro 免費使用。
建立帳號申請除了填寫基本資料外,也會需要使用到信用卡。
AWS CLI 是 Amazon 提供的一個命令列工具,可直接透過這個工具與 AWS 上的服務互動。
以下是使用 macOS 進行下載與安裝。
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
檢視是否安裝完成。
which aws
/usr/local/bin/aws
aws --version
aws-cli/2.13.21 Python/3.11.5 Darwin/20.2.0 exe/x86_64 prompt/off
接下來設定 AWS CLI,因 AWS 因安全性需要驗證 AWS CLI 的身份,需要設定一個存取憑證。
為了要在後續設定 AWS CLI 可以連 AWS,需要身分的驗證,驗證有很多方式可以參考官方文件。
我這邊會示範以「Workforce identity (AWS IAM Identity Center (successor to AWS Single Sign-On) users)」方式進行設定。
這個設定會需要啟用 AWS IAM Identity Center,並新增一個新的 IAM user、並指派權限給該使用者。
PowerUserAccess
執行開發任務,而不是以最大權限 AdministratorAccess
執行AWS 要求所有傳入的請求都經過加密簽署,使用 AWS CLI 執行命令時會需要一個憑證。
這邊會透過 config
檔案配置 SSO 主要有兩種方法:
這邊使用第一種官方建議的方式。
1 跟 2 在之前的步驟有先完成,接下來以精靈來建立設定檔。
aws configure sso
精靈建立設定檔將 IAM Identity Center 設定檔和 sso-session
設定至 AWS CLI
執行 aws configure sso
命令,並提供 IAM Identity Center 啟動 URL 以及託管 Identity Center 目錄的 AWS 區域。
這邊的
SSO region
與預設的 CLIregion
參數不同,可以是不同的區域。
$ aws configure sso
SSO session name (Recommended): my-sso
SSO start URL [None]: https://my-sso-portal.awsapps.com/start
SSO region [None]: us-east-1
SSO registration scopes [None]: sso:account:access
AWS CLI 會嘗試開啟您的預設瀏覽器,並開始 IAM Identity Center 帳戶的登入程序。
AWS CLI 會顯示可供您使用的 AWS 帳戶。如果您僅獲授權使用某個帳戶,AWS CLI 會自動為您選取該帳戶並略過提示。
只有在多個 AWS 帳戶會出現,所以這個步驟會省略沒出現。
AWS CLI 會確認您的帳戶選擇,並顯示所選帳戶中可供您使用的 IAM 角色。如果選取的帳戶只列出一個角色,AWS CLI 會自動為您選取該角色並略過提示。
這邊有 2 個選擇,請選擇「PowerUserAccess」。
指定「預設輸出格式」、要傳送命令到哪個「預設 AWS 區域」,以及「為設定檔命名」。
client Region
指的是將在哪個地區建立 AWS 物件,切忌不同地區建立的物件是相互隔離的。
CLI default client Region [None]: us-east-1
CLI default output format [None]: json
CLI profile name [PowerUserAccess-123456789011]: my-profile
最後一則訊息說明完成的設定檔組態。
這會建立 sso-session
區段以及 ~/.aws/config
中的具名設定檔
cat ~/.aws/config
之後就可以使用此 sso-session
和設定檔來取得更新的憑證。並使用 aws sso login
命令來請求和擷取執行命令所需的憑證。
取得憑證登入 AWS,會再驗證一次。
aws sso login --profile my-profile
驗證完如出現以下訊息代表成功登入。
SSO authorization page has automatically been opened in your default browser.
Follow the instructions in the browser to complete this authorization request.
Successfully logged into Start URL: https://my-sso-portal.awsapps.com/start
需要登出的話。
aws sso logout
在前幾篇就有先在本機上安裝 kubectl,還沒安裝可以參考網站。
kops 主要是讓我們可以在 AWS 上建立 k8s 叢集,除了 AWS 外也適用於 GCE 或 Azure 等雲端服務。
安裝 kops 的前會需要先安裝 kubectl。
macOS 可使用 Homebrew 安裝。
brew update && brew install kops
查看一下是否有安裝成功,kops 預設的自動安裝路徑在 /usr/local/bin/kops
。
kops version
Client version: 1.28.0
Terraform 這套工具可以有效管理雲端的基礎架構(Infra),不需要再登入到 AWS 的 Web 介面手動建立機器、VPC 以及調整各項資源的設定。
只需要寫好腳本並下命令執行,Terraform 就會按照腳本快速完成 AWS 雲端的基礎建設,也就是由腳本來管理雲端上的資源。
我是 macOS 使用 Homebrew 進行安裝。
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
確認是否安裝完成。
terraform version
Terraform v1.6.6
on darwin_amd64
指令 terraform
字比較多,可以用 tf
當作 alias。
vi ~/.zshrc
# 加入以下
alias tf='terraform'
# 啟用
source ~/.zshrc
之後指令只需要打 tf
就行了~