Pulsar on Kubernetes 高效部署指南
Pulsar on K8s 部署

前期准备
- Helm charts
- Scripts(初始化 Pulsar 用户、创建 token、清理 token 等)
- Kubernetes 集群 admin 权限(Pulsar function 需要 admin 权限)
- CSI 磁盘挂载:按照不同的磁盘类型,需要申请两个 StorageClass:
- 增强型 SSD (
bigdata-sc-essd) - 高性能云磁盘 (
bigdata-sc-hpd)
- 增强型 SSD (
- 单节点挂盘数调整:由 5 调整为 10。(TODO)
- base64 命令行工具:确保执行安装脚本的
kubectl客户端节点或容器有base64命令行工具。可通过执行base64 --help命令进行确认。如果缺少此命令(如使用鲲鹏提供的基于 busybox 的代理容器),可执行apk add --update coreutils进行安装。 - 节点要求:至少有 5 个可用节点(16c64g),包含 taints 和 label (
node.lixiang.com/group: pulsar):yamltaints: - effect: NoSchedule key: node.lixiang.com/group value: pulsar
部署步骤
1. 初始化 Pulsar
-n指定 Kubernetes namespace 名称。-k指定 Helm release 名称。-c是否由脚本创建 namespace,如果 ns 已经存在,无需此参数。
bash
./scripts/pulsar/prepare_helm_release.sh -n pulsar -k pulsar-bigdata
脚本内主要的逻辑是创建 Pulsar 需要的管理员用户权限(Kubernetes secrets)。执行完脚本后,可以通过 kubectl get secret -n pulsar 查看是否成功创建 secrets,至少包含 admin、broker-admin、proxy-admin、asymmetric-key 四个 secrets 信息。
2. 安装 Helm
bash
helm upgrade --install pulsar-bigdata ./pulsar -n pulsar -f ./values-cell.yaml
可能遇到的问题:
proxy.nodePorts.httpproxy.nodePorts.pulsar
目前是通过 nodePort 方式进行配置的,如果和其他服务共用的 Node,可能会出现端口冲突的问题。如果冲突,调整这两个端口为其他端口即可。

3. 确认 Proxy 的 LB 模式为 Cluster
确保 Proxy 的 LB 模式为 cluster,否则由 local 变为 cluster。

4. 检查安装是否成功
-
保证所有非 Job 类的 Pod 都 ready 且处于 running 状态:
bashkubectl get pod
-
找到其中的 LoadBalancer 服务,通过 telnet 外部 IP + port 的方式,判断端口可联通:
bashkubectl get svc
-
模拟数据生产、消费:
-
进入
toolset容器:bashkubectl exec -ti pulsar-bigdata-toolset-0 -n pulsar /bin/bash -
创建 Topic(没报错即可):
bash./bin/pulsar-admin tenants create test ./bin/pulsar-admin namespaces create test/test ./bin/pulsar-admin topics create-partitioned-topic test/test/test -p 3 -
生产消息:
bash./bin/pulsar-client produce test/test/test -m "test-message" -
消费消息:
bash./bin/pulsar-client consume persistent://test/test/test -s test_2 -m NonDurable -n 1 -p Earliest -
查看 Topic 状态:
bash./bin/pulsar-admin topics partitioned-stats test/test/test
-
删除 Topic(没报错即可):
bash./bin/pulsar-admin topics delete-partitioned-topic test/test/test ./bin/pulsar-admin namespaces delete test/test ./bin/pulsar-admin tenants delete test
-
移除集群
执行脚本,清理 Helm release:
bash
./scripts/pulsar/cleanup_helm_release.sh -n pulsar -k pulsar-bigdata
./scripts/pulsar/clean_tls.sh -n pulsar -k pulsar-bigdata
执行完成后,检查是否删除干净:
bash
kubectl get statefulset -n pulsar
kubectl get secret -n pulsar

end
