暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Vertica on Kubernetes

原创 simonchiang 2024-05-22
212

Vertica于2021年8月发布了VerticaDB Operator,开始了Vertica与Kubernetes的集成。该Operator可以自动执行许多 Vertica 管理员任务,例如在任何节点出现故障时重新启动 Vertica、将 Vertica 升级到新版本同时保持数据库在线,以及与 Kubernetes Horizo​​ntalPodAutoscaler 集成。
本篇文章介绍了在 Kubernetes 中启动并运行 Vertica 的简单步骤。

Kubernetes安装

通常,开发人员认为他们必须在大型多节点集群中运行 Kubernetes。但是,出于测试目的,Kubernetes 足够小,您可以在自己的计算机上运行它。这就是我们在本教程中要做的事情。 有几种方法可以在本地运行 Kubernetes。本教程使用 kind,它代表“Kubernetes IN Docker”。
除了 kind 之外,您还必须安装以下内容:

  • Docker
  • kubectl
  • Helm
    首先,下载二进制文件。如果您运行的是 Linux,则可以复制并粘贴以下命令来下载它。
    对于其他操作系统,请查看kind官方文档
$ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.14.0/kind-linux-amd64 $ chmod +x ./kind $ sudo mv ./kind /usr/local/bin

下一个工具是 kubectl,它是用于与 Kubernetes 集群通信的 CLI。如果您运行的是 Linux,则可以复制以下命令。
对于其他操作系统,请参阅 kubectl 下载页面

$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" $ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

您需要的最后一个工具是 Helm。这是 Kubernetes 的包管理器,我们将使用它来安装 Operator。
您可以使用以下命令下载其安装程序:

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 $ chmod 700 get_helm.sh $ ./get_helm.sh

下载这些工具后,您可以创建 Kubernetes 集群。
首先,创建一个配置文件。
您可以将以下命令复制/粘贴到 shell 中,或使用您喜欢的编辑器创建配置文件:

$ cat << EOF > kind.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 32001 hostPort: 32001 EOF

创建配置后,您可以创建集群:

$ kind create cluster --config kind.yaml Creating cluster "kind" … ✓ Ensuring node image (kindest/node:v1.24.0) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ✓ Joining worker nodes 🚜

部署Operator

官方有两种安装Operator的方法。本教程使用 Helm 安装Operator。您还可以使用operator lifecycle manager来部署它。
有关更多详细信息,请参阅官方文档
运行此命令以使用官方 Helm 图表进行安装:

$ helm repo add vertica-charts https://vertica.github.io/charts $ helm repo update $ helm install vdb-op --wait --namespace my-verticadb-operator --create-namespace vertica-charts/verticadb-operator

这会将operator安装在 Kubernetes 命名空间 my-verticadb-operator 中。
此命令会等待,直到运行operator的 pod 准备就绪。

部署Vertica数据库

至此,我们已经创建了 Kubernetes 集群并部署了 VerticaDB Operator。现在,我们准备创建 Vertica 数据库。
要创建 Vertica 数据库,我们必须创建 VerticaDB CR 的实例。operator对此做出反应并创建必要的对象并通过创建新对象来引导数据库。
我们使用以下示例 CR:

$ cat << EOF > vdb.yaml apiVersion: vertica.com/v1beta1 kind: VerticaDB metadata: name: verticadb-sample spec: annotations: VERTICA_MEMDEBUG: “2” # Required if running macOS with an arm based chip communal: path: "/communal/vertica-db-tutorial" includeUIDInPath: true subclusters: - name: sc volumes: - name: hostpath hostPath: path: /tmp volumeMounts: - name: hostpath mountPath: /communal EOF

注意:CR 还有更多参数 - 以上是所需的最小值。有关完整列表,请参阅 Vertica 文档
此 CR 使用系统上的主机路径作为存储路径创建一个新数据库。这仅适用于创建单节点 Kubernetes 集群。
如果在多节点 Kubernetes 集群上运行,则需要使用所有节点均可访问的存储路径。
该数据库有一个名为 sc 的三节点子集群。该子集群使用社区版许可证,因此最多只能使用三个节点的 Vertica Pod。
要开始创建数据库,您可以使用以下命令应用 CR:

$ kubectl apply --namespace my-verticadb-operator -f vdb.yaml

上面的命令立即返回,但下载 Vertica 映像并创建数据库需要几分钟的时间。您可以使用以下命令等待此过程完成:

$ kubectl wait --for=condition=DBInitialized=True --namespace my-verticadb-operator vdb/verticadb-sample --timeout=10m

在一切设置完成之前,此命令不会显示任何输出。可以通过发出以下命令查看其进度:

$ kubectl get pods --namespace my-verticadb-operator --selector app.kubernetes.io/instance=verticadb-sample NAME READY STATUS RESTARTS AGE verticadb-sample-sc-0 0/1 ContainerCreating 0 97s verticadb-sample-sc-1 0/1 ContainerCreating 0 97s verticadb-sample-sc-2 0/1 ContainerCreating 0 97s

如果正在创建数据库,Operator会在后台调用各种命令时记录事件。您可以查看事件以更清楚地了解操作员正在执行的操作。
要查看事件,请对您的 CR 运行描述命令:

$ kubectl describe --namespace my-verticadb-operator vdb/verticadb-sample … Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CreateDBStart 2m59s verticadb-operator Calling 'admintools -t create_db' Normal CreateDBSucceeded 113s verticadb-operator Successfully created database with subcluster sc. It took 1m6.188642254s

还可以通过发出以下命令来查看有关 VerticaDB 的状态:

$ kubectl --namespace my-verticadb-operator get vdb NAME AGE SUBCLUSTERS INSTALLED DBADDED UP verticadb-sample 9m51s 1 3 3 3

访问数据库

现在您有了一个数据库——如何访问它?对于即席查询,您可以直接从其中一个 pod 运行vsql:

$ kubectl exec -it --namespace my-verticadb-operator verticadb-sample-sc-0 -- vsql

然而,这对应用程序并不友好:
您需要知道 Pod 的名称,并且它必须处于 UP 状态。
连接到 Vertica 的最佳方式是通过服务对象。
默认情况下,我们为每个子集群创建一个服务对象。
您可以使用以下命令查看服务对象:

$ kubectl --namespace my-verticadb-operator get service --selector vertica.com/svc-type=external NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE verticadb-sc ClusterIP 10.96.110.181 5433/TCP,5444/TCP 24m

服务对象的名称包含 VerticaDB 名称和子集群名称。 Kubernetes 的网络模型是扁平结构,这意味着任何 pod 都可以访问任何其他 pod。
服务对象的名称存储在 DNS 服务器中,因此可以使用完全限定的域名进行访问。
服务对象还在一组 Pod 之间进行负载平衡,并且仅选择处于“就绪”状态的 Pod。
对于运行 Vertica 的 Pod,这意味着服务器已启动且可连接。但是,默认行为是只能从 Kubernetes 内部的集群内部 IP(称为 ClusterIP)访问服务对象。

如果您想从 Kubernetes 外部访问服务,有几个选项取决于 Kubernetes 的部署位置。
所有主要的云供应商都提供了 LoadBalancer 类型,通过云供应商的负载均衡器向外部公开服务。
对于kind这不是开箱即用的。我们唯一的选择是使用 NodePort,它通过所有 Kubernetes 节点上的端口公开服务。当我们创建 kind 集群时,需要添加了一个端口映射。

要使用 NodePort 以便可以从主机访问 Vertica,请运行此补丁:

$ kubectl patch vdb --namespace my-verticadb-operator verticadb-sample --type=merge --patch '{"spec": {"subclusters": [{"name": "sc", "serviceType": "NodePort", "nodePort": 32001}]}}'

这使得Operator改变服务对象类型。现在,可以使用端口 32001 从主机通过 localhost 访问 Vertica:

$ vsql -U dbadmin -h localhost -p 32001

环境清理

当删除环境时,需要删除 K8s 集群并删除配置文件中设置的 hostPath 中的所有文件(/tmp或者自定义的路径)。
要删除 K8s 集群,请发出以下命令:

$ kind delete cluster Deleting cluster "kind"

这应该足以让您开始在 Kubernetes 中使用 Vertica。
本文中使用的 CR 是最小的 - 还有更多参数可用于自定义您的数据库。
有关更多信息,请访问托管该算子的 GitHub 页面或Vertica的官方文档
二维码.png

最后修改时间:2024-08-29 10:37:36
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论