K3s AutoK3s 創(chuàng)建阿里云集群

2022-08-17 12:01 更新

概述

本文介紹了如何在阿里云 ECS 中創(chuàng)建和初始化 K3s 集群,以及為已有的 K3s 集群添加節(jié)點(diǎn)的操作步驟。除此之外,本文還提供了在阿里云 ECS 上運(yùn)行 AutoK3s 的進(jìn)階操作指導(dǎo),如配置私有鏡像倉庫、啟用阿里云 Terway CNI、啟用阿里云 CCM、和啟用 UI 組件。

前置要求

設(shè)置 RAM

關(guān)于 RAM 的描述,請參考阿里云官方文檔。

您的賬號需要創(chuàng)建 ECS 及相關(guān)資源的權(quán)限,因此需要確保具有以下資源的權(quán)限:

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "ecs:Describe*",
        "ecs:AttachDisk",
        "ecs:CreateDisk",
        "ecs:CreateSnapshot",
        "ecs:CreateRouteEntry",
        "ecs:DeleteDisk",
        "ecs:DeleteSnapshot",
        "ecs:DeleteRouteEntry",
        "ecs:DetachDisk",
        "ecs:ModifyAutoSnapshotPolicyEx",
        "ecs:ModifyDiskAttribute",
        "ecs:CreateNetworkInterface",
        "ecs:AttachNetworkInterface",
        "ecs:DetachNetworkInterface",
        "ecs:DeleteNetworkInterface",
        "ecs:CreateNetworkInterface",
        "ecs:AttachNetworkInterface",
        "ecs:DetachNetworkInterface",
        "ecs:DeleteNetworkInterface",
        "ecs:AssignPrivateIpAddresses",
        "ecs:UnassignPrivateIpAddresses",
        "ecs:DeleteInstances",
        "ecs:RunInstances",
        "ecs:ListTagResources",
        "ecs:StartInstances",
        "ecs:StopInstances",
        "ecs:CreateSecurityGroup",
        "ecs:ModifySecurityGroupRule",
        "ecs:ModifySecurityGroupEgressRule",
        "ecs:DescribeSecurityGroup*",
        "ecs:AuthorizeSecurityGroup",
        "ecs:RevokeSecurityGroup",
        "ecs:RevokeSecurityGroupEgress"
      ],
      "Resource": ["*"],
      "Effect": "Allow"
    },
    {
      "Action": ["cr:Get*", "cr:List*", "cr:PullRepository"],
      "Resource": ["*"],
      "Effect": "Allow"
    },
    {
      "Action": ["slb:*"],
      "Resource": ["*"],
      "Effect": "Allow"
    },
    {
      "Action": ["cms:*"],
      "Resource": ["*"],
      "Effect": "Allow"
    },
    {
      "Action": ["vpc:*"],
      "Resource": ["*"],
      "Effect": "Allow"
    },
    {
      "Action": ["log:*"],
      "Resource": ["*"],
      "Effect": "Allow"
    },
    {
      "Action": ["nas:*"],
      "Resource": ["*"],
      "Effect": "Allow"
    }
  ]
}

設(shè)置安全組

ECS 實(shí)例至少需要應(yīng)用以下安全組規(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

UI 使用說明

接下來我們將基于 AutoK3s 本地 UI 介紹如何使用 AutoK3s 工具,在 AWS EC2 主機(jī)上創(chuàng)建和管理 K3s 集群。

您可以通過快速體驗(yàn)中的描述,通過 Docker 或者 CLI 啟動本地 UI,打開瀏覽器,訪問目標(biāo)端口 ?8080 ?即可。

快速創(chuàng)建集群

您可以使用快速創(chuàng)建功能,在指定的云提供商服務(wù)中,快速啟動一個(gè)K3s集群。

由于 ?rancher.cn? 域名正在備案中,因此使用默認(rèn)的 ?https://rancher-mirror.rancher.cn/k3s/k3s-install.sh? 地址部署集群會出現(xiàn)部署失敗情況。如果發(fā)生此類問題,請使用以下方式解決: ?--k3s-install-script=https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh?。

以下圖為例,我們將在 aliyun ECS 使用默認(rèn)配置創(chuàng)建一個(gè)單節(jié)點(diǎn)的 K3s 集群,ECS 虛擬機(jī)會在 ?cn-hangzhou? 區(qū)域中創(chuàng)建。


表 1:快速創(chuàng)建參數(shù)

參數(shù) 說明 默認(rèn)值
Provider 云提供商名稱 alibaba
Name K3s集群名稱
Master Master 節(jié)點(diǎn)數(shù)量 1
Worker Worker 節(jié)點(diǎn)數(shù)量 0
Access Key 云提供商的Access Key 訪問密鑰
Secret Key 云提供商的Secret Key 訪問密鑰
Region 虛擬機(jī)所在的區(qū)域(在快速創(chuàng)建頁面不允許編輯默認(rèn)區(qū)域,您可以通過模板功能修改默認(rèn)參數(shù)配置) cn-hangzhou
Zone 虛擬機(jī)所在的地區(qū) cn-hangzhou-i

自定義參數(shù)創(chuàng)建

如果您不想使用默認(rèn)的配置,可以點(diǎn)擊 Advance 按鈕,進(jìn)入自定義參數(shù)頁面進(jìn)行更多參數(shù)的設(shè)置。 或者您可以在集群列表頁點(diǎn)擊 Create 按鈕進(jìn)入自定義參數(shù)頁面進(jìn)行更多參數(shù)的設(shè)置。

使用 Alibaba 云提供商創(chuàng)建 K3s 集群的自定義參數(shù)配置分為四項(xiàng),云供應(yīng)商訪問憑證、云提供商對應(yīng)實(shí)例配置、K3s集群配置、高級選項(xiàng)。接下來對每個(gè)配置項(xiàng)進(jìn)行詳細(xì)說明。

云提供商訪問憑證


表 2:云提供商訪問憑證參數(shù)

參數(shù) 說明
Provider 云提供商名稱
Name K3s集群名稱
Access Key 云提供商的Access Key 訪問密鑰
Secret Secret 云提供商的Secret Key 訪問密鑰

實(shí)例配置

實(shí)例配置主要配置的內(nèi)容為對應(yīng)云提供商虛擬機(jī)的配置,例如實(shí)例運(yùn)行區(qū)域、地區(qū)、使用的操作系統(tǒng)類型、實(shí)例規(guī)格、網(wǎng)絡(luò)配置等信息。


表 3:實(shí)例配置參數(shù)

參數(shù) 說明 默認(rèn)值
Region 阿里云 ECS 區(qū)域 cn-hangzhou
Zone 阿里云 ECS 地區(qū) cn-hangzhou-i
Instance Type 阿里云 ECS 實(shí)例規(guī)格 ecs.c6.large(2vCPU/4GiB)
Image 阿里云 ECS 系統(tǒng)映像ID ubuntu_18_04_x64_20G_alibase_20200618.vhd(Ubuntu 18.04)
Disk Category 根磁盤卷類型 cloud_ssd
Disk Size 根磁盤卷大小 40(GiB)
Spot Strategy 是否使用搶占式實(shí)例 NoSpot
Spot Duration 搶占式實(shí)例的保留時(shí)長,單位為小時(shí) 1
Spot Price Limit 設(shè)置實(shí)例的每小時(shí)最高價(jià)格,支持最大3位小數(shù),僅當(dāng)參數(shù)SpotStrategy設(shè)置為SpotWithPriceLimit時(shí)生效
V-Switch 專有網(wǎng)絡(luò)交換機(jī) ID (如果您不設(shè)置,AutoK3s 將為您創(chuàng)建名稱為 autok3s-aliyun-vswitch 的默認(rèn)交換機(jī))
Internet Max Bandwidth Out 網(wǎng)絡(luò)帶寬 5(MB)
Security Group 安全組(如果您不選擇任何安全組,AutoK3s 將為您自動創(chuàng)建名稱為 autok3s 的默認(rèn)的安全組)
EIP 是否使用彈性公網(wǎng)IP false
Key Pair 密鑰對名稱(如果您不設(shè)置密鑰對,AutoK3s 將自動為您生成一個(gè)密鑰對)
SSH User SSH 用戶 root
SSH Port SSH 端口 22
SSH Key Path 如果您選擇了已有的密鑰對,需要指定SSH 私鑰目錄,如果您使用AutoK3s 自動生成的密鑰,這里可以不填寫任何內(nèi)容
SSH Key Passphrase 如果您的私鑰需要密碼驗(yàn)證,請?jiān)谶@里輸入密碼
SSH Password 如果您使用Password連接到虛擬機(jī),請輸入密碼
SSH Agent Auth 如果您配置 SSH 代理程序,可以開啟此項(xiàng)配置 false
SSH Cert Path 如果您配置了 ssh certificate,在這里您需要將 certificate path 傳入進(jìn)來,以保證 AutoK3s 可以通過ssh連接到遠(yuǎn)程虛擬機(jī)
Tags 虛擬機(jī)標(biāo)簽
User Data 配置實(shí)例的自定義數(shù)據(jù)

K3s 參數(shù)配置

K3s 參數(shù)配置項(xiàng)主要對 K3s 集群進(jìn)行設(shè)置,例如是否部署 HA 模式、K3s 安裝版本等。


表 4:K3s 配置參數(shù)

參數(shù) 說明 默認(rèn)值
K3s Channel 用于獲取 K3s 下載 URL 的通道。選項(xiàng)包括:stablelatesttesting。 stable
K3s Version 安裝的 K3s 版本,如果設(shè)置則覆蓋 Channel 選項(xiàng)
Cluster 啟用嵌入式 DB 高可用 K3s(即開啟 --cluster-init 設(shè)置) false
Datastore 指定 etcd、Mysql、Postgres 或 Sqlite(默認(rèn))數(shù)據(jù)源名稱
K3s Install Script K3s 安裝腳本 https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh
Master Master 節(jié)點(diǎn)數(shù)量
Master Extra Args Master 節(jié)點(diǎn)額外參數(shù)設(shè)置,例如 --no-deploy traefik
Worker Worker 節(jié)點(diǎn)數(shù)量
Worker Extra Args Worker 節(jié)點(diǎn)額外參數(shù)設(shè)置,例如 --node-taint key=value:NoExecute
Token 用于將server或agent加入集群的共享secret,如果不設(shè)置,會自動生成一個(gè)Token
Manifests 自動部署應(yīng)用清單目錄,這里支持設(shè)置某個(gè)manifest文件或者包含多個(gè)manifest文件的目錄路徑(僅支持一層目錄)。
TLS Sans 在 TLS 證書中添加其他主機(jī)名或 IP 作為主題備用名稱。
Registry 私有鏡像倉庫配置

高級選項(xiàng)

配置要開啟的 UI 組件(kubernetes-dashboard/kube-explorer),是否部署 Terway 網(wǎng)絡(luò)插件以及是否部署阿里云 Cloud Provider。


表 4:高級選項(xiàng)

參數(shù) 說明 默認(rèn)值
UI 開啟的 UI 組件(Kubernetes Dashboard/kube-explorer)
Cloud Controller Manager 是否部署阿里云 Cloud Provider false
Terway 是否部署 Terway 網(wǎng)絡(luò)插件 false
Terway Max Pool Size Terway Max Pool Size 5
PS: AutoK3s 默認(rèn)部署 ?ENI ?模式的 Terway 插件,更多信息請參考這里

集群模板

