背景
Apache Pulsar 提供了在 Minikube 环境下部署 Pulsar 的操作方式 Get started in Kubernetes,但我更习惯使用 Kind 作为 K8s 测试环境,所以尝试在 Kind 环境中进行 Apache Pulsar 部署。
Kind 环境准备
由于 Kind 默认只会暴露 apiserver 的 NodePort 端口,所以在 Kind 启动前需要提前设定好几个端口暴露出来给 Pulsar 的 Proxy, Pulsar Manager 和 Grafana 使用。
- 编写 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
- 通过以下命令创建 Kind 集群
kind create cluster --name pulsar-on-k8s --config=kind.yaml
- 确认 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
- 添加 Pulsar Helm 仓库
helm repo add apache https://pulsar.apache.org/charts
helm repo update
- 克隆 Pulsar Helm chart 的仓库
git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart
- 运行脚本
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
- 执行以下命令进行 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
- 确认运行情况,由于 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
- 修改
LoadBalancerservice 为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
- 现在通过 Kind 暴露出来的端口访问到 Pulsar 集群。