本文介紹了如何在 AWS EC2 中創(chuàng)建和初始化 K3s 集群,以及為已有的 K3s 集群添加節(jié)點的操作步驟。除此之外,本文還提供了在 AWS EC2 上運行 AutoK3s 的進階操作指導,如配置私有鏡像倉庫、啟用 AWS CCM 和啟用 UI 組件。
關于 IAM 的描述,請參考AWS 官方文檔。
您的賬號需要創(chuàng)建 EC2 及相關資源的權(quán)限,因此需要確保具有以下資源的權(quán)限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:Describe*",
"ec2:ImportKeyPair",
"ec2:CreateKeyPair",
"ec2:CreateSecurityGroup",
"ec2:CreateTags",
"ec2:DeleteKeyPair",
"ec2:RunInstances",
"ec2:RebootInstances",
"ec2:TerminateInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:CreateInstanceProfile",
"ec2:RevokeSecurityGroupIngress",
"ec2:DeleteTags",
"elasticloadbalancing:Describe*",
"iam:Get*",
"iam:List*",
"iam:PassRole"
],
"Resource": "*"
}
]
}
EC2 實例至少需要應用以下安全組規(guī)則:
Rule Protocol Port Source Description
InBound TCP 22 ALL SSH Connect Port
InBound TCP 6443 K3s agent nodes Kubernetes API
InBound TCP 10250 K3s server & agent Kubelet
InBound UDP 8472 K3s server & agent (Optional) Required only for Flannel VXLAN
InBound TCP 2379,2380 K3s server nodes (Optional) Required only for embedded ETCD
OutBound ALL ALL ALL Allow All
接下來我們將基于 AutoK3s 本地 UI 介紹如何使用 AutoK3s 工具,在 AWS EC2 主機上創(chuàng)建和管理 K3s 集群。
您可以通過快速體驗中的描述,通過 Docker 或者 CLI 啟動本地 UI,打開瀏覽器,訪問目標端口 8080 即可。
您可以使用快速創(chuàng)建功能,在指定的云提供商服務中,快速啟動一個K3s集群。
以下圖為例,我們將在 AWS EC2 使用默認配置創(chuàng)建一個單節(jié)點的 K3s 集群,EC2 虛擬機會在 ?us-east-1
? 區(qū)域中創(chuàng)建。
表 1:快速創(chuàng)建參數(shù)
參數(shù) | 說明 | 默認值 |
---|---|---|
Provider | 云提供商名稱 | aws
|
Name | K3s集群名稱 | |
Master | Master 節(jié)點數(shù)量 | 1
|
Worker | Worker 節(jié)點數(shù)量 | 0
|
Access Key | 云提供商的Access Key 訪問密鑰 | |
Secret Key | 云提供商的Secret Key 訪問密鑰 | |
Region | 虛擬機所在的區(qū)域(在快速創(chuàng)建頁面不允許編輯默認區(qū)域,您可以通過模板功能修改默認參數(shù)配置) | us-east-1
|
Zone | 虛擬機所在的地區(qū) | us-east-1a
|
如果您不想使用默認的配置,可以點擊 Advance 按鈕,進入自定義參數(shù)頁面進行更多參數(shù)的設置。 或者您可以在集群列表頁點擊 Create 按鈕進入自定義參數(shù)頁面進行更多參數(shù)的設置。
使用 AWS 云提供商創(chuàng)建 K3s 集群的自定義參數(shù)配置分為四項,云供應商訪問憑證、云提供商對應實例配置、K3s集群配置、高級選項。接下來對每個配置項進行詳細說明。
表 2:云提供商訪問憑證參數(shù)
參數(shù) | 說明 |
---|---|
Provider | 云提供商名稱 |
Name | K3s集群名稱 |
Access Key | 云提供商的Access Key 訪問密鑰 |
Secret Key | 云提供商的Secret Key 訪問密鑰 |
Region | AWS EC2 區(qū)域 |
UI 集成了 AWS SDK,可以與 AWS 進行聯(lián)動,方便用戶配置實例信息,這里需要輸入云憑證信息進行合法性校驗,用以獲取后續(xù)的實例參數(shù)。
實例配置主要配置的內(nèi)容為對應云提供商虛擬機的配置,例如實例運行區(qū)域、地區(qū)、使用的操作系統(tǒng)類型、實例規(guī)格、網(wǎng)絡配置等信息。
參數(shù) | 說明 | 默認值 |
---|---|---|
Region | AWS EC2 區(qū)域 | us-east-1
|
Zone | AWS EC2 地區(qū) | us-east-1a
|
Instance Type | AWS EC2 實例規(guī)格 | t2.micro (1vCPU/1GiB) |
AMI | AWS EC2 系統(tǒng)映像 | ami-00ddb0e5626798373 (Ubuntu 18.04) |
Volume Type | 根磁盤卷類型 | gp2 (通用型 SSD) |
Root Size | 根磁盤卷大小 | 16 (GiB) |
Request Spot Instance | 是否請求競價實例 | false |
Spot Price | 競價實例價格,當您的最高價高于 Spot 價格時,您的實例就會運行(僅當開啟競價實例時需要設置此項) | |
VPC ID | VPC ID(如果您不設置,AutoK3s 將使用默認的 VPC) | |
Subnet ID | 子網(wǎng) ID(如果您不設置,AutoK3s 將使用默認的 VPC 下的子網(wǎng)) | |
Security Group | 安全組(如果您不選擇任何安全組,AutoK3s 將為您自動創(chuàng)建名稱為 autok3s 的默認的安全組) | |
Keypair name | 密鑰對名稱(如果您不設置密鑰對,AutoK3s 將自動為您生成一個密鑰對) | |
SSH User | SSH 用戶 | ubuntu
|
SSH Port | SSH 端口 | 22
|
SSH Key Path | 如果您選擇了已有的密鑰對,需要指定SSH 私鑰目錄,如果您使用AutoK3s 自動生成的密鑰,這里可以不填寫任何內(nèi)容 | |
SSH Key Passphrase | 如果您的私鑰需要密碼驗證,請在這里輸入密碼 | |
SSH Password | 如果您使用Password連接到虛擬機,請輸入密碼 | |
SSH Agent Auth | 如果您配置 SSH 代理程序,可以開啟此項配置 | false |
SSH Cert Path | 如果您配置了 ssh certificate,在這里您需要將 certificate path 傳入進來,以保證 AutoK3s 可以通過ssh連接到遠程虛擬機 | |
Tags | 虛擬機標簽 | |
User Data | 配置實例的用戶數(shù)據(jù) |
如果云憑證信息驗證通過,用戶可以在每個配置項的下拉列表中選擇合適的參數(shù)進行配置,不再需要切換到 AWS Console 頁面獲取對應的參數(shù)信息。
K3s 參數(shù)配置項主要對 K3s 集群進行設置,例如是否部署 HA 模式、K3s 安裝版本等。
參數(shù) | 說明 | 默認值 |
---|---|---|
K3s Channel | 用于獲取 K3s 下載 URL 的通道。選項包括:stable , latest , testing 。 |
stable
|
K3s Version | 安裝的 K3s 版本,如果設置則覆蓋 Channel 選項 | |
Cluster | 啟用嵌入式 DB 高可用 K3s(即開啟 --cluster-init 設置) |
false |
Datastore | 指定 etcd、Mysql、Postgres 或 Sqlite(默認)數(shù)據(jù)源名稱 | |
K3s Install Script | K3s 安裝腳本,對于中國區(qū)用戶,可以通過下拉菜單選擇 rancher-mirror 腳本來安裝 |
https://get.k3s.io
|
Master | Master 節(jié)點數(shù)量 | |
Master Extra Args | Master 節(jié)點額外參數(shù)設置,例如 --no-deploy traefik
|
|
Worker | Worker 節(jié)點數(shù)量 | |
Worker Extra Args | Worker 節(jié)點額外參數(shù)設置,例如 --node-taint key=value:NoExecute
|
|
Token | 用于將server或agent加入集群的共享secret,如果不設置,會自動生成一個Token | |
Manifests | 自動部署應用清單目錄,這里支持設置某個manifest文件或者包含多個manifest文件的目錄路徑(僅支持一層目錄)。 | |
TLS Sans | 在 TLS 證書中添加其他主機名或 IP 作為主題備用名稱。 | |
Registry | 私有鏡像倉庫配置 |
配置要開啟的 UI 組件(kubernetes-dashboard/kube-explorer),以及是否部署 AWS Cloud Provider。
參數(shù) | 說明 | 默認值 |
---|---|---|
UI | 開啟的 UI 組件(Kubernetes Dashboard/kube-explorer) | |
Cloud Controller Manager | 是否部署 AWS Cloud Provider | false |
IAM Instance Profile Control | 如果開啟 CCM,需要配置control IAM,請參考這里 | |
IAM Instance Profile Worker | 如果開啟 CCM,需要配置worker IAM,請參考這里 |
您可以使用模板功能,提前預置好常用的集群模板,每次創(chuàng)建集群時可以用模板參數(shù)進行填充,極大精簡了重復操作。一次編寫,多次運行,提升效率。
創(chuàng)建集群模板的參數(shù)與上面描述的自定義參數(shù)創(chuàng)建集群的表單內(nèi)容相同,在這里不做贅述。
您可以選擇最常用的模板,點擊右側(cè)下拉框中的 Set Default 按鈕,將模板設置為默認模板。
設置為默認模板后,您可以通過快速創(chuàng)建功能一鍵部署常用配置的 K3s 集群。
如果您想使用其他模板創(chuàng)建集群,您還可以在快速創(chuàng)建頁面的右上角,或者在自定義創(chuàng)建集群的右上角篩選模板,點擊 Fill Form 按鈕后,會自動根據(jù)模板內(nèi)容填充表單。
您可以在集群列表頁查看和管理使用 AutoK3s 創(chuàng)建的 K3s 集群。
選中您要添加節(jié)點的集群,點擊右側(cè)下拉菜單中的 Join Node 按鈕,在彈出的窗口中設置要添加的節(jié)點數(shù)量即可。
選中您要升級的集群,點擊右側(cè)下拉菜單中的 Upgrade 按鈕,在彈出窗口中會顯示您當前集群配置的版本信息,例如下圖示例中,顯示集群版本為 ?v1.19.16+k3s1
?。
如果我們要將集群升級到 ?v1.20.15+k3s1
?,則修改 Version 為指定版本號即可;如果想要將集群升級到最新的stable版本,則刪除掉 Version 指定的版本號。
選擇要升級的版本后,點擊 Upgrade 按鈕,等待集群升級完成。
如果您想操作 K3s 集群數(shù)據(jù),可以點擊右上角 Launch Kubectl 按鈕,在下拉框中選擇要操作的集群后,便可以在 UI 控制臺操作選中的集群了。
如果您想在其他地方管理集群,可以單獨下載指定集群的 Kubeconfig 文件。點擊指定集群右側(cè)下拉菜單中的 Download KubeConfig 按鈕,在彈出窗口中選擇復制或下載文件。
如果您想連接到遠程主機進行操作,您可以在集群列表頁面點擊集群名稱,進入詳情頁面,選擇要連接的主機,點擊右側(cè) Execute Shell 按鈕。
您可以在創(chuàng)建集群時,通過 Additional Options 選擇 explorer 選項開啟 kube-explorer 功能。
也可以通過右側(cè)下拉菜單中選擇 Enable Explorer 功能來開啟 kube-explorer。
開啟后,在集群列表會增加 dashboard 跳轉(zhuǎn)鏈接按鈕,點擊跳轉(zhuǎn)鏈接便可以訪問 kube-explorer dashboard 頁面了。
對于已經(jīng)開啟了 kube-explorer 功能的集群,可以在右側(cè)下拉菜單中選擇 Disable Explorer 功能來關閉 kube-explorer 服務。
在使用命令之前,您需要設置訪問憑證。
export AWS_ACCESS_KEY_ID='<Your access key ID>'
export AWS_SECRET_ACCESS_KEY='<Your secret access key>'
如想了解更多參數(shù),請運行?autok3s <sub-command> --provider aws --help
?命令。
運行以下命令,在 AWS EC2 上創(chuàng)建并啟動創(chuàng)建一個名為 “myk3s”的集群,并為該集群配置 1 個 master 節(jié)點和 1 個 worker 節(jié)點。
autok3s -d create -p aws --name myk3s --master 1 --worker 1
創(chuàng)建高可用集群的命令分為兩種,取決于您選擇使用的是內(nèi)置的 etcd 還是外部數(shù)據(jù)庫。
運行以下命令,在 AWS EC2 上創(chuàng)建并啟動創(chuàng)建了一個名為“myk3s”,包含 3 個 master 節(jié)點的高可用 K3s 集群。
autok3s -d create -p aws --name myk3s --master 3 --cluster
在高可用模式下使用外部數(shù)據(jù)庫,需要滿足兩個條件:
所以在以下的代碼示例中,我們通過?--master 2
?指定 master 節(jié)點數(shù)量為 2,滿足 master 節(jié)點的數(shù)量不小于 1 這個條件;且通過?--datastore "PATH"
?指定外部數(shù)據(jù)庫的存儲路徑,提供外部數(shù)據(jù)庫的存儲路徑。
運行以下命令,在 AWS EC2 上創(chuàng)建并啟動創(chuàng)建了一個名為“myk3s”,包含 2 個master 節(jié)點的高可用 K3s 集群:
autok3s -d create -p aws --name myk3s --master 2 --datastore "mysql://<user>:<password>@tcp(<ip>:<port>)/<db>"
請使用?autok3s join
?命令為已有集群添加 K3s 節(jié)點。
運行以下命令,為“myk3s”集群添加 1 個 worker 節(jié)點。
autok3s -d join --provider aws --name myk3s --worker 1
autok3s -d join --provider aws --name myk3s --master 2 --worker 1
刪除一個 k3s 集群,這里刪除的集群為 myk3s。
autok3s -d delete --provider aws --name myk3s
顯示當前主機上管理的所有 K3s 集群列表。
autok3s list
NAME REGION PROVIDER STATUS MASTERS WORKERS VERSION
myk3s ap-southeast-2 aws Running 1 0 v1.20.2+k3s1
顯示具體的 K3s 信息,包括實例狀態(tài)、主機 ip、集群版本等信息。
autok3s describe -n <clusterName> -p aws
注意:如果使用不同的 provider 創(chuàng)建的集群名稱相同,describe 時會顯示多個集群信息,可以使用?
-p <provider>
?對 provider 進一步過濾。例如:?autok3s describe -n myk3s -p aws
?。
Name: myk3s
Provider: aws
Region: ap-southeast-2
Zone: ap-southeast-2c
Master: 1
Worker: 0
Status: Running
Version: v1.20.2+k3s1
Nodes:
- internal-ip: [x.x.x.x]
external-ip: [x.x.x.x]
instance-status: running
instance-id: xxxxxxxx
roles: control-plane,master
status: Ready
hostname: xxxxxxxx
container-runtime: containerd://1.4.3-k3s1
version: v1.20.2+k3s1
群創(chuàng)建完成后, ?autok3s
?會自動合并 ?kubeconfig
?文件。
autok3s kubectl config use-context myk3s.ap-southeast-2.aws
autok3s kubectl <sub-commands> <flags>
在多個集群的場景下,可以通過切換上下文來完成對不同集群的訪問。
autok3s kubectl config get-contexts
autok3s kubectl config use-context <context>
SSH 連接到集群中的某個主機,這里選擇的集群為 myk3s。
autok3s ssh --provider aws --name myk3s
您可以使用以下命令將指定的 K3s 集群升級到 ?latest
?版本
autok3s upgrade --provider aws --name myk3s --k3s-channel latest
如果您想將 K3s 集群升級到指定版本,可以指定 ?--k3s-version
?
autok3s upgrade --provider aws --name myk3s --k3s-version v1.22.4+k3s1
AutoK3s 集成了一些與當前 provider 有關的高級組件,例如私有鏡像倉庫、CCM 和 UI。
在運行?autok3s create
?或?autok3s join
?時,通過傳遞?--registry /etc/autok3s/registries.yaml
?以使用私有鏡像倉庫,例如:
autok3s -d create \
--provider aws \
--name myk3s \
--master 1 \
--worker 1 \
--registry /etc/autok3s/registries.yaml
使用私有鏡像倉庫的配置請參考以下內(nèi)容,如果您的私有鏡像倉庫需要 TLS 認證,?autok3s
?會從本地讀取相關的 TLS 文件并自動上傳到遠程服務器中完成配置,您只需要完善?registry.yaml
?即可。
mirrors:
docker.io:
endpoint:
- "https://mycustomreg.com:5000"
configs:
"mycustomreg:5000":
auth:
username: xxxxxx # this is the registry username
password: xxxxxx # this is the registry password
tls:
cert_file: # path to the cert file used in the registry
key_file: # path to the key file used in the registry
ca_file: # path to the ca file used in the registry
如果您要使用 AWS CCM 功能需要提前準備好兩個 IAM policies,以保證 CCM 功能的正常使用,具體內(nèi)容請參考這里
autok3s -d create -p aws \
... \
--cloud-controller-manager \
--iam-instance-profile-control <iam policy for control plane> \
--iam-instance-profile-worker <iam policy for node>
AutoK3s 支持兩種 UI 組件,包括 kubernetes-dashboard 和 kube-explorer
autok3s -d create -p aws \
... \
--enable dashboard
訪問 Token 等設置請參考 此文檔 。
autok3s explorer --context <context> --port 9999
您可以通過 http://127.0.0.1:9999 訪問 kube-explorer dashboard 頁面。
更多建議: