使用 etcd 以外的數(shù)據(jù)存儲(chǔ)運(yùn)行 Kubernetes 的能力使 K3s 區(qū)別于其他 Kubernetes 發(fā)行版。該功能為 Kubernetes 操作者提供了靈活性??捎玫臄?shù)據(jù)存儲(chǔ)選項(xiàng)允許您選擇一個(gè)最適合您用例的數(shù)據(jù)存儲(chǔ)。例如:
K3s 支持以下數(shù)據(jù)存儲(chǔ)選項(xiàng):
如果你想使用外部數(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)程信息的一部分暴露出來。
如前所述,傳遞給?datastore-endpoint
?參數(shù)的值的格式取決于數(shù)據(jù)存儲(chǔ)后端。下文詳細(xì)介紹了每個(gè)支持的外部數(shù)據(jù)存儲(chǔ)的格式和功能。
最常見的 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
?作為用戶名和密碼連接到 localhostkubernetes
?的數(shù)據(jù)庫最常見的 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 將嘗試做如下操作:
/var/run/mysqld/mysqld.sock
?上的 MySQL 套接字kubernetes
?的數(shù)據(jù)庫最常見的 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
更多建議: