Deploy Pulsar cluster using Helm

在运行 helm install之前, 你需要决定如何运行 Pulsar。 可以使用 Helm 的 --set option.name=value 命令行参数配置选项。

选择配置选项

在每个部分,收集与 helm install 命令合并使用的选项。

Kubernetes 命名空间

默认情况下,Pulsar Helm chart 安装到 pulsar 命名空间。

  1. namespace: pulsar

要将其安装到 Kubernetes 的其它命名空间,可以在 helm install 命令中添加一下选项。

  1. --set namespace=<different-k8s-namespace>

默认情况下,Pulsar Helm chart 不会创建命名空间。

  1. namespaceCreate: false

可以在 helm install 命令中添加以下选项让 Pulsar Helm chart 自动创建 Kubernetes 命名空间。

  1. --set namespaceCreate=true

持久化

默认情况下,Pulsar Helm chart 会创建持久卷声明,并期望动态提供者创建底层持久卷。

  1. volumes:
  2. persistence: true
  3. # 设置使用本地持久卷
  4. # 启用本地持久卷之前应当要安装 local provisioner
  5. local_storage: false

要使用本地持久卷作为 Helm 的持久化存储,你可以安装 local storage provisioner ,并在 helm install 命令中添加以下选项。

  1. --set volumes.local_storage=true

Note

在安装 Pulsar 的生产实例前,需规划好存储设置以避免额外的存储迁移工作。 因为在首次安装后,若想改变存储设置,必须手动编辑 Kubernetes 对象。

Pulsar Helm chart 是为生产用途设计的。 要在开发环境(如 Minikube)中使用,可以在 helm install 命令中添加以下选项来禁用持久化。

  1. --set volumes.persistence=false

亲和性

默认情况下,anti-affinity 已经启用,以确保同一个组件的 pod 可以在不同的节点运行。

  1. affinity:
  2. anti_affinity: true

要在开发环境(如 Minikube)中使用 Pulsar Helm chart,可以在 helm install 命令中添加以下选项来禁用 antiaffinity

  1. --set affinity.anti_affinity=false

组件

Pulsar Helm chart 是为生产用途设计的。 它部署了一个生产就绪的 Pulsar 集群,集群包括 Pulsar 核心组件和监控组件。

通过打开 / 关闭操作可以自定义组件的部署。

  1. ## 组件
  2. ##
  3. ## 控制集群要部署哪些 Apache Pulsar 组件
  4. components:
  5. # zookeeper
  6. zookeeper: true
  7. # bookkeeper
  8. bookkeeper: true
  9. # bookkeeper - autorecovery
  10. autorecovery: true
  11. # broker
  12. broker: true
  13. # functions
  14. functions: true
  15. # proxy
  16. proxy: true
  17. # toolset
  18. toolset: true
  19. # pulsar manager
  20. pulsar_manager: true
  21. ## 监控组件
  22. ##
  23. ## 控制集群要部署哪些监控组件
  24. monitoring:
  25. # monitoring - prometheus
  26. prometheus: true
  27. # monitoring - grafana
  28. grafana: true

Docker 镜像

Pulsar Helm chart 旨在实现受控升级。 所以它可以为不同组件配置独立的镜像版本。 可以设置各个组件来自定义设置镜像。

  1. ## 镜像
  2. ##
  3. ## 控制每个组件要使用什么镜像
  4. images:
  5. zookeeper:
  6. repository: apachepulsar/pulsar-all
  7. tag: 2.5.0
  8. pullPolicy: IfNotPresent
  9. bookie:
  10. repository: apachepulsar/pulsar-all
  11. tag: 2.5.0
  12. pullPolicy: IfNotPresent
  13. autorecovery:
  14. repository: apachepulsar/pulsar-all
  15. tag: 2.5.0
  16. pullPolicy: IfNotPresent
  17. broker:
  18. repository: apachepulsar/pulsar-all
  19. tag: 2.5.0
  20. pullPolicy: IfNotPresent
  21. proxy:
  22. repository: apachepulsar/pulsar-all
  23. tag: 2.5.0
  24. pullPolicy: IfNotPresent
  25. functions:
  26. repository: apachepulsar/pulsar-all
  27. tag: 2.5.0
  28. prometheus:
  29. repository: prom/prometheus
  30. tag: v1.6.3
  31. pullPolicy: IfNotPresent
  32. grafana:
  33. repository: streamnative/apache-pulsar-grafana-dashboard-k8s
  34. tag: 0.0.4
  35. pullPolicy: IfNotPresent
  36. pulsar_manager:
  37. repository: apachepulsar/pulsar-manager
  38. tag: v0.1.0
  39. pullPolicy: IfNotPresent
  40. 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 证书。

  1. certs:
  2. internal_issuer:
  3. enabled: false
  4. component: internal-cert-issuer
  5. type: selfsigning

