Kind 中部署 Apache Pulsar

1,239 阅读2分钟

背景

Apache Pulsar 提供了在 Minikube 环境下部署 Pulsar 的操作方式 Get started in Kubernetes,但我更习惯使用 Kind 作为 K8s 测试环境,所以尝试在 Kind 环境中进行 Apache Pulsar 部署。

Kind 环境准备

由于 Kind 默认只会暴露 apiserver 的 NodePort 端口,所以在 Kind 启动前需要提前设定好几个端口暴露出来给 Pulsar 的 Proxy, Pulsar Manager 和 Grafana 使用。

  1. 编写 Kind 配置文件
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30111
    hostPort: 30111
  - containerPort: 30112
    hostPort: 30112
  - containerPort: 30113
    hostPort: 30113
  1. 通过以下命令创建 Kind 集群

kind create cluster --name pulsar-on-k8s --config=kind.yaml

  1. 确认 K8s 环境已完成
$ kc get nodes

NAME                          STATUS   ROLES                  AGE   VERSION
pulsar-on-k8s-control-plane   Ready    control-plane,master   50s   v1.21.1

安装 Pulsar Helm chart

  1. 添加 Pulsar Helm 仓库
helm repo add apache https://pulsar.apache.org/charts
helm repo update
  1. 克隆 Pulsar Helm chart 的仓库
git clone https://github.com/apache/pulsar-helm-chart 
cd pulsar-helm-chart
  1. 运行脚本 prepare_helm_release.sh 来创建安装 Apache Pulsar Helm chart 所需的密码信息
./scripts/pulsar/prepare_helm_release.sh -n pulsar-on-k8s -k pulsar-on-k8s -c

Helm 安装 Pulsar

  1. 执行以下命令进行 Pulsar 部署
helm install pulsar apache/pulsar \
    --timeout 10m \
    --set initialize=true \
    --set namespace=pulsar-on-k8s \
    --set volumes.local_storage=false \
    --set affinity.anti_affinity=false
  1. 确认运行情况,由于 charts 中几个 services 默认都为 LoadBalancer,所以会一直处于 pending 状态。
$ kc get pods -n pulsar-on-k8s

NAME                                     READY   STATUS      RESTARTS   AGE
pulsar-bookie-0                          1/1     Running     0          44h
pulsar-bookie-1                          1/1     Running     0          44h
pulsar-bookie-2                          1/1     Running     0          44h
pulsar-bookie-3                          1/1     Running     0          44h
pulsar-bookie-init-jk5dg                 0/1     Completed   0          44h
pulsar-broker-0                          1/1     Running     0          44h
pulsar-broker-1                          1/1     Running     1          44h
pulsar-broker-2                          1/1     Running     1          44h
pulsar-grafana-99b4976f7-g5ftf           1/1     Running     0          44h
pulsar-prometheus-5f5fb9978b-z272t       1/1     Running     0          44h
pulsar-proxy-0                           1/1     Running     0          44h
pulsar-proxy-1                           1/1     Running     0          44h
pulsar-proxy-2                           1/1     Running     0          44h
pulsar-pulsar-init-gmw9m                 0/1     Completed   0          44h
pulsar-pulsar-manager-76c5cfb97f-ljl7p   1/1     Running     0          44h
pulsar-recovery-0                        1/1     Running     0          44h
pulsar-toolset-0                         1/1     Running     0          44h
pulsar-zookeeper-0                       1/1     Running     0          44h
pulsar-zookeeper-1                       1/1     Running     0          37h
pulsar-zookeeper-2                       1/1     Running     0          37h
$ kc get svc -n pulsar-on-k8s
NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                       AGE
pulsar-bookie           ClusterIP      None            <none>        3181/TCP,8000/TCP             44h
pulsar-broker           ClusterIP      None            <none>        8080/TCP,6650/TCP             44h
pulsar-grafana          LoadBalancer   10.96.179.187   <pending>     3000:31615/TCP                44h
pulsar-prometheus       ClusterIP      None            <none>        9090/TCP                      44h
pulsar-proxy            LoadBalancer   10.96.149.23    <pending>     80:30436/TCP,6650:31691/TCP   44h
pulsar-pulsar-manager   LoadBalancer   10.96.190.13    <pending>     9527:30807/TCP                44h
pulsar-recovery         ClusterIP      None            <none>        8000/TCP                      44h
pulsar-toolset          ClusterIP      None            <none>        <none>                        44h
pulsar-zookeeper        ClusterIP      None            <none>        2888/TCP,3888/TCP,2181/TCP    44h
  1. 修改 LoadBalancer service 为 NodePort,并将端口设置为 Kind 暴露的端口
$ kc edit svc pulsar-proxy -n pulsar-on-k8s

spec:
  clusterIP: 10.96.149.23
  clusterIPs:
  - 10.96.149.23
  externalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: http
    nodePort: 30436
    port: 80
    protocol: TCP
    targetPort: 80
  - name: pulsar
    nodePort: 30111
    port: 6650
    protocol: TCP
    targetPort: 6650
  selector:
    app: pulsar
    component: proxy
    release: pulsar
  sessionAffinity: None
  type: NodePort
$ kc edit svc pulsar-grafana -n pulsar-on-k8s

spec:
  clusterIP: 10.96.179.187
  clusterIPs:
  - 10.96.179.187
  externalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: server
    nodePort: 30112
    port: 3000
    protocol: TCP
    targetPort: 3000
  selector:
    app: pulsar
    component: grafana
    release: pulsar
  sessionAffinity: None
  type: NodePort
$ kc edit svc pulsar-pulsar-manager -n pulsar-on-k8s

spec:
  clusterIP: 10.96.190.13
  clusterIPs:
  - 10.96.190.13
  externalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: server
    nodePort: 30113
    port: 9527
    protocol: TCP
    targetPort: 9527
  selector:
    app: pulsar
    component: pulsar-manager
    release: pulsar
  sessionAffinity: None
  type: NodePort
$ kc get svc -n pulsar-on-k8s

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                       AGE
pulsar-bookie           ClusterIP   None            <none>        3181/TCP,8000/TCP             44h
pulsar-broker           ClusterIP   None            <none>        8080/TCP,6650/TCP             44h
pulsar-grafana          NodePort    10.96.179.187   <none>        3000:30112/TCP                44h
pulsar-prometheus       ClusterIP   None            <none>        9090/TCP                      44h
pulsar-proxy            NodePort    10.96.149.23    <none>        80:30436/TCP,6650:30111/TCP   44h
pulsar-pulsar-manager   NodePort    10.96.190.13    <none>        9527:30113/TCP                44h
pulsar-recovery         ClusterIP   None            <none>        8000/TCP                      44h
pulsar-toolset          ClusterIP   None            <none>        <none>                        44h
pulsar-zookeeper        ClusterIP   None            <none>        2888/TCP,3888/TCP,2181/TCP    44h
  1. 现在通过 Kind 暴露出来的端口访问到 Pulsar 集群。