在 Kubernetes 上运行
本文档描述了如何使用我们提供的 specs 来运行 HStreamDB kubernetes。该文档假设读者 有基本的 kubernetes 知识。在本节结束时,你将拥有一个完全运行在 kubernetes 上的 HStreamDB 集群,它已经准备就绪,可以接收读/写,处理数据,等等。
建立你的 Kubernetes 集群
第一步是要有一个正在运行的 kubernetes 集群。你可以使用一个托管的集群(由你的云提 供商提供),一个自我托管的集群或一个本地的 kubernetes 集群,比如 minikube。请确 保 kubectl 指向你计划使用的任何集群。
另外,你需要一个名为 “hstream-store “的存储类,你可以通过 “kubectl “创建。或者通 过你的云服务提供商的网页来创建,如果它有的话。
提示
对于使用 minikube 的用户, 你可以用默认的存储类 standard.
安装 Zookeeper
HStreamDB 依赖于 Zookeeper 来存储查询信息和一些内部的存储配置,所以我们需要提供 一个 Zookeeper 集群,以便 HStreamDB 能够访问。
在这个演示中,我们将使用helm
(opens new window)(一个用于 kubernetes 的软件包管 理器)来安装 zookeeper。安装完 helm 后,运行:
1. helm repo add bitnami https://charts.bitnami.com/bitnami
2. helm repo update
4. helm install zookeeper bitnami/zookeeper \
5. --set image.tag=3.6 \
6. --set replicaCount=3 \
7. --set persistence.storageClass=hstream-store \
8. --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 **
10. ZooKeeper can be accessed via port 2181 on the following DNS name from within your cluster:
12. zookeeper.svc.cluster.local
14. To connect to your ZooKeeper server run the following commands:
16. 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}")
17. kubectl exec -it $POD_NAME -- zkCli.sh
19. To connect to your ZooKeeper server from outside the cluster execute the following commands:
21. kubectl port-forward svc/zookeeper 2181:2181 &
22. zkCli.sh 127.0.0.1:2181
23. WARNING: Rolling tag detected (bitnami/zookeeper:3.6), please note that it is strongly recommended to avoid using rolling tags in a production environment.
24. +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. }
7. $ cat hstream-server.yaml | grep -A 1 metastore-uri
8. - "--metastore-uri"
9. - "zk://zookeeper-0.zookeeper-headless:2181,zookeeper-1.zookeeper-headless:2181,zookeeper-2.zookeeper-headless:2181"
提示
Storage 配置文件和服务文件中的 zookeeper 连接字符串可以是不同的。但对于正常情况 下,它们是一样的。
在默认情况下。本规范安装了一个 3 个节点的 HStream 服务器集群和 4 个节点的存储集 群。如果你想要一个更大的集群,修改 hstream-server.yaml 和 logdevice-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
