pulsar on k8s 部署验证

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
网络型负载均衡 NLB,每月750个小时 15LCU
简介: pulsar on k8s 部署验证
  • 前提条件
  • 步骤 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

  1. 添加 Pulsar Helm 仓库。
helm repo add apache https://pulsar.apache.org/chart
helm repo update
  1. 克隆 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-adminproxy-adminadmin 的 JWT 密钥和令牌。默认情况下,会生成一个非对称的公钥 / 私钥对。也可以指定 -symmetric 来生成对称的密钥。
  • proxy-admin 用于代理与 broker 间通信。
  • broker-admin 用于 broker 间通信。
  • admin 用于管理员工具。


  1. 使用 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
  1. 检查所有 pod 的状态。


kubectl get pods -n pulsar

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

输出

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 来替换掉 webServiceUrlbrokerServiceUrl

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 来创建 租户命名空间主题

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
29天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
115 60
|
30天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
177 62
|
27天前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
68 0
|
1月前
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
1月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(二)
微服务实践k8s&dapr开发部署实验(1)服务调用(二)
48 0
|
14天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
15天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
109 17