改版通知

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

Pulsar on Kubernetes 部署与验证指南

ckckck2025年1月10日54 浏览

Pulsar 安装与配置指南

前提条件

  • Kubernetes server 1.14.0+
  • kubectl 1.14.0+
  • Helm 3.0+

步骤 0:安装依赖的 charts(可选)

安装本地存储配置器

要使用本地持久化卷作为持久化存储,需要为本地持久化卷安装存储配置器。最简单的方法之一是使用与 Pulsar Helm chart 一起提供的本地存储配置器。

bash 复制代码
helm repo add streamnative https://charts.streamnative.io
helm repo update
helm install pulsar-storage-provisioner streamnative/local-storage-provisioner

安装证书管理器(cert-manager)

Pulsar Helm chart 使用 cert-manager 来自动提供和管理 TLS 证书。需要先安装 cert-manager 才能为 broker 和 proxy 启用 TLS 加密。

关于安装 cert-manager 的细节,参考官方说明

我们还提供了 bash 脚本 install-cert-manager.sh 来安装 cert-manager 到命名空间 cert-manager 中。

bash 复制代码
git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart
./scripts/cert-manager/install-cert-manager.sh

步骤 1:安装 Pulsar Helm chart

  1. 添加 Pulsar Helm 仓库。

    bash 复制代码
    helm repo add apache https://pulsar.apache.org/chart
    helm repo update
  2. 克隆 Pulsar Helm chart 的仓库。

    bash 复制代码
    git clone https://github.com/apache/pulsar-helm-chart
    cd pulsar-helm-chart
  3. 在安装所有依赖的 chart 并收集了所有的配置选项后,运行 prepare_helm_release.sh 来准备 Helm(可选)。

    bash 复制代码
    ./scripts/pulsar/prepare_helm_release.sh -n <k8s-namespace> -k <helm-release-name>

    prepare_helm_release 创建了下列资源:

    • 用于安装 Pulsar 的 Kubernetes 命名空间。
    • 三个超级用户:broker-adminproxy-adminadmin 的 JWT 密钥和令牌。
  4. 使用 Pulsar Helm chart 来将一个 Pulsar 集群安装至 Kubernetes。

    bash 复制代码
    helm install pulsar apache/pulsar 
      --timeout 10m 
      --set initialize=true 
      --set volumes.persistence=false 
      --set affinity.anti_affinity=false 
      --set [your configuration options]

    默认情况下,Pulsar Helm chart 会创建持久卷声明,并期望动态提供者创建底层持久卷。

    yaml 复制代码
    volumes:
      persistence: true
      local_storage: false

    要使用本地持久卷作为 Helm 的持久化存储,你可以安装 local storage provisioner,并在 helm install 命令中添加以下选项。

    bash 复制代码
    --set volumes.local_storage=true

    备注:在安装 Pulsar 的生产实例前,需规划好存储设置以避免额外的存储迁移工作。因为在首次安装后,若想改变存储设置,必须手动编辑 Kubernetes 对象。

    在开发环境(如 Minikube)中使用,可以在 helm install 命令中添加以下选项来禁用持久化。

    bash 复制代码
    --set volumes.persistence=false
  5. 检查所有 pod 的状态。

    bash 复制代码
    kubectl get pods -n pulsar

    如果所有 pod 都成功启动,你会看到 STATUS 变为 RunningCompleted

  6. 检查命名空间 pulsar 下所有服务的状态。

    bash 复制代码
    kubectl get services -n pulsar

步骤 2:使用 pulsar-admin 来创建 Pulsar 租户/命名空间/主题

pulsar-admin 是 Pulsar 的 CLI(命令行客户端)工具。这一步中,你可以使用 pulsar-admin 来创建资源,包括租户、命名空间和主题。

  1. 进入 toolset 容器。

    bash 复制代码
    kubectl exec -it -n pulsar pulsar-toolset-0 -- /bin/bash
  2. toolset 容器里,创建一个名为 apache 的租户。

    bash 复制代码
    bin/pulsar-admin tenants create apache

    然后你可以列出所有租户,来查看租户是否创建成功。

    bash 复制代码
    bin/pulsar-admin tenants list
  3. toolset 容器里,在租户 apache 下创建一个名为 pulsar 的命名空间。

    bash 复制代码
    bin/pulsar-admin namespaces create apache/pulsar

    然后你可以列出租户 apache 的所有命名空间,来查看命名空间是否创建成功。

    bash 复制代码
    bin/pulsar-admin namespaces list apache
  4. toolset 容器里,在命名空间 apache/pulsar 下创建一个包含 4 个分区的主题 test-topic

    bash 复制代码
    bin/pulsar-admin topics create-partitioned-topic apache/pulsar/test-topic -p 4
  5. toolset 容器里,列出命名空间 apache/pulsar 中的所有分区主题。

    bash 复制代码
    bin/pulsar-admin topics list-partitioned-topics apache/pulsar

