混合 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 后,使用 admintoolsdb_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:每个子群集的定义。

有关完整实施的详细信息,请参阅创建自定义资源。有关每个设置的详细信息,请参阅自定义资源定义参数