K3s 使用外部數(shù)據(jù)庫(kù)實(shí)現(xiàn)高可用安裝

2022-08-24 11:02 更新

使用外部數(shù)據(jù)庫(kù)實(shí)現(xiàn)高可用安裝

注意: 我們?cè)?nbsp;v1.0.0 版本中引入了在 Kubernetes 集群上安裝 Rancher 的官方支持。

本節(jié)介紹了如何使用外部數(shù)據(jù)庫(kù)安裝一個(gè)高可用的 K3s 集群。

單節(jié)點(diǎn) k3s server 集群可以滿足各種用例,但是對(duì)于需要 Kubernetes control-plane 穩(wěn)定運(yùn)行的重要環(huán)境,您可以在 HA 配置中運(yùn)行 K3s。一個(gè) K3s HA 集群由以下幾個(gè)部分組成:

  • 兩個(gè)或多個(gè)server 節(jié)點(diǎn),將為 Kubernetes API 提供服務(wù)并運(yùn)行其他 control-plane 服務(wù)。
  • 零個(gè)或多個(gè)agent 節(jié)點(diǎn),用于運(yùn)行您的應(yīng)用和服務(wù)。
  • 外部數(shù)據(jù)存儲(chǔ) (與單個(gè) k3s server 設(shè)置中使用的嵌入式 SQLite 數(shù)據(jù)存儲(chǔ)相反)
  • 固定的注冊(cè)地址,位于 server 節(jié)點(diǎn)的前面,以允許 agent 節(jié)點(diǎn)向集群注冊(cè)

關(guān)于這些組件如何協(xié)同工作的更多細(xì)節(jié),請(qǐng)參考架構(gòu)部分。

Agent 通過(guò)固定的注冊(cè)地址進(jìn)行注冊(cè),但注冊(cè)后直接與其中一個(gè) server 節(jié)點(diǎn)建立連接。這是一個(gè)由?k3s agent?進(jìn)程發(fā)起的 websocket 連接,并由作為 agent 進(jìn)程一部分運(yùn)行的客戶端負(fù)載均衡器維護(hù)。

安裝概要

1. 創(chuàng)建一個(gè)外部數(shù)據(jù)存儲(chǔ)

你首先需要為集群創(chuàng)建一個(gè)外部數(shù)據(jù)存儲(chǔ)。請(qǐng)參閱集群數(shù)據(jù)存儲(chǔ)選項(xiàng)文檔了解更多細(xì)節(jié)。

2. 啟動(dòng) server 節(jié)點(diǎn)

K3s 需要兩個(gè)或更多的 server 節(jié)點(diǎn)來(lái)實(shí)現(xiàn)這種 HA 配置。請(qǐng)參閱安裝要求指南了解最低主機(jī)要求。

當(dāng)在這些節(jié)點(diǎn)上運(yùn)行?k3s server?命令時(shí),必須設(shè)置?datastore-endpoint?參數(shù),以便 K3s 知道如何連接到外部數(shù)據(jù)存儲(chǔ)。?token ?參數(shù)也可以用來(lái)在添加節(jié)點(diǎn)時(shí)設(shè)置一個(gè)固定的 token。當(dāng)為空時(shí),將自動(dòng)生成 token。

例如,可以使用如下命令安裝 K3s server,并使用 MySQL 數(shù)據(jù)庫(kù)作為外部數(shù)據(jù)存儲(chǔ)和設(shè)置 token

curl -sfL https://get.k3s.io | sh -s - server \
  --token=SECRET \
  --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"

國(guó)內(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ù)庫(kù)類(lèi)型的不同,數(shù)據(jù)存儲(chǔ)端點(diǎn)的格式也不同。詳情請(qǐng)參考數(shù)據(jù)存儲(chǔ)端點(diǎn)格式章節(jié)。

啟動(dòng) server 節(jié)點(diǎn)時(shí),若要設(shè)置 TLS 證書(shū),請(qǐng)參考數(shù)據(jù)存儲(chǔ)配置指南。

注意: 單臺(tái) server 安裝時(shí)可用的安裝選項(xiàng)也適用于高可用安裝。更多詳情,請(qǐng)參見(jiàn)安裝和配置選項(xiàng)文檔。

默認(rèn)情況下,server 節(jié)點(diǎn)將是可調(diào)度的,因此你的工作負(fù)載可以在它們上啟動(dòng)。如果你希望有一個(gè)專(zhuān)用的 control-plane,在這個(gè)平面上不會(huì)運(yùn)行用戶工作負(fù)載,你可以使用 taints。?node-taint? 參數(shù)將允許你用污點(diǎn)配置節(jié)點(diǎn),例如?--node-taint CriticalAddonsOnly=true:NoExecute?。

