跳至主要内容

集群数据存储

K3s 与其他 Kubernetes 发行版不同,它能够使用除 etcd 之外的其他数据存储来运行 Kubernetes。此功能为 Kubernetes 操作员提供了灵活性。可用的数据存储选项允许您选择最适合您的用例的数据存储。例如

  • 如果您的团队没有操作 etcd 的专业知识,您可以选择企业级 SQL 数据库,例如 MySQL 或 PostgreSQL
  • 如果需要在 CI/CD 环境中运行一个简单的、短暂的集群,可以使用嵌入式 SQLite 数据库
  • 如果希望在边缘部署 Kubernetes 并需要高度可用的解决方案,但无法负担在边缘管理数据库的操作开销,可以使用 K3s 构建在嵌入式 etcd 之上的嵌入式 HA 数据存储。

K3s 支持以下数据存储选项

  • 嵌入式 SQLite
    SQLite 无法在包含多个服务器的集群中使用。
    SQLite 是默认数据存储,如果不存在其他数据存储配置,并且磁盘上不存在嵌入式 etcd 数据库文件,则将使用 SQLite。
  • 嵌入式 etcd
    有关在多个服务器上使用嵌入式 etcd 的更多信息,请参见 高可用性嵌入式 etcd 文档。如果 K3s 配置为初始化新的 etcd 集群、加入现有 etcd 集群,或者启动时磁盘上存在 etcd 数据库文件,则将自动选择嵌入式 etcd。
  • 外部数据库
    有关在多个服务器上使用外部数据存储的更多信息,请参见 高可用性外部数据库 文档。
    支持以下外部数据存储
    • etcd(针对版本 3.5.4 认证)
    • MySQL(针对版本 5.7 和 8.0 认证)
    • MariaDB(针对版本 10.6.8 认证)
    • PostgreSQL(针对版本 12.16、13.12、14.9 和 15.4 认证)
准备好的语句支持

K3s 需要数据库的准备好的语句支持。这意味着诸如 PgBouncer 之类的连接池可能需要额外的配置才能与 K3s 配合使用。

外部数据存储配置参数

如果您希望使用 PostgreSQL、MySQL 或 etcd 等外部数据存储,则必须设置 datastore-endpoint 参数,以便 K3s 知道如何连接到它。您还可以指定参数来配置连接的身份验证和加密。下表汇总了这些参数,这些参数可以作为 CLI 标志或环境变量传递。

CLI 标志环境变量描述
--datastore-endpointK3S_DATASTORE_ENDPOINT指定 PostgreSQL、MySQL 或 etcd 连接字符串。这是一个用于描述与数据存储的连接的字符串。此字符串的结构特定于每个后端,并在下面详细介绍。
--datastore-cafileK3S_DATASTORE_CAFILETLS 证书颁发机构 (CA) 文件,用于帮助保护与数据存储的通信。如果您的数据存储使用由自定义证书颁发机构签名的证书通过 TLS 提供服务,则可以使用此参数指定该 CA,以便 K3s 客户端可以正确验证证书。
--datastore-certfileK3S_DATASTORE_CERTFILE用于基于客户端证书的身份验证到数据存储的 TLS 证书文件。要使用此功能,您的数据存储必须配置为支持基于客户端证书的身份验证。如果指定此参数,则还必须指定 datastore-keyfile 参数。
--datastore-keyfileK3S_DATASTORE_KEYFILE用于基于客户端证书的身份验证到数据存储的 TLS 密钥文件。有关更多详细信息,请参见前面的 datastore-certfile 参数。

作为最佳实践,我们建议将这些参数设置为环境变量而不是命令行参数,以防止您的数据库凭据或其他敏感信息作为进程信息的一部分暴露。

数据存储端点格式和功能

如前所述,传递给 datastore-endpoint 参数的值的格式取决于数据存储后端。以下是每个支持的外部数据存储的格式和功能详细信息。

在最常见的情况下,PostgreSQL 的 datastore-endpoint 参数具有以下格式

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

提供更高级的配置参数。有关这些参数的更多信息,请参见 https://godoc.org/github.com/lib/pq

如果指定数据库名称,但该名称不存在,则服务器将尝试创建它。

如果仅提供 postgres:// 作为端点,则 K3s 将尝试执行以下操作

  • 使用 postgres 作为用户名和密码连接到 localhost
  • 创建一个名为 kubernetes 的数据库