前一段时间了解了Pulsar这个开源项目,感觉是一个替换kafka的好东西!它具体的特性各位自行搜索吧!
为了自己项目尝试使用Pulsar,我决定进行部署实验。但是,目前网上看到的都是在公网上公有云部署Pulsar的说明,没有人在私有Kubernetes集群离线部署Pulsar。
一般的大型企业公司都有自己的私有云,禁止连接外网使用,为此我重新查看了官方文档,终于搞定了在私有云部署Pulsar集群。
本文章将指导使用 Helm 将 Apache Pulsar 快速地安装及运行在私有部署的 Kubernetes 上,内容包括以下几个部分:
安装 Pulsar Helm chart
helm repo add apache https://pulsar.apache.org/charts
helm repo update
git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart
在运行 helm install之前, 你需要决定如何运行 Pulsar。 可以使用 Helm 的 --set option.name=value 命令行参数配置选项。
volumes:
persistence: true
# 设置使用本地持久卷
# 启用本地持久卷之前应当要安装 local provisioner
local_storage: false
要使用本地持久卷作为 Helm 的持久化存储,你可以安装 local storage provisioner ,并在 helm install 命令中添加以下选项。
--set volumes.local_storage=true
Note
在安装 Pulsar 的生产实例前,需规划好存储设置以避免额外的存储迁移工作。 因为在首次安装后,若想改变存储设置,必须手动编辑 Kubernetes 对象。
Pulsar Helm chart 是为生产用途设计的。 要在开发环境(如 Minikube)中使用,可以在 helm install 命令中添加以下选项来禁用持久化。
--set volumes.persistence=false
affinity:
anti_affinity: true
要在开发环境(如 Minikube)中使用 Pulsar Helm chart,可以在 helm install 命令中添加以下选项来禁用 antiaffinity。
--set affinity.anti_affinity=false
## 组件
##
## 控制集群要部署哪些 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
## 监控组件
##
## 控制集群要部署哪些监控组件
monitoring:
# monitoring - prometheus
prometheus: true
# monitoring - grafana
grafana: true
离线安装注意⚠️:将charts/values.yaml文件内的组件repository替换为本的镜像仓库地址。下载对应组件到镜像和版本上传到本地镜像仓库。
## 镜像
##
## 控制每个组件要使用什么镜像
images:
zookeeper:
repository: apachepulsar/pulsar-all
tag: 2.5.0
pullPolicy: IfNotPresent
bookie:
repository: apachepulsar/pulsar-all
tag: 2.5.0
pullPolicy: IfNotPresent
autorecovery:
repository: apachepulsar/pulsar-all
tag: 2.5.0
pullPolicy: IfNotPresent
broker:
repository: apachepulsar/pulsar-all
tag: 2.5.0
pullPolicy: IfNotPresent
proxy:
repository: apachepulsar/pulsar-all
tag: 2.5.0
pullPolicy: IfNotPresent
functions:
repository: apachepulsar/pulsar-all
tag: 2.5.0
prometheus:
repository: prom/prometheus
tag: v1.6.3
pullPolicy: IfNotPresent
grafana:
repository: streamnative/apache-pulsar-grafana-dashboard-k8s
tag: 0.0.4
pullPolicy: IfNotPresent
pulsar_manager:
repository: apachepulsar/pulsar-manager
tag: v0.1.0
pullPolicy: IfNotPresent
hasCommand: false
certs:
internal_issuer:
enabled: false
component: internal-cert-issuer
type: selfsigning
也可以配置下列字段来自定义生成的 TLS 证书。
tls:
# common settings for generating certs
common:
# 90d
duration: 2160h
# 15d
renewBefore: 360h
organization:
- pulsar
keySize: 4096
keyAlgorithm: rsa
keyEncoding: pkcs8
tls:
enabled: false
也可以配置是否为各个组件启用 TLS 加密。
tls:
# proxy 的证书生成设置
proxy:
enabled: false
cert_name: tls-proxy
# broker 的证书生成设置
broker:
enabled: false
cert_name: tls-broker
# bookie 的证书生成设置
bookie:
enabled: false
cert_name: tls-bookie
# zookeeper 的证书生成设置
zookeeper:
enabled: false
cert_name: tls-zookeeper
# 自动恢复功能的证书生成设置
autorecovery:
cert_name: tls-recovery
# toolset 的证书生成设置
toolset:
cert_name: tls-toolset
# 启用或禁用 broker 认证和授权。
auth:
authentication:
enabled: false
provider: "jwt"
jwt:
# 启用 JWT 认证
# 如果令牌是由密钥生成的,将 usingSecretKey 设置为 true。
# 如果令牌是由私钥生成的,将 usingSecretKey 设置为 false。
usingSecretKey: false
superUsers:
# broker 间通信
broker: "broker-admin"
# proxy 与 broker 通信
proxy: "proxy-admin"
# pulsar-admin 客户端与 broker/proxy 通信
client: "admin"
要启用认证,可以运行 准备 helm 来为字段 auth.superUsers中指定的 3 个超级用户生成秘钥和令牌。 生成的秘钥和超级用户令牌会上传并存储为 Kubernetes 秘钥,并以 -token- 为前缀。 可以通过下面这条命令找到这些秘钥。
kubectl get secrets -n
auth:
authorization:
enabled: false
可以在 helm install 命令中添加以下选项来启用授权。
--set auth.authorization.enabled=true
3.10 CPU 和 RAM 资源要求
默认情况下,Pulsar Helm chart 组件的资源请求和副本数量足以满足小型的生产部署。 如果部署了非生产实例,可以减小默认值来适配更小规模的集群。
收集了所有配置选项后,便可以在安装 Pulsar Helm chart 之前安装依赖的 chart。
4 Kubernetes集群资源准备(根据自己集群的情况选择部署)
安装本地存储配置器
要使用本地持久化卷作为持久化存储,需要为 本地持久化卷 安装存储配置器。
最简单的方法之一是使用与 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
在安装所有依赖的 chart 并收集了所有的配置选项后,便可以运行 prepare_helm_release.sh 来准备 Helm。
cd pulsar-helm-chart
./scripts/pulsar/prepare_helm_release.sh -n -k -c
prepare_helm_release 创建了下列资源:
1\ 用于安装 Pulsar 的 Kubernetes 命名空间。
2\ 三个超级用户: broker-admin、proxy-admin、 admin 的 JWT 密钥和令牌。 默认情况下,会生成一个非对称的公钥 / 私钥对。 也可以指定 --symmetric 来生成对称的密钥。
proxy-admin role is used for proxies to communicate to brokers.
broker-admin role is used for inter-broker communications.
admin role is used by the admin tools.
3\ 创建安装 Apache Pulsar Helm chart 所需的密码信息。 用户名 pulsar 与密码 pulsar 可用于登录 Grafana dashboard 与 Pulsar Manager。
**
⚠️**:由于是离线安装,prepare_helm_release.sh内使用的工具包可能无法从GitHub在线下载,建议先下载相应版本的工具包,并将工具包解压后拷贝到目录${HOME}/.pulsarctl/然后再运行以上部署命令。
工具包下载地址https://github.com/streamnative/pulsarctl/releases
完成下列三个步骤后,便可安装 Helm。
收集所有的配置选项。
安装依赖的 chart。
准备 Helm。
注意⚠️:第一次部署需要添加 --set initialize=true 选项来初始化 bookie 和 Pulsar 集群元数据。
**
**⚠️:由于是离线安装,无法联网下载helm charts,所以helm部署时,选择前面第2步中本地下载克隆的 Pulsar
Helm chart 的仓库里的charts。
在本例中,我们将 Helm 命名为 pulsar-mini
helm install \
--set initialize=true \
--namespace pulsar \
pulsar-mini ./charts/pulsar
部署完毕可以检查一下Job pulsar-init是否已经成功运行,只有成功运行才能初始化bookie集群元数据。
7 访问Pulsar集群
默认值将为下列资源创建 ClusterIP,可以用来和集群交互。
Proxy: You can use the IP address to produce and consume messages to the installed Pulsar cluster.
Pulsar Manager:可以通过链接 http://:9527 访问 Pulsar Manager UI。
Grafana Dashboard: You can access the Grafana dashboard at http://:3000.
运行下面的命令查询这些组件的 IP 地址:
kubectl get service -n
helm delete pulsar-mini