改版通知

巨人肩膀网站已全新改版。若您仍依赖旧站功能或数据,欢迎联系我们,我们会协助处理。联系我们

Pulsar on Kubernetes 高效部署指南

ckckck2025年1月10日63 浏览

Pulsar on K8s 部署

前期准备

  1. Helm charts
  2. Scripts(初始化 Pulsar 用户、创建 token、清理 token 等)
  3. Kubernetes 集群 admin 权限(Pulsar function 需要 admin 权限)
  4. CSI 磁盘挂载:按照不同的磁盘类型,需要申请两个 StorageClass:
    • 增强型 SSD (bigdata-sc-essd)
    • 高性能云磁盘 (bigdata-sc-hpd)
  5. 单节点挂盘数调整:由 5 调整为 10。(TODO)
  6. base64 命令行工具:确保执行安装脚本的 kubectl 客户端节点或容器有 base64 命令行工具。可通过执行 base64 --help 命令进行确认。如果缺少此命令(如使用鲲鹏提供的基于 busybox 的代理容器),可执行 apk add --update coreutils 进行安装。
  7. 节点要求:至少有 5 个可用节点(16c64g),包含 taints 和 label (node.lixiang.com/group: pulsar):
    yaml 复制代码
    taints:
      - 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,至少包含 adminbroker-adminproxy-adminasymmetric-key 四个 secrets 信息。

2. 安装 Helm

bash 复制代码
helm upgrade --install pulsar-bigdata ./pulsar -n pulsar -f ./values-cell.yaml

可能遇到的问题

  • proxy.nodePorts.http
  • proxy.nodePorts.pulsar

目前是通过 nodePort 方式进行配置的,如果和其他服务共用的 Node,可能会出现端口冲突的问题。如果冲突,调整这两个端口为其他端口即可。

3. 确认 Proxy 的 LB 模式为 Cluster

确保 Proxy 的 LB 模式为 cluster,否则由 local 变为 cluster

4. 检查安装是否成功

  1. 保证所有非 Job 类的 Pod 都 ready 且处于 running 状态

    bash 复制代码
    kubectl get pod
  2. 找到其中的 LoadBalancer 服务,通过 telnet 外部 IP + port 的方式,判断端口可联通

    bash 复制代码
    kubectl get svc
  3. 模拟数据生产、消费

    • 进入 toolset 容器:

      bash 复制代码
      kubectl 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