Deploy Pulsar cluster using Helm
在运行 helm install
之前, 你需要决定如何运行 Pulsar。 可以使用 Helm 的 --set option.name=value
命令行参数配置选项。
选择配置选项
在每个部分,收集与 helm install
命令合并使用的选项。
Kubernetes 命名空间
默认情况下,Pulsar Helm chart 安装到 pulsar
命名空间。
namespace: pulsar
要将其安装到 Kubernetes 的其它命名空间,可以在 helm install
命令中添加一下选项。
--set namespace=<different-k8s-namespace>
默认情况下,Pulsar Helm chart 不会创建命名空间。
namespaceCreate: false
可以在 helm install
命令中添加以下选项让 Pulsar Helm chart 自动创建 Kubernetes 命名空间。
--set namespaceCreate=true
持久化
默认情况下,Pulsar Helm chart 会创建持久卷声明,并期望动态提供者创建底层持久卷。
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
亲和性
默认情况下,anti-affinity
已经启用,以确保同一个组件的 pod 可以在不同的节点运行。
affinity:
anti_affinity: true
要在开发环境(如 Minikube)中使用 Pulsar Helm chart,可以在 helm install
命令中添加以下选项来禁用 antiaffinity
。
--set affinity.anti_affinity=false
组件
Pulsar Helm chart 是为生产用途设计的。 它部署了一个生产就绪的 Pulsar 集群,集群包括 Pulsar 核心组件和监控组件。
通过打开 / 关闭操作可以自定义组件的部署。
## 组件
##
## 控制集群要部署哪些 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
Docker 镜像
Pulsar Helm chart 旨在实现受控升级。 所以它可以为不同组件配置独立的镜像版本。 可以设置各个组件来自定义设置镜像。
## 镜像
##
## 控制每个组件要使用什么镜像
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
TLS
可以配置 Pulsar Helm chart 来开启 TLS(Transport Layer Security),以保护各个组件之间的流量。 在开启 TLS 之前,需要为所需组件提供 TLS 证书。
使用 cert-manager 提供 TLS 证书
要使用 cert-manager
提供 TLS 证书,需要在安装 Pulsar Helm chart 之前先安装 cert-manager。 在成功安装 cert-manager 后,可以将 certs.internal_issuer.enabled
设置为 true
。 因此,Pulsar Helm chart 可以使用 cert-manager
来为配置的组件生成类型为 selfsigning
的 TLS 证书。
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
Enable TLS
安装 cert-manager
之后,可以将 tls.enabled
设置为 true
来为整个集群启用 TLS 加密。
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
认证
认证是默认禁用的。 可以将 auth.authentication.enabled
设置为 true
来启用。 目前,Pulsar Helm chart 仅支持 JWT 认证。 可以将 auth.authentication.provider
设置为 jwt
来使用 JWT 认证。
# 启用或禁用 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 秘钥,并以 <pulsar-release-name>-token-
为前缀。 可以通过下面这条命令找到这些秘钥。
kubectl get secrets -n <k8s-namespace>
授权
授权是默认禁用的。 只有启用了认证才能启用授权。
auth:
authorization:
enabled: false
可以在 helm install
命令中添加以下选项来启用授权。
--set auth.authorization.enabled=true
CPU 和 RAM 资源要求
默认情况下,Pulsar Helm chart 组件的资源请求和副本数量足以满足小型的生产部署。 如果部署了非生产实例,可以减小默认值来适配更小规模的集群。
收集了所有配置选项后,便可以在安装 Pulsar Helm chart 之前安装依赖的 chart。
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
准备 Helm
在安装所有依赖的 chart 并收集了所有的配置选项后,便可以运行 prepare_helm_release.sh 来准备 Helm。
git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart
./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
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.
使用 Helm 来部署 Pulsar 集群
完成下列三个步骤后,便可安装 Helm。
- 收集所有的配置选项。
- 安装依赖的 chart。
- 准备 Helm。
在本例中,我们将 Helm 命名为 pulsar
。
helm repo add apache https://pulsar.apache.org/charts
helm repo update
helm install pulsar apache/pulsar \
--timeout 10m \
--set initialize=true \
--set [your configuration options]
Note
第一次部署需要添加
--set initialize=true
选项来初始化 bookie 和 Pulsar 集群元数据。
也可以使用 --version <installation version>
选项指定安装的 Pulsar Helm chart 版本。
监控部署
部署 Pulsar 集群后将输出已安装的资源。 该可能需要 5-10 分钟的时间。
可以运行 helm status pulsar
命令来查看部署的状态,若部署正在进行,也可以在另一个终端执行该命令查看状态。
访问 Pulsar 集群
默认值将为下列资源创建 ClusterIP
,可以用来和集群交互。
- Proxy: You can use the IP address to produce and consume messages to the installed Pulsar cluster.
- Pulsar Manager:可以通过链接
http://<pulsar-manager-ip>:9527
访问 Pulsar Manager UI。 - Grafana Dashboard: You can access the Grafana dashboard at
http://<grafana-dashboard-ip>:3000
.
运行下面的命令查询这些组件的 IP 地址:
kubectl get service -n <k8s-namespace>