也可以配置下列字段来自定义生成的 TLS 证书。

  1. tls:
  2. # common settings for generating certs
  3. common:
  4. # 90d
  5. duration: 2160h
  6. # 15d
  7. renewBefore: 360h
  8. organization:
  9. - pulsar
  10. keySize: 4096
  11. keyAlgorithm: rsa
  12. keyEncoding: pkcs8

Enable TLS

安装 cert-manager 之后,可以将 tls.enabled 设置为 true 来为整个集群启用 TLS 加密。

  1. tls:
  2. enabled: false

也可以配置是否为各个组件启用 TLS 加密。

  1. tls:
  2. # proxy 的证书生成设置
  3. proxy:
  4. enabled: false
  5. cert_name: tls-proxy
  6. # broker 的证书生成设置
  7. broker:
  8. enabled: false
  9. cert_name: tls-broker
  10. # bookie 的证书生成设置
  11. bookie:
  12. enabled: false
  13. cert_name: tls-bookie
  14. # zookeeper 的证书生成设置
  15. zookeeper:
  16. enabled: false
  17. cert_name: tls-zookeeper
  18. # 自动恢复功能的证书生成设置
  19. autorecovery:
  20. cert_name: tls-recovery
  21. # toolset 的证书生成设置
  22. toolset:
  23. cert_name: tls-toolset

认证

认证是默认禁用的。 可以将 auth.authentication.enabled 设置为 true 来启用。 目前,Pulsar Helm chart 仅支持 JWT 认证。 可以将 auth.authentication.provider 设置为 jwt 来使用 JWT 认证。

  1. # 启用或禁用 broker 认证和授权。
  2. auth:
  3. authentication:
  4. enabled: false
  5. provider: "jwt"
  6. jwt:
  7. # 启用 JWT 认证
  8. # 如果令牌是由密钥生成的,将 usingSecretKey 设置为 true。
  9. # 如果令牌是由私钥生成的,将 usingSecretKey 设置为 false。
  10. usingSecretKey: false
  11. superUsers:
  12. # broker 间通信
  13. broker: "broker-admin"
  14. # proxy 与 broker 通信
  15. proxy: "proxy-admin"
  16. # pulsar-admin 客户端与 broker/proxy 通信
  17. client: "admin"

要启用认证,可以运行 准备 helm 来为字段 auth.superUsers中指定的 3 个超级用户生成秘钥和令牌。 生成的秘钥和超级用户令牌会上传并存储为 Kubernetes 秘钥,并以 <pulsar-release-name>-token- 为前缀。 可以通过下面这条命令找到这些秘钥。

  1. kubectl get secrets -n <k8s-namespace>

授权

授权是默认禁用的。 只有启用了认证才能启用授权。

  1. auth:
  2. authorization:
  3. enabled: false

可以在 helm install 命令中添加以下选项来启用授权。

  1. --set auth.authorization.enabled=true

CPU 和 RAM 资源要求

默认情况下,Pulsar Helm chart 组件的资源请求和副本数量足以满足小型的生产部署。 如果部署了非生产实例,可以减小默认值来适配更小规模的集群。

收集了所有配置选项后,便可以在安装 Pulsar Helm chart 之前安装依赖的 chart。

Install dependent charts

安装本地存储配置器

要使用本地持久化卷作为持久化存储,需要为 本地持久化卷 安装存储配置器。

最简单的方法之一是使用与 Pulsar Helm chart 一起提供的本地存储配置器。

  1. helm repo add streamnative https://charts.streamnative.io
  2. helm repo update
  3. 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中。

  1. git clone https://github.com/apache/pulsar-helm-chart
  2. cd pulsar-helm-chart
  3. ./scripts/cert-manager/install-cert-manager.sh

准备 Helm

在安装所有依赖的 chart 并收集了所有的配置选项后,便可以运行 prepare_helm_release.sh 来准备 Helm。

  1. git clone https://github.com/apache/pulsar-helm-chart
  2. cd pulsar-helm-chart
  3. ./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 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

  1. helm repo add apache https://pulsar.apache.org/charts
  2. helm repo update
  3. helm install pulsar apache/pulsar \
  4. --timeout 10m \
  5. --set initialize=true \
  6. --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 地址:

  1. kubectl get service -n <k8s-namespace>