- 前提条件
- 步骤 0:Install dependent charts(可选)
- 步骤 1:安装 Pulsar Helm chart
- 步骤 2:使用 pulsar-admin 来创建 Pulsar 租户/命名空间/主题
- 步骤 3:使用 Pulsar 客户端生产和消费消息
- 步骤 4:使用 Pulsar Manager 来管理集群
前提条件
- Kubernetes server 1.14.0+
- kubectl 1.14.0+
- Helm 3.0+
步骤 0:Install dependent charts(可选)
安装本地存储配置器
要使用本地持久化卷作为持久化存储,需要为 本地持久化卷 安装存储配置器。
最简单的方法之一是使用与 Pulsar Helm chart 一起提供的本地存储配置器。
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
中。
git clone https://github.com/apache/pulsar-helm-chart cd pulsar-helm-chart ./scripts/cert-manager/install-cert-manager.sh
步骤 1:安装 Pulsar Helm chart
- 添加 Pulsar Helm 仓库。
helm repo add apache https://pulsar.apache.org/chart helm repo update
- 克隆 Pulsar Helm chart 的仓库
git clone https://github.com/apache/pulsar-helm-chart cd pulsar-helm-chart
3. 在安装所有依赖的 chart 并收集了所有的配置选项后,便可以运行 prepare_helm_release.sh来准备 Helm。(可选)
./scripts/pulsar/prepare_helm_release.sh -n <k8s-namespace> -k <helm-release-name>
prepare_helm_release
创建了下列资源:
- 用于安装 Pulsar 的 Kubernetes 命名空间。
- 三个超级用户:
broker-admin
、proxy-admin
、admin
的 JWT 密钥和令牌。默认情况下,会生成一个非对称的公钥 / 私钥对。也可以指定-symmetric
来生成对称的密钥。
proxy-admin
用于代理与 broker 间通信。broker-admin
用于 broker 间通信。admin
用于管理员工具。
- 使用 Pulsar Helm chart 来将一个 Pulsar 集群安装至 Kubernetes。
注意:--set initialize=true when installing Pulsar the first time. 以下命令将会安装并启动Apache Pulsar。
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 会创建持久卷声明,并期望动态提供者创建底层持久卷。
volumes: persistence: true # 设置使用本地持久卷# 启用本地持久卷之前应当要安装 local provisionerlocal_storage: false
要使用本地持久卷作为 Helm 的持久化存储,你可以安装 local storage provisioner ,并在 helm install
命令中添加以下选项。
--set volumes.local_storage=true
备注 在安装 Pulsar 的生产实例前,需规划好存储设置以避免额外的存储迁移工作。因为在首次安装后,若想改变存储设置,必须手动编辑 Kubernetes 对象。
Pulsar Helm chart 是为生产用途设计的。要在开发环境(如 Minikube)中使用,可以在 helm install
命令中添加以下选项来禁用持久化。
--set volumes.persistence=false
- 检查所有 pod 的状态。
kubectl get pods -n pulsar
如果所有 pod 都成功启动,你会看到 STATUS
变为 Running
或 Completed
。
输出
NAME READY STATUS RESTARTS AGE pulsar-bookie-0 1/1 Running 0 67m pulsar-bookie-1 1/1 Running 0 67m pulsar-bookie-2 1/1 Running 0 67m pulsar-bookie-3 1/1 Running 0 67m pulsar-bookie-init-zfvpg 0/1 Completed 0 67m pulsar-broker-0 1/1 Running 0 67m pulsar-broker-1 1/1 Running 1 67m pulsar-broker-2 1/1 Running 1 67m pulsar-grafana-d79df67dc-nbskq 1/1 Running 0 67m pulsar-prometheus-59f5cbf6bb-8qghz 1/1 Running 0 67m pulsar-proxy-0 1/1 Running 0 67m pulsar-proxy-1 1/1 Running 0 67m pulsar-proxy-2 1/1 Running 0 67m pulsar-pulsar-init-drxcm 0/1 Completed 0 67m pulsar-pulsar-manager-84585476c8-7dd8w 1/1 Running 0 67m pulsar-recovery-0 1/1 Running 0 67m pulsar-toolset-0 1/1 Running 0 67m pulsar-zookeeper-0 1/1 Running 0 67m pulsar-zookeeper-1 1/1 Running 0 67m pulsar-zookeeper-2 1/1 Running 0 67m
6. 检查命名空间 pulsar
下所有服务的状态。
kubectl get services -n pulsar
输出
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pulsar-bookie ClusterIP None <none> 3181/TCP,8000/TCP 68m pulsar-broker ClusterIP None <none> 8080/TCP,6650/TCP 68m pulsar-grafana LoadBalancer 172.16.134.8 120.48.26.12,172.21.206.47 3000:31851/TCP 68m pulsar-prometheus ClusterIP None <none> 9090/TCP 68m pulsar-proxy LoadBalancer 172.16.90.224 120.48.26.171,172.21.206.50 80:31089/TCP,6650:31166/TCP 68m pulsar-pulsar-manager LoadBalancer 172.16.233.84 120.48.26.224,172.21.206.51 9527:30866/TCP 68m pulsar-recovery ClusterIP None <none> 8000/TCP 68m pulsar-toolset ClusterIP None <none> <none> 68m pulsar-zookeeper ClusterIP None <none> 8000/TCP,2888/TCP,3888/TCP,2181/TCP 68m
步骤 2:使用 pulsar-admin 来创建 Pulsar 租户/命名空间/主题
pulsar-admin
是 Pulsar 的 CLI(命令行客户端) 工具。这一步中,你可以使用 pulsar-admin
来创建资源,包括租户、命名空间和主题。
1.进入 toolset
容器。
kubectl exec -it -n pulsar pulsar-toolset-0 -- /bin/bash
2.在 toolset
容器里,创建一个名为 apache
的租户。
bin/pulsar-admin tenants create apache
然后你可以列出所有租户,来查看租户是否创建成功。
bin/pulsar-admin tenants list
你应该能看到类似如下的输出:租户 apache
已经被成功地创建了。
"apache" "public" "pulsar"
3. 在 toolset
容器里,在租户 apache
下创建一个名为 pulsar
的命名空间。
bin/pulsar-admin namespaces create apache/pulsar
然后你可以列出租户 apache
的所有命名空间,来查看命名空间是否创建成功。
bin/pulsar-admin namespaces list apache
你应该能看到类似如下的输出:命名空间 apache/pulsar
已经被成功地创建了。
"apache/pulsar"
4. 在 toolset
容器里,在命名空间 apache/pulsar
下创建一个包含 4
个分区的主题 test-topic
。
bin/pulsar-admin topics create-partitioned-topic apache/pulsar/test-topic -p 4
5. 在 toolset
容器里,列出命名空间 apache/pulsar
中的所有分区主题。
bin/pulsar-admin topics list-partitioned-topics apache/pulsar
然后你可以看见命名空间 apache/pulsar
下的所有分区主题。
"persistent://apache/pulsar/test-topic"
步骤 3:使用 Pulsar 客户端生产和消费消息
你可以使用 Pulsar 客户端来创建生产者与消费者并用于生产和消费消息。
默认情况下,Pulsar Helm chart 会通过 Kubernetes LoadBalancer
将 Pulsar 集群暴露出来。在 Minikube 中,你可以使用如下命令来检查代理服务。
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.基于你的下载文件解压。
tar -xf <file-name>.tar.gz
3. 暴露 PULSAR_HOME
。
(1) 输入已解压的下载文件的目录。
(2) 将 PULSAR_HOME
暴露为环境变量。
export PULSAR_HOME=$(pwd)
4. 配置 Pulsar 客户端。
在 ${PULSAR_HOME}/conf/client.conf
文件中,用你从上面步骤中获得的服务 URL 来替换掉 webServiceUrl
与 brokerServiceUrl
。
5. 创建订阅以消耗来自 apache/pulsar/test-tope
的消息。
bin/pulsar-client consume -s sub apache/pulsar/test-topic -n 0
6. 打开一个新的终端。在新终端中,创建一个生产者并向 test-topic
主题发送10条消息。
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
暴露给外界。你可以value.yaml中设置 pulsar_manager: true
:
## 组件 ## ## 控制集群要部署哪些 Apache Pulsar 组件 components: # zookeeper zookeeper: true # bookkeeper bookkeeper: true # bookkeeper - autorecovery autorecovery: true # broker broker: true # functions functions: true # proxy proxy: true # toolset toolset: true # pulsar manager pulsar_manager: true
2.设置管理员账号以及密码
注意修改其中的url链接地址和设置的管理员账户名、密码和邮箱
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命令中的请求参数
{"name": "admin", "password": "apachepulsar", "description": "test", "email": "username@test.org"}
name
是Pulsar Manger的登录用户名,当前是admin
。password
是Pulsar Manager当前用户的密码,当前是apachepulsar
。密码应该大于等于6位。
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 来创建 租户
、命名空间
和 主题
。