初试Pulsar---私有云离线安装部署Pulsar

初试Pulsar---私有云离线安装部署Pulsar_第1张图片

前一段时间了解了Pulsar这个开源项目,感觉是一个替换kafka的好东西!它具体的特性各位自行搜索吧!
为了自己项目尝试使用Pulsar,我决定进行部署实验。但是,目前网上看到的都是在公网上公有云部署Pulsar的说明,没有人在私有Kubernetes集群离线部署Pulsar。
一般的大型企业公司都有自己的私有云,禁止连接外网使用,为此我重新查看了官方文档,终于搞定了在私有云部署Pulsar集群。

本文章将指导使用 Helm 将 Apache Pulsar 快速地安装及运行在私有部署的 Kubernetes 上,内容包括以下几个部分:

  • 使用 Helm 将 Apache Pulsar 安装在 Kubernetes 上
  • 启动与停止 Apache Pulsar
  • 使用 pulsar-admin 创建主题
  • 使用 Pulsar 客户端生产与消费消息
  • 通过 Prometheus 和 Grafana 来监控 Apache Pulsar 的状态
一、前提条件
  • kubectl 1.14 or higher, compatible with your cluster (+/- 1 minor release from your cluster)
  • Helm v3 (3.0.2 or higher)
  • Kubernetes 集群,版本 1.14 或以上
  • 一台能够上外网的电脑(安装kubectl、helm、下载镜像、部署操作等)
  • 在电脑上安装 helm 和 kubectl
二、将 Pulsar 集群部署于生产用途的配置选项设置方式:

安装 Pulsar Helm chart

1、 添加 Pulsar Helm 仓库。
helm repo add apache https://pulsar.apache.org/charts
helm repo update
2、 克隆 Pulsar Helm chart 的仓库。
git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart
3、 配置Pulsar chart参数:

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

  • –选择配置选项
    在每个部分,收集与 helm install 命令合并使用的选项。同时,除helm命令参数以为,其他为修改charts/values.yaml文件内相对应内容。
  • 3.1 Kubernetes 命名空间
    默认情况下,Pulsar Helm chart 安装到 pulsar 命名空间。
    namespace: pulsar
    要将其安装到 Kubernetes 的其它命名空间,可以在 helm install 命令中添加一下选项。
    –set namespace=
    默认情况下,Pulsar Helm chart 不会创建命名空间。
    namespaceCreate: false
    可以在 helm install 命令中添加以下选项让 Pulsar Helm chart 自动创建 Kubernetes 命名空间。
    –set namespaceCreate=true
  • 3.2 持久化
    默认情况下,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
  • 3.3 亲和性
    默认情况下,anti-affinity 已经启用,以确保同一个组件的 pod 可以在不同的节点运行。
affinity:
  anti_affinity: true

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

--set affinity.anti_affinity=false
  • 3.4 组件
    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
  • 3.5 Docker 镜像
    Pulsar Helm chart 旨在实现受控升级。 所以它可以为不同组件配置独立的镜像版本。 可以设置各个组件来自定义设置镜像。

离线安装注意⚠️:将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
  • 3.6 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
  • 3.7 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
  • 3.8 认证
    认证是默认禁用的。 可以将 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 秘钥,并以 -token- 为前缀。 可以通过下面这条命令找到这些秘钥。

kubectl get secrets -n 
  • 3.9 授权
    授权是默认禁用的。 只有启用了认证才能启用授权。
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
  • 5 准备helm资源,部署到Kubernetes集群

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

  • 6 使用 Pulsar Helm chart 来将一个 Pulsar 集群安装至 Kubernetes

完成下列三个步骤后,便可安装 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 
  • 8 检查检查命名空间 pulsar 下所有pod的状态、所有服务的状态,如果都正常,至此完成Pulsar集群离线部署。
  • 9 helm删除pulsar
helm delete pulsar-mini
  • 10 其余的Pulsar使用方式建议去项目的官网查看学习。

你可能感兴趣的:(pulsar,kafka,big,data,docker,分布式,kubernetes)