使用 etcd 以外的數(shù)據(jù)存儲運行 Kubernetes 的能力使 K3s 區(qū)別于其他 Kubernetes 發(fā)行版。該功能為 Kubernetes 操作者提供了靈活性。可用的數(shù)據(jù)存儲選項允許您選擇一個最適合您用例的數(shù)據(jù)存儲。例如:
K3s 支持以下數(shù)據(jù)存儲選項:
如果你想使用外部數(shù)據(jù)存儲,如 PostgreSQL、MySQL 或 etcd,你必須設置?datastore-endpoint
?參數(shù),以便 K3s 知道如何連接到它。你也可以指定參數(shù)來配置連接的認證和加密。下表總結了這些參數(shù),它們可以作為 CLI 標志或環(huán)境變量傳遞。
CLI Flag | 環(huán)境變量 | 描述 |
---|---|---|
--datastore-endpoint
|
K3S_DATASTORE_ENDPOINT
|
指定一個 PostgreSQL、MySQL 或 etcd 連接字符串。用于描述與數(shù)據(jù)存儲的連接。這個字符串的結構是特定于每個后端的,詳情如下。 |
--datastore-cafile
|
K3S_DATASTORE_CAFILE
|
TLS 證書頒發(fā)機構(CA)文件,用于幫助確保與數(shù)據(jù)存儲的通信安全。如果你的數(shù)據(jù)存儲通過 TLS 服務請求,使用由自定義證書頒發(fā)機構簽署的證書,你可以使用這個參數(shù)指定該 CA,這樣 K3s 客戶端就可以正確驗證證書。 |
--datastore-certfile
|
K3S_DATASTORE_CERTFILE
|
TLS 證書文件,用于對數(shù)據(jù)存儲進行基于客戶端證書的驗證。要使用這個功能,你的數(shù)據(jù)存儲必須被配置為支持基于客戶端證書的認證。如果你指定了這個參數(shù),你還必須指定datastore-keyfile 參數(shù)。 |
--datastore-keyfile
|
K3S_DATASTORE_KEYFILE
|
TLS 密鑰文件,用于對數(shù)據(jù)存儲進行基于客戶端證書的認證。更多細節(jié)請參見前面的datastore-certfile 參數(shù)。 |
作為最佳實踐,我們建議將這些參數(shù)設置為環(huán)境變量,而不是命令行參數(shù),這樣你的數(shù)據(jù)庫證書或其他敏感信息就不會作為進程信息的一部分暴露出來。
如前所述,傳遞給?datastore-endpoint
?參數(shù)的值的格式取決于數(shù)據(jù)存儲后端。下文詳細介紹了每個支持的外部數(shù)據(jù)存儲的格式和功能。
最常見的 PostgreSQL 數(shù)據(jù)存儲端點的參數(shù)格式:
?postgres://username:password@hostname:port/database-name
?
更多的高級配置參數(shù),請參見 https://godoc.org/github.com/lib/pq
如果指定的數(shù)據(jù)庫名稱不存在,k3s server 將嘗試創(chuàng)建它。
如果你只提供?postgres://
?作為端點,K3s 將嘗試做如下操作:
postgres
?作為用戶名和密碼連接到 localhostkubernetes
?的數(shù)據(jù)庫最常見的 MySQL 和 MariaDB 的?datastore-endpoint
?參數(shù)格式如下:
?mysql://username:password@tcp(hostname:3306)/database-name
?
更多的高級配置參數(shù),請參見 https://github.com/go-sql-driver/mysql#dsn-data-source-name
請注意,由于 K3s 中的一個已知問題,你無法設置?tls
?參數(shù)。支持 TLS 通信,但你不能將這個參數(shù)設置為 "skip-verify "來使 K3s 跳過證書驗證。
如果指定的數(shù)據(jù)庫名稱不存在,k3s server 將嘗試創(chuàng)建它。
如果你只提供?mysql://
?作為端點,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
?
以上假設是一個典型的三節(jié)點 etcd 集群。該參數(shù)可以再接受一個以逗號分隔的 etcd URL。
基于上述情況,可以使用下面的示例命令來啟動一個連接到名為 k3s 的 PostgreSQL 數(shù)據(jù)庫的 k3s server 實例:
K3S_DATASTORE_ENDPOINT='postgres://username:password@hostname:5432/k3s' k3s server
而下面的例子可以用來使用客戶端證書認證連接到 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
更多建議: