在 Kubernetes 上运行

本文档描述了如何使用我们提供的 specs 来运行 HStreamDB kubernetes。该文档假设读者 有基本的 kubernetes 知识。在本节结束时,你将拥有一个完全运行在 kubernetes 上的 HStreamDB 集群,它已经准备就绪,可以接收读/写,处理数据,等等。

建立你的 Kubernetes 集群

第一步是要有一个正在运行的 kubernetes 集群。你可以使用一个托管的集群(由你的云提 供商提供),一个自我托管的集群或一个本地的 kubernetes 集群,比如 minikube。请确 保 kubectl 指向你计划使用的任何集群。

另外,你需要一个名为 “hstream-store “的存储类,你可以通过 “kubectl “创建。或者通 过你的云服务提供商的网页来创建,如果它有的话。

提示

对于使用 minikube 的用户, 你可以用默认的存储类 standard.

安装 Zookeeper

HStreamDB 依赖于 Zookeeper 来存储查询信息和一些内部的存储配置,所以我们需要提供 一个 Zookeeper 集群,以便 HStreamDB 能够访问。

在这个演示中,我们将使用helm在 Kubernetes 上运行 - 图1 (opens new window)(一个用于 kubernetes 的软件包管 理器)来安装 zookeeper。安装完 helm 后,运行:

  1. helm repo add bitnami https://charts.bitnami.com/bitnami
  2. helm repo update
  3. helm install zookeeper bitnami/zookeeper \
  4. --set image.tag=3.6 \
  5. --set replicaCount=3 \
  6. --set persistence.storageClass=hstream-store \
  7. --set persistence.size=20Gi
  1. NAME: zookeeper
  2. LAST DEPLOYED: Tue Jul 6 10:51:37 2021
  3. NAMESPACE: test
  4. STATUS: deployed
  5. REVISION: 1
  6. TEST SUITE: None
  7. NOTES:
  8. ** Please be patient while the chart is being deployed **
  9. ZooKeeper can be accessed via port 2181 on the following DNS name from within your cluster:
  10. zookeeper.svc.cluster.local
  11. To connect to your ZooKeeper server run the following commands:
  12. export POD_NAME=$(kubectl get pods -l "app.kubernetes.io/name=zookeeper,app.kubernetes.io/instance=zookeeper,app.kubernetes.io/component=zookeeper" -o jsonpath="{.items[0].metadata.name}")
  13. kubectl exec -it $POD_NAME -- zkCli.sh
  14. To connect to your ZooKeeper server from outside the cluster execute the following commands:
  15. kubectl port-forward svc/zookeeper 2181:2181 &
  16. zkCli.sh 127.0.0.1:2181
  17. WARNING: Rolling tag detected (bitnami/zookeeper:3.6), please note that it is strongly recommended to avoid using rolling tags in a production environment.
  18. +info https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/

这将默认安装一个 3 个节点的 zookeeper 集合。等到所有的节点标记为 Ready。

  1. kubectl get pods
  1. NAME READY STATUS RESTARTS AGE
  2. zookeeper-0 1/1 Running 0 22h
  3. zookeeper-1 1/1 Running 0 4d22h
  4. zookeeper-2 1/1 Running 0 16m

配置和启动 HStreamDB

一旦所有的 zookeeper pods 都准备好了,我们就可以开始安装 HStreamDB 集群。

拿到 k8s spec

  1. git clone git@github.com:hstreamdb/hstream.git
  2. cd hstream/deploy/k8s

更新配置

如果你使用了不同的方式来安装 zookeeper,请确保更新存储配置文件 config.json 中 的 zookeeper 连接字符串和服务器配置文件hstream-server.yaml

它应该看起来像这样:

  1. $ cat config.json | grep -A 2 zookeeper
  2. "zookeeper": {
  3. "zookeeper_uri": "ip://zookeeper-0.zookeeper-headless:2181,zookeeper-1.zookeeper-headless:2181,zookeeper-2.zookeeper-headless:2181",
  4. "timeout": "30s"
  5. }
  6. $ cat hstream-server.yaml | grep -A 1 metastore-uri
  7. - "--metastore-uri"
  8. - "zk://zookeeper-0.zookeeper-headless:2181,zookeeper-1.zookeeper-headless:2181,zookeeper-2.zookeeper-headless:2181"

提示

Storage 配置文件和服务文件中的 zookeeper 连接字符串可以是不同的。但对于正常情况 下,它们是一样的。

在默认情况下。本规范安装了一个 3 个节点的 HStream 服务器集群和 4 个节点的存储集 群。如果你想要一个更大的集群,修改 hstream-server.yamllogdevice-statefulset.yaml 文件,并将复制的数量增加到你想要的集群中的节点数。 另外,默认情况下,我们给节点附加一个 40GB 的持久性存储,如果你想要更多,你可以在 volumeClaimTemplates 部分进行修改。

启动集群

  1. kubectl apply -k .

当你运行kubectl get pods时,你应该看到类似如下:

  1. NAME READY STATUS RESTARTS AGE
  2. hstream-server-0 1/1 Running 0 6d18h
  3. hstream-server-1 1/1 Running 0 6d18h
  4. hstream-server-2 1/1 Running 0 6d18h
  5. logdevice-0 1/1 Running 0 6d18h
  6. logdevice-1 1/1 Running 0 6d18h
  7. logdevice-2 1/1 Running 0 6d18h
  8. logdevice-3 1/1 Running 0 6d18h
  9. logdevice-admin-server-deployment-5c5fb9f8fb-27jlk 1/1 Running 0 6d18h
  10. zookeeper-0 1/1 Running 0 6d22h
  11. zookeeper-1 1/1 Running 0 10d
  12. zookeeper-2 1/1 Running 0 6d

Bootstrap 集群

一旦所有的 logdevice pods 运行并准备就绪,你将需要 Bootstrap 集群以启用所有的存 储节点。要做到这一点,请运行:

  1. kubectl run hstream-admin -it --rm --restart=Never --image=hstreamdb/hstream:v0.11.0 -- \
  2. hadmin store --host logdevice-admin-server-service \
  3. nodes-config \
  4. bootstrap --metadata-replicate-across 'node:3'

这将启动一个 hstream-admin pod,它连接到管理服务器并调用 nodes-config bootstrap hadmin store 命令,并将集群的元数据复制属性设置为跨三个 不同的节点进行复制。

成功后,你应该看到类似如下:

  1. Successfully bootstrapped the cluster
  2. pod "hstream-admin" deleted

现在,你可以 bootstrap server 节点:

  1. kubectl run hstream-admin -it --rm --restart=Never --image=hstreamdb/hstream:v0.11.0 -- \
  2. hadmin server --host hstream-server-0.hstream-server init

成功后,你应该看到类似如下:

  1. Cluster is ready!
  2. pod "hstream-admin" deleted

注意:取决于硬件条件,存储节点可能没有及时准备就绪,所以运行 hadmin init 可能 会返回失败。这时需要等待几秒,再次运行即可。

管理存储集群

  1. kubectl run hstream-admin -it --rm --restart=Never --image=hstreamdb/hstream:v0.11.0 -- bash

现在你可以运行 hadmin store 来管理这个集群:

  1. hadmin store --help

要检查集群的状态,你可以运行:

  1. hadmin store --host logdevice-admin-server-service status
  1. +----+-------------+-------+---------------+
  2. | ID | NAME | STATE | HEALTH STATUS |
  3. +----+-------------+-------+---------------+
  4. | 0 | logdevice-0 | ALIVE | HEALTHY |
  5. | 1 | logdevice-1 | ALIVE | HEALTHY |
  6. | 2 | logdevice-2 | ALIVE | HEALTHY |
  7. | 3 | logdevice-3 | ALIVE | HEALTHY |
  8. +----+-------------+-------+---------------+
  9. Took 2.567s