# 在Kubernetes上运行

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

# 建立你的Kubernetes集群

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

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

# 安装 Zookeeper

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

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

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

helm install zookeeper bitnami/zookeeper \
  --set image.tag=3.6.3 \
  --set replicaCount=3 \
  --set persistence.storageClass=hstream-store \
  --set persistence.size=20Gi
1
2
3
4
5
6
7
8
NAME: zookeeper
LAST DEPLOYED: Tue Jul  6 10:51:37 2021
NAMESPACE: test
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **

ZooKeeper can be accessed via port 2181 on the following DNS name from within your cluster:

    zookeeper.svc.cluster.local

To connect to your ZooKeeper server run the following commands:

    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}")
    kubectl exec -it $POD_NAME -- zkCli.sh

To connect to your ZooKeeper server from outside the cluster execute the following commands:

    kubectl port-forward svc/zookeeper 2181:2181 &
    zkCli.sh 127.0.0.1:2181
WARNING: Rolling tag detected (bitnami/zookeeper:3.6.3), please note that it is strongly recommended to avoid using rolling tags in a production environment.
+info https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

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

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

# 配置和启动HStreamDB

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

# 拿到 k8s spec

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

# 更新配置

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

它应该看起来像这样:

$ cat config.json | grep -A 2 zookeeper
  "zookeeper": {
    "zookeeper_uri": "ip://zookeeper-0.zookeeper-headless:2181,zookeeper-1.zookeeper-headless:2181,zookeeper-2.zookeeper-headless:2181",
    "timeout": "30s"
  }

$ cat hstream-server.yaml | grep -A 1 zkuri
            - "--zkuri"
            - "zookeeper-0.zookeeper-headless:2181,zookeeper-1.zookeeper-headless:2181,zookeeper-2.zookeeper-headless:2181"
1
2
3
4
5
6
7
8
9

提示

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

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

# 启动集群

kubectl apply -k .
1

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

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

# Bootstrap 存储集群

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

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

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

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

Successfully bootstrapped the cluster
pod "hadmin" deleted
1
2

# 管理存储集群

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

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

hadmin --help
1

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

hadmin --host logdevice-admin-server-service status
1

+----+-------------+-------+---------------+ | ID | NAME | STATE | HEALTH STATUS | +----+-------------+-------+---------------+ | 0 | logdevice-0 | ALIVE | HEALTHY | | 1 | logdevice-1 | ALIVE | HEALTHY | | 2 | logdevice-2 | ALIVE | HEALTHY | | 3 | logdevice-3 | ALIVE | HEALTHY | +----+-------------+-------+---------------+ Took 2.567s