Pulsar on K8s部署
前期准备:
- Helm charts。
- Scripts(初始化pulsar用户、创建token、清理token等)
- Kubernetes集群 admin权限(pulsar function需要admin权限)
- 需要用csi的方式进行磁盘挂载,按照不同的磁盘类型,需要申请两个sc,增强型SSD(bigdata-sc-essd),高性能云磁盘(bigdata-sc-hpd)
- 单节点允许的挂盘数,由5调整为10。(TODO)
- 确保执行安装脚本的kubeclt客户端节点或容器有base64的命令行工具,可通过执行
base64 --help
命令进行确认,如果缺少此命令(如使用鲲鹏提供的基于busybox的代理容器),可执行apk add --update coreutils
进行安装。 - 至少有5个可用node(16c64g),包含taints和label(node.lixiang.com/group: pulsar)
taints: - effect: NoSchedule key: node.lixiang.com/group value: pulsa
部署步骤:
- 初始化pulsar。
- -n 指定k8s namespace名称。
- -k 指定helm release名称。
- -c 是否由脚本创建namespace,如果ns已经存在,无需此参数。
./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信息。
- 安装helm
helm upgrade --install pulsar-bigdata ./pulsar -n pulsar -f ./values-cell.yaml
可能遇到的问题:
proxy.nodePorts.http
proxy.nodePorts.pulsar
目前是通过nodePort方式进行配置的,如果和其他服务共用的Node,可能会出现端口冲突的问题。
如果冲突,调整这两个端口为其他端口即可。
- 确认proxy的lb模式为cluster,否则由local变为cluster。
- 检查安装是否成功
- 保证所有非Job类的pod都ready且处于running状态。
kubectl get pod
- b.找到其中的LoadBalancer 服务,通过telnet外部ip + port的方式,判断端口可联通。
kubectl get svc
c.模拟数据生产、消费。 进入toolset容器
kubectl exec -ti pulsar-bigdata-toolset-0 -n pulsar /bin/bas
创建topic
没报错即可
./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
生产消息
./bin/pulsar-client produce test/test/test -m "test-message" org.apache.pulsar.client.cli.PulsarClientTool - 1 messages successfully produced
消费消息
./bin/pulsar-client consume persistent://test/test/test -s test_2 -m NonDurable -n 1 -p Earliest ----- got message ----- key:[null], properties:[], content:test-message 2022-08-29T15:38:15,029+0800 [main] INFO org.apache.pulsar.client.impl.PulsarClientImpl - Client closing. URL: pulsar://pulsar-bigdata-ontest-proxy:6650/ 2022-08-29T15:38:15,038+0800 [main] INFO org.apache.pulsar.client.impl.ConsumerImpl - [persistent://test/test/test-partition-2] [test_2] Closed consumer 2022-08-29T15:38:15,041+0800 [pulsar-client-io-1-1] INFO org.apache.pulsar.client.impl.ConsumerImpl - [persistent://test/test/test-partition-1] [test_2] Closed consumer 2022-08-29T15:38:15,041+0800 [pulsar-client-io-1-1] INFO org.apache.pulsar.client.impl.ConsumerImpl - [persistent://test/test/test-partition-0] [test_2] Closed consumer 2022-08-29T15:38:15,042+0800 [pulsar-client-internal-4-1] INFO org.apache.pulsar.client.impl.MultiTopicsConsumerImpl - [persistent://test/test/test] [test_2] Closed Topics Consumer 2022-08-29T15:38:15,046+0800 [pulsar-client-io-1-1] INFO org.apache.pulsar.client.impl.ClientCnx - [id: 0x16947710, L:/10.22.32.9:37706 ! R:pulsar-bigdata-ontest-proxy.pulsar.svc.cluster.local/172.16.141.255:6650] Disconnected 2022-08-29T15:38:15,050+0800 [pulsar-client-io-1-1] INFO org.apache.pulsar.client.impl.ClientCnx - [id: 0x69a679bd, L:/10.22.32.9:37722 ! R:pulsar-bigdata-ontest-proxy.pulsar.svc.cluster.local/172.16.141.255:6650] Disconnected 2022-08-29T15:38:15,050+0800 [pulsar-client-io-1-1] INFO org.apache.pulsar.client.impl.ClientCnx - [id: 0x8284dc52, L:/10.22.32.9:37724 ! R:pulsar-bigdata-ontest-proxy.pulsar.svc.cluster.local/172.16.141.255:6650] Disconnected 2022-08-29T15:38:15,050+0800 [pulsar-client-io-1-1] INFO org.apache.pulsar.client.impl.ClientCnx - [id: 0x758c992f, L:/10.22.32.9:37726 ! R:pulsar-bigdata-ontest-proxy.pulsar.svc.cluster.local/172.16.141.255:6650] Disconnected 2022-08-29T15:38:17,064+0800 [main] INFO org.apache.pulsar.client.cli.PulsarClientTool - 1 messages successfully consumed 查看topic状态
查看topic状态
./bin/pulsar-admin topics partitioned-stats test/test/test
删除topic
没报错即可
./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
./scripts/pulsar/cleanup_helm_release.sh -n pulsar -k pulsar-bigdata ./scripts/pulsar/clean_tls.sh -n pulsar -k pulsar-bigdata
执行完成后,检查是否删除干净。
kubectl get statefulset -n pulsar kubectl get secret -n pulsar