K3s 集群數(shù)據(jù)存儲(chǔ)選項(xiàng)

2022-08-22 11:09 更新

集群數(shù)據(jù)存儲(chǔ)選項(xiàng)

使用 etcd 以外的數(shù)據(jù)存儲(chǔ)運(yùn)行 Kubernetes 的能力使 K3s 區(qū)別于其他 Kubernetes 發(fā)行版。該功能為 Kubernetes 操作者提供了靈活性??捎玫臄?shù)據(jù)存儲(chǔ)選項(xiàng)允許您選擇一個(gè)最適合您用例的數(shù)據(jù)存儲(chǔ)。例如:

  • 如果你的團(tuán)隊(duì)沒有操作 etcd 的專業(yè)知識(shí),可以選擇 MySQL 或 PostgreSQL 等企業(yè)級(jí) SQL 數(shù)據(jù)庫。
  • 如果您需要在 CI/CD 環(huán)境中運(yùn)行一個(gè)簡(jiǎn)單的、短暫的集群,您可以使用嵌入式 SQLite 數(shù)據(jù)庫。
  • 如果你希望在邊緣部署 Kubernetes,并需要一個(gè)高可用的解決方案,但又無法承擔(dān)在邊緣管理數(shù)據(jù)庫的操作開銷,你可以使用 K3s 建立在嵌入式 etcd 之上的嵌入式 HA 數(shù)據(jù)存儲(chǔ)。

K3s 支持以下數(shù)據(jù)存儲(chǔ)選項(xiàng):

  • 嵌入式 SQLite
  • PostgreSQL (經(jīng)過認(rèn)證的版本:10.7 和 11.5)
  • MySQL (經(jīng)過認(rèn)證的版本:5.7)
  • MariaDB (經(jīng)過認(rèn)證的版本:10.3.20)
  • etcd (經(jīng)過認(rèn)證的版本:3.3.15)
  • 嵌入式 etcd 高可用

外部數(shù)據(jù)存儲(chǔ)配置參數(shù)

如果你想使用外部數(shù)據(jù)存儲(chǔ),如 PostgreSQL、MySQL 或 etcd,你必須設(shè)置?datastore-endpoint?參數(shù),以便 K3s 知道如何連接到它。你也可以指定參數(shù)來配置連接的認(rèn)證和加密。下表總結(jié)了這些參數(shù),它們可以作為 CLI 標(biāo)志或環(huán)境變量傳遞。

CLI Flag 環(huán)境變量 描述
--datastore-endpoint K3S_DATASTORE_ENDPOINT 指定一個(gè) PostgreSQL、MySQL 或 etcd 連接字符串。用于描述與數(shù)據(jù)存儲(chǔ)的連接。這個(gè)字符串的結(jié)構(gòu)是特定于每個(gè)后端的,詳情如下。
--datastore-cafile K3S_DATASTORE_CAFILE TLS 證書頒發(fā)機(jī)構(gòu)(CA)文件,用于幫助確保與數(shù)據(jù)存儲(chǔ)的通信安全。如果你的數(shù)據(jù)存儲(chǔ)通過 TLS 服務(wù)請(qǐng)求,使用由自定義證書頒發(fā)機(jī)構(gòu)簽署的證書,你可以使用這個(gè)參數(shù)指定該 CA,這樣 K3s 客戶端就可以正確驗(yàn)證證書。
--datastore-certfile K3S_DATASTORE_CERTFILE TLS 證書文件,用于對(duì)數(shù)據(jù)存儲(chǔ)進(jìn)行基于客戶端證書的驗(yàn)證。要使用這個(gè)功能,你的數(shù)據(jù)存儲(chǔ)必須被配置為支持基于客戶端證書的認(rèn)證。如果你指定了這個(gè)參數(shù),你還必須指定datastore-keyfile參數(shù)。
--datastore-keyfile K3S_DATASTORE_KEYFILE TLS 密鑰文件,用于對(duì)數(shù)據(jù)存儲(chǔ)進(jìn)行基于客戶端證書的認(rèn)證。更多細(xì)節(jié)請(qǐng)參見前面的datastore-certfile參數(shù)。

作為最佳實(shí)踐,我們建議將這些參數(shù)設(shè)置為環(huán)境變量,而不是命令行參數(shù),這樣你的數(shù)據(jù)庫證書或其他敏感信息就不會(huì)作為進(jìn)程信息的一部分暴露出來。

數(shù)據(jù)存儲(chǔ)端點(diǎn)格式和功能

如前所述,傳遞給?datastore-endpoint?參數(shù)的值的格式取決于數(shù)據(jù)存儲(chǔ)后端。下文詳細(xì)介紹了每個(gè)支持的外部數(shù)據(jù)存儲(chǔ)的格式和功能。

  • PostgreSQL
  • 最常見的 PostgreSQL 數(shù)據(jù)存儲(chǔ)端點(diǎn)的參數(shù)格式:

    ?postgres://username:password@hostname:port/database-name ?

    更多的高級(jí)配置參數(shù),請(qǐng)參見 https://godoc.org/github.com/lib/pq

    如果指定的數(shù)據(jù)庫名稱不存在,k3s server 將嘗試創(chuàng)建它。

    如果你只提供?postgres://?作為端點(diǎn),K3s 將嘗試做如下操作:

    • 使用?postgres?作為用戶名和密碼連接到 localhost
    • 創(chuàng)建一個(gè)名為?kubernetes?的數(shù)據(jù)庫
  • MySQL/MariaDB
  • 最常見的 MySQL 和 MariaDB 的?datastore-endpoint?參數(shù)格式如下:

    ?mysql://username:password@tcp(hostname:3306)/database-name ?

    更多的高級(jí)配置參數(shù),請(qǐng)參見 https://github.com/go-sql-driver/mysql#dsn-data-source-name

    請(qǐng)注意,由于 K3s 中的一個(gè)已知問題,你無法設(shè)置?tls?參數(shù)。支持 TLS 通信,但你不能將這個(gè)參數(shù)設(shè)置為 "skip-verify "來使 K3s 跳過證書驗(yàn)證。

    如果指定的數(shù)據(jù)庫名稱不存在,k3s server 將嘗試創(chuàng)建它。

    如果你只提供?mysql://?作為端點(diǎn),K3s 將嘗試做如下操作:

    • 使用 root 用戶并且不使用密碼連接到?/var/run/mysqld/mysqld.sock?上的 MySQL 套接字
    • 創(chuàng)建一個(gè)名為?kubernetes?的數(shù)據(jù)庫
  • etcd
  • 最常見的 etcd 的?datastore-endpoint?參數(shù)的格式如下:

    ?https://etcd-host-1:2379,https://etcd-host-2:2379,https://etcd-host-3:2379 ?

    以上假設(shè)是一個(gè)典型的三節(jié)點(diǎn) etcd 集群。該參數(shù)可以再接受一個(gè)以逗號(hào)分隔的 etcd URL。

基于上述情況,可以使用下面的示例命令來啟動(dòng)一個(gè)連接到名為 k3s 的 PostgreSQL 數(shù)據(jù)庫的 k3s server 實(shí)例:

K3S_DATASTORE_ENDPOINT='postgres://username:password@hostname:5432/k3s' k3s server

而下面的例子可以用來使用客戶端證書認(rèn)證連接到 MySQL 數(shù)據(jù)庫:

K3S_DATASTORE_ENDPOINT='mysql://username:password@tcp(hostname:3306)/k3s' \
K3S_DATASTORE_CERTFILE='/path/to/client.crt' \
K3S_DATASTORE_KEYFILE='/path/to/client.key' \
k3s server


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)