pulsar on k8s 部署验证

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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 来创建 租户命名空间主题

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
29天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
34 0
|
1月前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
34 7
|
13天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
59 17
|
26天前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
106 0
|
29天前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
21 1
|
1月前
|
Kubernetes Java Nacos
nacos常见问题之k8s上部署需要自动扩缩容如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
33 0
|
1月前
|
存储 Kubernetes 分布式数据库
利用Helm在K8S上部署 PolarDB-X 集群(详细步骤--亲测!!!)
利用Helm在K8S上部署 PolarDB-X 集群(详细步骤--亲测!!!)
95 0
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
1563 0
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
本文讲的是简化Kubernetes应用部署工具-Helm之Hook【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
2521 0
|
4天前
|
存储 运维 Kubernetes
Kubernetes 集群的监控与维护策略
【4月更文挑战第23天】 在微服务架构日益盛行的当下,容器编排工具如 Kubernetes 成为了运维工作的重要环节。然而,随着集群规模的增长和复杂性的提升,如何确保 Kubernetes 集群的高效稳定运行成为了一大挑战。本文将深入探讨 Kubernetes 集群的监控要点、常见问题及解决方案,并提出一系列切实可行的维护策略,旨在帮助运维人员有效管理和维护 Kubernetes 环境,保障服务的持续可用性和性能优化。