外部数据存储
数据存储选项
-
外部数据库
-
etcd(针对版本3.5.4进行认证)
-
MySQL(针对版本5.7和8.0进行认证)
-
MariaDB(针对版本10.6.8进行认证)
-
PostgreSQL(针对版本12.16、13.12、14.9和15.4进行认证)
-
|
预处理语句支持
RKE2需要数据库对预处理语句的支持。这意味着像 PgBouncer这样的连接池可能需要额外配置才能与RKE2一起使用。 |
外部数据存储配置参数
如果您希望使用外部数据存储,如PostgreSQL、MySQL或etcd,您必须设置`datastore-endpoint`配置,以便RKE2知道如何连接到它。您还可以指定参数以配置连接的身份验证和加密。下表总结了这些选项:
| 选项 | 环境变量 | 说明 |
|---|---|---|
|
|
指定PostgreSQL、MySQL或etcd连接字符串。这是用于描述与数据存储连接的字符串。该字符串的结构特定于每个后端,详细信息如下。 |
|
|
用于帮助保护与数据存储通信的TLS证书颁发机构(CA)文件。如果您的数据存储通过TLS使用由自定义证书颁发机构签署的证书提供请求,您可以使用此参数指定该CA,以便RKE2客户端可以正确验证证书。 |
|
|
用于基于客户端证书进行身份验证以访问您的数据存储的TLS证书文件。要使用此功能,您的数据存储必须配置为支持基于客户端证书的身份验证。如果您指定此参数,则必须同时指定 |
|
|
用于基于客户端证书进行身份验证以访问您的数据存储的TLS密钥文件。有关更多详细信息,请参见之前的 |
数据存储端点格式和功能
如前所述,传递给 datastore-endpoint 参数的值的格式取决于数据存储后端。以下详细说明了每个支持的外部数据存储的格式和功能。
-
PostgreSQL
-
MySQL / MariaDB
-
etcd
PostgreSQL的典型`datastore-endpoint`选项具有以下格式:
postgres://username:password@hostname:port/database-name
提供了更高级的配置参数。有关这些的更多信息,请参见 https://godoc.org/github.com/lib/pq.。
如果您指定了数据库名称且该数据库不存在,服务器将尝试创建它。
如果您仅将`postgres://`作为端点提供,RKE2将尝试执行以下操作:
-
使用`postgres`作为用户名和密码连接到localhost。
-
创建一个名为
kubernetes的数据库。
MySQL 和 MariaDB 的典型 datastore-endpoint 选项具有以下格式:
mysql://username:password@tcp(hostname:3306)/database-name
提供了更高级的配置参数。有关更多信息,请参见 https://github.com/go-sql-driver/mysql#dsn-data-source-name.。
如果您指定了数据库名称且该数据库不存在,服务器将尝试创建它。
如果您仅将`mysql://`作为端点提供,RKE2将尝试执行以下操作:
-
使用
root用户和无密码连接到/var/run/mysqld/mysqld.sock的 MySQL 套接字。 -
创建一个名为
kubernetes的数据库。
etcd 的典型 datastore-endpoint 选项具有以下格式:
https://etcd-host-1:2379,https://etcd-host-2:2379,https://etcd-host-3:2379
以上假设了一个典型的三节点etcd集群。该参数接受以逗号分隔的 etcd URL。
外部数据库
1.创建外部数据存储
您首先需要为集群创建一个外部数据存储。有关更多详细信息,请参见 [Datastore Options] 部分。
2.启动服务器节点
RKE2 需要两个或更多服务器节点以进行此 HA 配置。有关最低机器要求,请参见 要求 指南。
在这些节点上使用 rke2-server 启动 systemctl start rke2-server 服务时,必须在配置中设置 datastore-endpoint 选项,以便 RKE2 知道如何连接到外部数据存储。token 选项也可以用于在添加节点时设置确定性词元。当为空时,此词元将自动生成以供进一步使用。
例如,可以使用如下的 config.yaml 来配置 RKE2,使 MySQL 数据库作为外部数据存储并设置一个词元:
|
RKE2 配置文件需要手动创建。您可以通过以特权用户身份运行 touch /etc/rancher/rke2/config.yaml 来完成此操作。 |
datastore-endpoint: "mysql://username:password@tcp(hostname:3306)/database-name"
token: SECRET
数据存储端点格式根据数据库类型而有所不同。有关详细信息,请参阅 数据存储端点格式 部分。
要在启动服务器节点时配置 TLS 证书,请参阅 数据存储配置部分。
默认情况下,服务器节点将可调度,因此您的工作负载可以在其上启动。如果您希望拥有一个专用的控制平面,不运行任何用户工作负载,可以使用 污点。
一旦您在所有服务器节点上启动了 rke2-server 进程,请使用 kubectl get nodes 检查集群是否已正确启动。您应该看到您的服务器节点处于 Ready 状态。
3.可选:加入额外的服务器节点
在步骤 2 中指定的相同示例配置可以用于加入额外的服务器节点,并且必须将第一个节点的相同词元添加到配置中。
如果第一个服务器节点在没有 token 选项的情况下启动,则可以从已加入集群的任何服务器中检索词元值:
cat /var/lib/rancher/rke2/server/token
然后,您可以通过将 server 地址添加到配置中并使用 rke2-server 启动 systemctl start rke2-server 进程来加入额外的服务器。
server: https://you-first-server-node-address:9345
datastore-endpoint: "mysql://username:password@tcp(hostname:3306)/database-name"
token: SECRET
在所有服务器节点中,有一些配置标志必须保持一致:
-
与网络相关的标志:
cluster-dns、cluster-domain、cluster-cidr、service-cidr -
控制某些组件部署的标志:
disable-helm-controller以及传递给disable的任何组件 -
与功能相关的标志:
secrets-encryption
|
确保保留此词元的副本,因为在从备份恢复和添加节点时需要它。 |