您可以使用模板功能,提前預(yù)置好常用的集群模板,每次創(chuàng)建集群時(shí)可以用模板參數(shù)進(jìn)行填充,極大精簡了重復(fù)操作。一次編寫,多次運(yùn)行,提升效率。

創(chuàng)建集群模板的參數(shù)與上面描述的自定義參數(shù)創(chuàng)建集群的表單內(nèi)容相同,在這里不做贅述。


您可以選擇最常用的模板,點(diǎn)擊右側(cè)下拉框中的 Set Default 按鈕,將模板設(shè)置為默認(rèn)模板。


設(shè)置為默認(rèn)模板后,您可以通過快速創(chuàng)建功能一鍵部署常用配置的 K3s 集群。


如果您想使用其他模板創(chuàng)建集群,您還可以在快速創(chuàng)建頁面的右上角,或者在自定義創(chuàng)建集群的右上角篩選模板,點(diǎn)擊 Fill Form 按鈕后,會自動根據(jù)模板內(nèi)容填充表單。


集群管理

您可以在集群列表頁查看和管理使用 AutoK3s 創(chuàng)建的 K3s 集群。

添加節(jié)點(diǎn)

選中您要添加節(jié)點(diǎn)的集群,點(diǎn)擊右側(cè)下拉菜單中的 Join Node 按鈕,在彈出的窗口中設(shè)置要添加的節(jié)點(diǎn)數(shù)量即可。


集群升級

選中您要升級的集群,點(diǎn)擊右側(cè)下拉菜單中的 Upgrade 按鈕,在彈出窗口中會顯示您當(dāng)前集群配置的版本信息,例如下圖示例中,顯示集群版本為 ?v1.19.16+k3s1?。


如果我們要將集群升級到 ?v1.20.15+k3s1?,則修改 Version 為指定版本號即可;如果想要將集群升級到最新的stable版本,則刪除掉 Version 指定的版本號。


選擇要升級的版本后,點(diǎn)擊 Upgrade 按鈕,等待集群升級完成。


Kubectl

如果您想操作 K3s 集群數(shù)據(jù),可以點(diǎn)擊右上角 Launch Kubectl 按鈕,在下拉框中選擇要操作的集群后,便可以在 UI 控制臺操作選中的集群了。


下載 Kubeconfig 文件

如果您想在其他地方管理集群,可以單獨(dú)下載指定集群的 Kubeconfig 文件。點(diǎn)擊指定集群右側(cè)下拉菜單中的 ?Download KubeConfig? 按鈕,在彈出窗口中選擇復(fù)制或下載文件。


SSH

如果您想連接到遠(yuǎn)程主機(jī)進(jìn)行操作,您可以在集群列表頁面點(diǎn)擊集群名稱,進(jìn)入詳情頁面,選擇要連接的主機(jī),點(diǎn)擊右側(cè) Execute Shell 按鈕。


開啟 kube-explorer dashboard

您可以在創(chuàng)建集群時(shí),通過 Additional Options 選擇 explorer 選項(xiàng)開啟 kube-explorer 功能。


也可以通過右側(cè)下拉菜單中選擇 Enable Explorer 功能來開啟 kube-explorer。


開啟后,在集群列表會增加 dashboard 跳轉(zhuǎn)鏈接按鈕,點(diǎn)擊跳轉(zhuǎn)鏈接便可以訪問 kube-explorer dashboard 頁面了。


關(guān)閉 kube-explorer dashboard

對于已經(jīng)開啟了 kube-explorer 功能的集群,可以在右側(cè)下拉菜單中選擇 Disable Explorer 功能來關(guān)閉 kube-explorer 服務(wù)。


CLI 使用說明

在使用命令之前,您需要設(shè)置訪問憑證。

export ECS_ACCESS_KEY_ID='<access-key>'
export ECS_ACCESS_KEY_SECRET='<secret-access>'

如想了解更多參數(shù),請運(yùn)行?autok3s <sub-command> --provider alibaba --help?命令。

創(chuàng)建普通集群

運(yùn)行以下命令,在阿里云 ECS 上創(chuàng)建并啟動創(chuàng)建一個(gè)名為 “myk3s”的集群,并為該集群配置 1 個(gè) master 節(jié)點(diǎn)和 1 個(gè) worker 節(jié)點(diǎn)。

autok3s -d create -p alibaba --name myk3s --master 1 --worker 1

創(chuàng)建高可用 K3s 集群

創(chuàng)建高可用集群的命令分為兩種,取決于您選擇使用的是內(nèi)置的 etcd 還是外部數(shù)據(jù)庫。

嵌入式 etcd(k3s 版本 >= 1.19.1-k3s1)

運(yùn)行以下命令,在阿里云 ECS 上創(chuàng)建并啟動創(chuàng)建了一個(gè)名為“myk3s”的高可用 K3s 集群。

autok3s -d create -p alibaba --name myk3s --master 3 --cluster

外部數(shù)據(jù)庫

在高可用模式下使用外部數(shù)據(jù)庫,需要滿足兩個(gè)條件:

  • master 節(jié)點(diǎn)的數(shù)量不小于 1。
  • 需要提供外部數(shù)據(jù)庫的存儲路徑。

所以在以下的代碼示例中,我們通過?--master 2?指定 master 節(jié)點(diǎn)數(shù)量為 2,滿足 master 節(jié)點(diǎn)的數(shù)量不小于 1 這個(gè)條件;且通過?--datastore "PATH"?指定外部數(shù)據(jù)庫的存儲路徑,提供外部數(shù)據(jù)庫的存儲路徑。

運(yùn)行以下命令,在阿里云 ECS 上創(chuàng)建并啟動創(chuàng)建了一個(gè)名為“myk3s”的高可用 K3s 集群:

autok3s -d create -p alibaba --name myk3s --master 2 --datastore "mysql://<user>:<password>@tcp(<ip>:<port>)/<db>"

添加 K3s 節(jié)點(diǎn)

請使用?autok3s join?命令為已有集群添加 K3s 節(jié)點(diǎn)。

普通集群

運(yùn)行以下命令,為“myk3s”集群添加 1 個(gè) worker 節(jié)點(diǎn)。

autok3s -d join --provider alibaba --name myk3s --worker 1

高可用 K3s 集群

autok3s -d join --provider alibaba --name myk3s --master 2 --worker 1

刪除 K3s 集群

刪除一個(gè) k3s 集群,這里刪除的集群為 myk3s。

autok3s -d delete --provider alibaba --name myk3s

查看集群列表

顯示當(dāng)前主機(jī)上管理的所有 K3s 集群列表。

autok3s list
NAME     REGION     PROVIDER  STATUS   MASTERS  WORKERS    VERSION
myk3s  cn-hangzhou  alibaba   Running  2        2        v1.19.5+k3s2
myk3s  ap-nanjing   tencent   Running  2        1        v1.19.5+k3s2

查看集群詳細(xì)信息

顯示具體的 K3s 信息,包括實(shí)例狀態(tài)、主機(jī) ip、集群版本等信息。

autok3s describe cluster -n <clusterName> -p alibaba
注意
如果使用不同的 provider 創(chuàng)建的集群名稱相同,describe 時(shí)會顯示多個(gè)集群信息,可以使用?-p <provider>?對 provider 進(jìn)一步過濾。例如:?autok3s describe -n myk3s -p alibaba?。
Name: myk3s
Provider: alibaba
Region: cn-hangzhou
Zone: cn-hangzhou-i
Master: 2
Worker: 2
Status: Running
Version: v1.19.5+k3s2
Nodes:
  - internal-ip: x.x.x.x
    external-ip: x.x.x.x
    instance-status: Running
    instance-id: xxxxx
    roles: etcd,master
    status: Ready
    hostname: xxxxx
    container-runtime: containerd://1.4.3-k3s1
    version: v1.19.5+k3s2
  - internal-ip: x.x.x.x
    external-ip: x.x.x.x
    instance-status: Running
    instance-id: xxxxxx
    roles: <none>
    status: Ready
    hostname: xxxxxx
    container-runtime: containerd://1.4.3-k3s1
    version: v1.19.5+k3s2
  - internal-ip: x.x.x.x
    external-ip: x.x.x.x
    instance-status: Running
    instance-id: xxxxxxxx
    roles: etcd,master
    status: Ready
    hostname: xxxxxxxx
    container-runtime: containerd://1.4.3-k3s1
    version: v1.19.5+k3s2
  - internal-ip: x.x.x.x
    external-ip: x.x.x.x
    instance-status: Running
    instance-id: xxxxxxx
    roles: <none>
    status: Ready
    hostname: xxxxxxx
    container-runtime: containerd://1.4.3-k3s1
    version: v1.19.5+k3s2

Kubectl

集群創(chuàng)建完成后, ?autok3s ?會自動合并 ?kubeconfig ?文件。

autok3s kubectl config use-context myk3s.cn-hangzhou.alibaba
autok3s kubectl <sub-commands> <flags>

在多個(gè)集群的場景下,可以通過切換上下文來完成對不同集群的訪問。

autok3s kubectl config get-contexts
autok3s kubectl config use-context <context>

SSH

SSH 連接到集群中的某個(gè)主機(jī),這里選擇的集群為 myk3s。

autok3s ssh --provider alibaba --name myk3s

升級 K3s 集群

您可以使用以下命令將指定的 K3s 集群升級到 ?latest ?版本

autok3s upgrade --provider alibaba --name myk3s --k3s-channel latest

如果您想將 K3s 集群升級到指定版本,可以指定 ?--k3s-version ?

autok3s upgrade --provider alibaba --name myk3s --k3s-version v1.22.4+k3s1

進(jìn)階使用

AutoK3s 集成了一些與當(dāng)前 provider 有關(guān)的高級組件,例如私有鏡像倉庫、Terway、CCM 和 UI。

配置私有鏡像倉庫

在運(yùn)行?autok3s create?或?autok3s join?時(shí),您可以通過傳遞?--registry /etc/autok3s/registries.yaml?以使用私有鏡像倉庫,例如:

autok3s -d create \
    --provider alibaba \
    --name myk3s \
    --master 1 \
    --worker 1 \
    --registry /etc/autok3s/registries.yaml

使用私有鏡像倉庫的配置請參考以下內(nèi)容,如果您的私有鏡像倉庫需要 TLS 認(rèn)證,?autok3s?會從本地讀取相關(guān)的 TLS 文件并自動上傳到遠(yuǎn)程服務(wù)器中完成配置,您只需要編輯?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

啟用阿里云 Terway CNI 插件

實(shí)例的類型決定了 K3S 集群可以分配給集群 POD 的 EIP 數(shù)量,更多詳細(xì)信息請參見這里。

autok3s -d create \
    ... \
    --terway "eni"

啟用阿里云 CCM(Cloud Controller Manager)

更多關(guān)于 Aliyun Cloud Provider 信息,請參考Cloud Provider 幫助文檔(中文版)。

autok3s -d create \
    ... \
    --cloud-controller-manager

啟用 UI 組件

AutoK3s 支持兩種 UI 組件,包括 kubernetes-dashboard 和 kube-explorer

開啟 kubernetes dashboard
autok3s -d create -p alibaba \
    ... \
    --enable dashboard

訪問 Token 等設(shè)置請參考此文檔 。

開啟 kube-explorer
autok3s explorer --context <context> --port 9999

您可以通過 http://127.0.0.1:9999 訪問 kube-explorer dashboard 頁面。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號