注意: 我們在 v1.0.0 版本中引入了在 Kubernetes 集群上安裝 Rancher 的官方支持。
本節(jié)介紹了如何使用外部數(shù)據(jù)庫安裝一個高可用的 K3s 集群。
單節(jié)點 k3s server 集群可以滿足各種用例,但是對于需要 Kubernetes control-plane 穩(wěn)定運行的重要環(huán)境,您可以在 HA 配置中運行 K3s。一個 K3s HA 集群由以下幾個部分組成:
關(guān)于這些組件如何協(xié)同工作的更多細節(jié),請參考架構(gòu)部分。
Agent 通過固定的注冊地址進行注冊,但注冊后直接與其中一個 server 節(jié)點建立連接。這是一個由?k3s agent
?進程發(fā)起的 websocket 連接,并由作為 agent 進程一部分運行的客戶端負載均衡器維護。
你首先需要為集群創(chuàng)建一個外部數(shù)據(jù)存儲。請參閱集群數(shù)據(jù)存儲選項文檔了解更多細節(jié)。
K3s 需要兩個或更多的 server 節(jié)點來實現(xiàn)這種 HA 配置。請參閱安裝要求指南了解最低主機要求。
當(dāng)在這些節(jié)點上運行?k3s server
?命令時,必須設(shè)置?datastore-endpoint
?參數(shù),以便 K3s 知道如何連接到外部數(shù)據(jù)存儲。?token
?參數(shù)也可以用來在添加節(jié)點時設(shè)置一個固定的 token。當(dāng)為空時,將自動生成 token。
例如,可以使用如下命令安裝 K3s server,并使用 MySQL 數(shù)據(jù)庫作為外部數(shù)據(jù)存儲和設(shè)置 token:
curl -sfL https://get.k3s.io | sh -s - server \
--token=SECRET \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
國內(nèi)用戶,可以使用以下方法加速安裝:
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server \ --token=SECRET \ --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
根據(jù)數(shù)據(jù)庫類型的不同,數(shù)據(jù)存儲端點的格式也不同。詳情請參考數(shù)據(jù)存儲端點格式章節(jié)。
啟動 server 節(jié)點時,若要設(shè)置 TLS 證書,請參考數(shù)據(jù)存儲配置指南。
注意: 單臺 server 安裝時可用的安裝選項也適用于高可用安裝。更多詳情,請參見安裝和配置選項文檔。
默認情況下,server 節(jié)點將是可調(diào)度的,因此你的工作負載可以在它們上啟動。如果你希望有一個專用的 control-plane,在這個平面上不會運行用戶工作負載,你可以使用 taints。?node-taint
? 參數(shù)將允許你用污點配置節(jié)點,例如?--node-taint CriticalAddonsOnly=true:NoExecute
?。
在所有 server 節(jié)點上啟動?k3s server
?進程后,用?k3s kubectl get nodes
?確保集群正常運行。你應(yīng)該會看到你的 server 節(jié)點處?Ready
?狀態(tài)。
Agent 節(jié)點需要一個 URL 來注冊。這可以是任何 server 節(jié)點的 IP 或主機名,但在許多情況下,這些節(jié)點可能會隨著時間的推移而改變。例如,如果您在支持縮放組的云中運行集群,您可能會隨著時間的推移上下縮放 server 節(jié)點組,導(dǎo)致節(jié)點被創(chuàng)建和銷毀,從而具有與初始 server 節(jié)點不同的 IP。因此,你應(yīng)該在 server 節(jié)點前面有一個穩(wěn)定的端點,不會隨時間推移而改變。可以使用許多方法來設(shè)置此端點,例如:
這個端點也可以用來訪問 Kubernetes API。因此,你可以修改你的?kubeconfig
?文件來指向它,而不是特定的節(jié)點。為了避免在這樣的配置中出現(xiàn)證書錯誤,你應(yīng)該使用?--tls-san YOUR_IP_OR_HOSTNAME_HERE
?選項安裝 server 節(jié)點。這個選項在 TLS 證書中增加了一個額外的主機名或 IP 作為備用名稱,如果你想通過 IP 和主機名訪問,可以多次指定。
步驟 2 中的相同示例命令可用于加入其他 server 節(jié)點,其中需要使用第一個節(jié)點的 token。
如果第一個 server 節(jié)點是在沒有 ?--token
? CLI 標(biāo)志或 ?K3S_TOKEN
?變量的情況下啟動的,那么可以從任何已經(jīng)加入集群的 server 節(jié)點中檢索到 token:
cat /var/lib/rancher/k3s/server/token
然后可以使用 token添加其他 server 節(jié)點:
curl -sfL https://get.k3s.io | sh -s - server \
--token=SECRET \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
有幾個配置標(biāo)志在所有 server 節(jié)點中必須是相同的:
--cluster-dns
?, ?--cluster-domain
?, ?--cluster-cidr
?, ?--service-cidr
?--disable-helm-controller
?, ?--disable-kube-proxy
?, ?--disable-network-policy
?和任何傳遞給?--disable
?的組件--secrets-encryption
?注意:應(yīng)該備份 token 的值,因為從備份恢復(fù)和添加節(jié)點時都需要它。以前,K3s 在使用外部 SQL 數(shù)據(jù)存儲時不強制使用 token。
因為 K3s server 節(jié)點默認是可調(diào)度的,所以 HA K3s server 集群的最小節(jié)點數(shù)是兩個 server 節(jié)點和零個 agent 節(jié)點。要添加指定運行您的應(yīng)用和服務(wù)的節(jié)點,請將 agent 節(jié)點加入到您的集群中。
在 HA 集群中加入 agent 節(jié)點與在單個 server 集群中加入 agent 節(jié)點是一樣的。你只需要指定 agent 應(yīng)該注冊到的 URL 和它應(yīng)該使用的 token 即可。
K3S_TOKEN=SECRET k3s agent --server https://fixed-registration-address:6443
更多建議: