混合 Kubernetes 群集
Eon 模式数据库可以独立于数据库和在 Kubernetes 内运行主机。此架构在您想要执行以下操作的情况下很有用:
-
利用 Kubernetes 工具快速为数据库创建辅助子群集。
-
创建隔离的沙盒环境以在公共数据集上运行即席查询。
-
在未将主子群集迁移到 Kubernetes 的情况下,试验基于 Kubernetes 的 Vertica 的性能开销。
使用自定义资源定义混合架构的 Kubernetes 部分。自定义资源无法识别与自定义资源分开存在的 Vertica 主机。这限制了操作器的功能,要求您手动完成操作器针对基于 Kubernetes 的 Vertica 标准自定义资源自动执行的一些任务。
要求和限制
混合 Kubernetes 架构有以下要求和限制:
-
混合 Kubernetes 群集需要启用边界网关协议 (BGP) 的工具,以便您的本地子群集可以访问 pod 以进行外部通信。例如,您可以使用 Calico CNI 插件来启用 BGP。
-
您不能在 Kubernetes pod 和本地群集之间使用网络地址转换 (NAT)。
操作器限制
在混合架构中,操作器在自定义资源之外没有可见性。这种有限的可见性意味着操作器无法与 Eon 模式数据库或主子群集进行交互。在自定义资源的范围内,操作器仅自动执行以下操作:
-
根据清单调度 pod。
-
为子群集创建服务对象。
-
创建持久存储每个 pod 的数据的 PersistentVolumeClaim (PVC)。
-
如果 Vertica 服务器进程未运行,则执行 restart_node 管理工具命令。要覆盖此默认行为,请将
autoRestartVertica
设置为false
。
手动任务
由于操作器功能有限,管理员必须手动执行以下任务:
-
如果仲裁丢失,则重新启动群集。有关维持仲裁的详细信息,请参阅Eon 模式数据库中的数据完整性和高可用性。
-
执行
update_vertica
脚本以设置配置目录。基于 Kubernetes 的 Vertica 需要update_vertica
的以下配置选项:$ /opt/vertica/sbin/update_vertica \ --accept-eula \ --add-hosts host-list \ --dba-user su-passwd-Secret \ --failure-threshold NONE \ --no-system-configuration \ --point-to-point \ --data-dir /data-dir \ --dba-user dbadmin \ --no-package-checks
调用
update_vertica
后,使用 admintools 和db_add_node
选项添加节点并完成设置:$ /opt/vertica/bin/admintools \ -t db_add_node \ --hosts host-list \ --database db-name\ --subcluster sc-name \ --noprompt
有关详细信息,请参阅在子群集中添加和移除节点。
定义混合群集
在定义混合群集之前,您必须创建 Secret 来存储 SSH 凭据。在 Eon 模式数据库中,节点通过 SSH 进行通信。Vertica 容器使用 SSH,但每次构建容器时都会重新生成 SSH 密钥。
以下命令创建名为 ssh-key
的 Secret,它在生命周期之间持续存储 SSH 凭据,以允许本地节点和 CR 之间的安全连接:
$ kubectl create secret generic ssh-keys --from-file=$HOME/.ssh
创建自定义资源以定义在标准 Eon 模式数据库之外运行的子群集:
apiVersion: vertica.com/v1beta1
kind: VerticaDB
metadata:
name: hybrid-secondary-sc
spec:
image: vertica/vertica-k8s:latest
initPolicy: ScheduleOnly
sshSecret: ssh-keys
local:
dataPath: /data
depotPath: /depot
dbName: vertdb
subclusters:
- name: sc1
size: 3
- name: sc2
size: 3
在前面的示例中:
-
initPolicy
:混合群集要求您将该选项设置为ScheduleOnly
。 -
sshSecret
:包含 SSH 密钥的 Secret,用于验证与 CR 外部 Vertica 主机的连接。 -
local
:必需。这些值将数据持久存储到 PersistentVolume (PV)。这些值必须匹配 Eon 模式数据库中与 Kubernetes pod 关联的目录位置。 -
dbName
:此值必须匹配与此子群集关联的标准 Eon 模式数据库的名称。 -
subclusters
:每个子群集的定义。
注意
混合自定义资源会忽略用来控制混合子群集范围之外设置的配置参数,例如communal.*
和 subclusters[i].isPrimary
参数。