在所有 server 節(jié)點(diǎn)上啟動(dòng)?k3s server?進(jìn)程后,用?k3s kubectl get nodes?確保集群正常運(yùn)行。你應(yīng)該會(huì)看到你的 server 節(jié)點(diǎn)處?Ready?狀態(tài)。

3. 配置固定的注冊(cè)地址

Agent 節(jié)點(diǎn)需要一個(gè) URL 來(lái)注冊(cè)。這可以是任何 server 節(jié)點(diǎn)的 IP 或主機(jī)名,但在許多情況下,這些節(jié)點(diǎn)可能會(huì)隨著時(shí)間的推移而改變。例如,如果您在支持縮放組的云中運(yùn)行集群,您可能會(huì)隨著時(shí)間的推移上下縮放 server 節(jié)點(diǎn)組,導(dǎo)致節(jié)點(diǎn)被創(chuàng)建和銷(xiāo)毀,從而具有與初始 server 節(jié)點(diǎn)不同的 IP。因此,你應(yīng)該在 server 節(jié)點(diǎn)前面有一個(gè)穩(wěn)定的端點(diǎn),不會(huì)隨時(shí)間推移而改變??梢允褂迷S多方法來(lái)設(shè)置此端點(diǎn),例如:

  • 一個(gè) 4 層(TCP)負(fù)載均衡器
  • 輪詢 DNS
  • 虛擬或彈性 IP 地址

這個(gè)端點(diǎn)也可以用來(lái)訪問(wèn) Kubernetes API。因此,你可以修改你的?kubeconfig?文件來(lái)指向它,而不是特定的節(jié)點(diǎn)。為了避免在這樣的配置中出現(xiàn)證書(shū)錯(cuò)誤,你應(yīng)該使用?--tls-san YOUR_IP_OR_HOSTNAME_HERE?選項(xiàng)安裝 server 節(jié)點(diǎn)。這個(gè)選項(xiàng)在 TLS 證書(shū)中增加了一個(gè)額外的主機(jī)名或 IP 作為備用名稱(chēng),如果你想通過(guò) IP 和主機(jī)名訪問(wèn),可以多次指定。

4. 可選:加入其他的 server 節(jié)點(diǎn)

步驟 2 中的相同示例命令可用于加入其他 server 節(jié)點(diǎn),其中需要使用第一個(gè)節(jié)點(diǎn)的 token。

如果第一個(gè) server 節(jié)點(diǎn)是在沒(méi)有 ?--token? CLI 標(biāo)志或 ?K3S_TOKEN ?變量的情況下啟動(dòng)的,那么可以從任何已經(jīng)加入集群的 server 節(jié)點(diǎn)中檢索到 token:

cat /var/lib/rancher/k3s/server/token

然后可以使用 token添加其他 server 節(jié)點(diǎn):

curl -sfL https://get.k3s.io | sh -s - server \
  --token=SECRET \
  --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"

有幾個(gè)配置標(biāo)志在所有 server 節(jié)點(diǎn)中必須是相同的:

  • 與網(wǎng)絡(luò)有關(guān)的標(biāo)志:?--cluster-dns?, ?--cluster-domain?, ?--cluster-cidr?, ?--service-cidr ?
  • 控制某些組件的部署的標(biāo)志:?--disable-helm-controller?, ?--disable-kube-proxy?, ?--disable-network-policy?和任何傳遞給?--disable?的組件
  • 與功能相關(guān)的標(biāo)志:?--secrets-encryption?

注意:應(yīng)該備份 token 的值,因?yàn)閺膫浞莼謴?fù)和添加節(jié)點(diǎn)時(shí)都需要它。以前,K3s 在使用外部 SQL 數(shù)據(jù)存儲(chǔ)時(shí)不強(qiáng)制使用 token。

5. 可選: 加入 Agent 節(jié)點(diǎn)

因?yàn)?nbsp;K3s server 節(jié)點(diǎn)默認(rèn)是可調(diào)度的,所以 HA K3s server 集群的最小節(jié)點(diǎn)數(shù)是兩個(gè) server 節(jié)點(diǎn)和零個(gè) agent 節(jié)點(diǎn)。要添加指定運(yùn)行您的應(yīng)用和服務(wù)的節(jié)點(diǎn),請(qǐng)將 agent 節(jié)點(diǎn)加入到您的集群中。

在 HA 集群中加入 agent 節(jié)點(diǎn)與在單個(gè) server 集群中加入 agent 節(jié)點(diǎn)是一樣的。你只需要指定 agent 應(yīng)該注冊(cè)到的 URL 和它應(yīng)該使用的 token 即可。

K3S_TOKEN=SECRET k3s agent --server https://fixed-registration-address:6443


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)