Deploy Pulsar cluster using Helm

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

    默认情况下,Pulsar Helm chart 安装到 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 的持久化存储,你可以安装 ,并在 helm install 命令中添加以下选项。

    1. --set volumes.local_storage=true

    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

    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 镜像

    1. ## 镜像
    2. ##
    3. images:
    4. zookeeper:
    5. repository: apachepulsar/pulsar-all
    6. tag: 2.5.0
    7. pullPolicy: IfNotPresent
    8. bookie:
    9. repository: apachepulsar/pulsar-all
    10. tag: 2.5.0
    11. pullPolicy: IfNotPresent
    12. autorecovery:
    13. repository: apachepulsar/pulsar-all
    14. tag: 2.5.0
    15. broker:
    16. repository: apachepulsar/pulsar-all
    17. tag: 2.5.0
    18. pullPolicy: IfNotPresent
    19. proxy:
    20. repository: apachepulsar/pulsar-all
    21. tag: 2.5.0
    22. pullPolicy: IfNotPresent
    23. functions:
    24. repository: apachepulsar/pulsar-all
    25. tag: 2.5.0
    26. prometheus:
    27. repository: prom/prometheus
    28. tag: v1.6.3
    29. pullPolicy: IfNotPresent
    30. grafana:
    31. repository: streamnative/apache-pulsar-grafana-dashboard-k8s
    32. tag: 0.0.4
    33. pullPolicy: IfNotPresent
    34. pulsar_manager:
    35. repository: apachepulsar/pulsar-manager
    36. tag: v0.1.0
    37. pullPolicy: IfNotPresent
    38. 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. cert_name: tls-broker
    9. # bookie 的证书生成设置
    10. bookie:
    11. enabled: false
    12. cert_name: tls-bookie
    13. # zookeeper 的证书生成设置
    14. zookeeper:
    15. cert_name: tls-zookeeper
    16. # 自动恢复功能的证书生成设置
    17. autorecovery:
    18. cert_name: tls-recovery
    19. # toolset 的证书生成设置
    20. toolset:
    21. 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. 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)

    关于安装 cert-manager 的细节,参考 官方说明

    我们还提供了 bash 脚本 来安装 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

    在安装所有依赖的 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 地址: