基于 Kubernetes 的子群集

Eon 模式使用子群集进行工作负载隔离和扩展。Vertica 操作器提供了工具以将外部客户端通信定向到特定子群集,以及在不停止数据库的情况下自动扩展。

自定义资源定义 (CRD) 提供参数,允许您针对特定工作负载微调每个子群集。例如,您可以增加子群集 size 设置以增加吞吐量,或调整资源请求和限制以管理计算能力。当您创建自定义资源实例时,操作器将每个子群集部署为 StatefulSet。每个 StatefulSet 都有一个服务对象,它允许外部客户端连接到特定子群集。

Kubernetes 使用子群集名称来派生子群集 StatefulSet、服务对象和 pod 的名称。这种命名约定将子群集对象紧密耦合在一起,以帮助 Kubernetes 有效地管理群集。如果要重命名子群集,则必须将其从 CRD 中删除并重新定义,以便操作器可以使用派生名称创建新对象。

外部客户端连接

外部客户端可以将特定的子群集作为目标,这些子群集在经过微调之后可以处理外部客户端的工作负载。每个子群集都有一个用来处理外部连接的服务对象。要将多个子群集作为单个服务对象的目标,请在自定义资源 (CR) 中为每个子群集分配相同的 spec.subclusters.serviceName 值。有关实施的详细信息,请参阅创建自定义资源

操作器执行运行状况监控,检查 Vertica 守护程序是否在每个 pod 上运行。如果是,则操作器允许服务对象将流量路由到 pod。

默认情况下,服务对象从自定义资源名称和关联的子群集派生其名称,并使用 customResourceName-subclusterName 格式。使用 subclusters[i].serviceName CR 参数 覆盖默认命名格式并使用 metadata.name-serviceName 格式。

Vertica 支持以下服务对象类型:

  • ClusterIP:默认服务类型。此服务提供内部负载均衡,并设置仅可从子群集内部访问的稳定 IP 和端口。

  • NodePort:提供外部客户端访问。您可以为子群集中的每个主机节点指定一个端口号,以便为客户端连接打开。

  • LoadBalancer:使用云提供商负载均衡器根据需要创建 NodePort 和 ClusterIP 服务。有关实施的详细信息,请参阅 Kubernetes 文档 和云提供商文档。

有关配置的详细信息,请参阅创建自定义资源

管理内部和外部工作负载

Vertica StatefulSet 与外部服务对象相关联。所有外部客户端请求都通过此服务对象发送,并在群集中的 pod 之间进行负载均衡。

导入和导出

在 Kubernetes 之外的群集之间导入和导出数据要求您公开具有 NodePortLoadBalancer 服务类型的服务并正确配置网络。