步骤 3:使用 Pulsar 客户端生产和消费消息

你可以使用 Pulsar 客户端来创建生产者与消费者并用于生产和消费消息。

默认情况下,Pulsar Helm chart 会通过 Kubernetes LoadBalancer 将 Pulsar 集群暴露出来。在 Minikube 中,你可以使用如下命令来检查代理服务。

bash 复制代码
kubectl get services -n pulsar | grep pulsar-proxy

你将看到类似如下的输出:

复制代码
pulsar-proxy            LoadBalancer   172.16.90.224   120.48.26.171,172.21.206.50   80:31089/TCP,6650:31166/TCP           68m

这个输出显示了 Pulsar 集群的二进制端口和 HTTP 端口都映射到了哪个 node 端口上。80: 后面的端口是 HTTP 端口,而 6650: 后面的端口是二进制端口。

此时,你可以获得连接到你的 Pulsar 客户端的服务 URL。下面是一些 URL 示例:

复制代码
webServiceUrl=http://172.21.195.xx:xxxx
brokerServiceUrl=pulsar://172.21.195.xx:xxxx

然后你可以继续如下步骤:

  1. 下载页面下载 Apache Pulsar。

  2. 基于你的下载文件解压。

    bash 复制代码
    tar -xf <file-name>.tar.gz
  3. 暴露 PULSAR_HOME

    bash 复制代码
    export PULSAR_HOME=$(pwd)
  4. 配置 Pulsar 客户端。
    ${PULSAR_HOME}/conf/client.conf 文件中,用你从上面步骤中获得的服务 URL 来替换掉 webServiceUrlbrokerServiceUrl

  5. 创建订阅以消耗来自 apache/pulsar/test-topic 的消息。

    bash 复制代码
    bin/pulsar-client consume -s sub apache/pulsar/test-topic -n 0
  6. 打开一个新的终端。在新终端中,创建一个生产者并向 test-topic 主题发送 10 条消息。

    bash 复制代码
    bin/pulsar-client produce apache/pulsar/test-topic -m "---------hello apache pulsar-------" -n 10
  7. 验证结果。
    对于生产者而言,输出如下:

    复制代码
    18:15:15.489 [main] INFO org.apache.pulsar.client.cli.PulsarClientTool - 10 messages successfully produced

    对于消费者而言,输出如下:

    复制代码
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------
    ----- got message -----
    ---------hello apache pulsar-------

步骤 4:使用 Pulsar Manager 来管理集群

Pulsar Manager 是一个基于网络 GUI 的管理工具,用于管理和监测 Pulsar。

  1. 默认情况下,Pulsar Manager 作为一个独立的 LoadBalancer 暴露给外界。你可以在 values.yaml 中设置 pulsar_manager: true

    yaml 复制代码
    components:
      zookeeper: true
      bookkeeper: true
      autorecovery: true
      broker: true
      functions: true
      proxy: true
      toolset: true
      pulsar_manager: true
  2. 设置管理员账号以及密码。

    bash 复制代码
    CSRF_TOKEN=$(curl http://192.31.198.xx:port/pulsar-manager/csrf-token)
    curl 
      -H 'X-XSRF-TOKEN: $CSRF_TOKEN' 
      -H 'Cookie: XSRF-TOKEN=$CSRF_TOKEN;' 
      -H "Content-Type: application/json" 
      -X PUT http://172.21.195.xx:port/pulsar-manager/users/superuser 
      -d '{"name": "admin", "password": "apachepulsar", "description": "admin", "email": "gongziran@tencent.com"}'

    Curl 命令中的请求参数:

    json 复制代码
    {
      "name": "admin",
      "password": "apachepulsar",
      "description": "test",
      "email": "username@test.org"
    }
  3. Pulsar Manager UI 将会在你的浏览器中打开。你可以使用用户名 pulsar 和密码 apachepulsar 来登录进 Pulsar Manager。

  4. 在 Pulsar Manager UI 中,你可以创建一个环境。

    • 点击左上角的 New Environment 按钮。
    • 在弹窗中的 Environment Name 一栏里输入 pulsar
    • 在弹窗中的 Service URL 一栏里输入 http://pulsar-broker:8080
    • 点击弹窗中的 Confirm 按钮。
  5. 成功创建环境后,你将被重定向到新环境的 租户 页面。然后你可以使用 Pulsar Manager 来创建 租户命名空间主题

end