大数据组件Apache Pulsar内网离线部署流程:在完全离线的内网环境下使用官方Helm chart部署可用的Apache Pulsar集群,并进行消息收发功能测试
部署规划:
Kubernetes集群一共六个节点,分别部署:
Zookeeper 3个pod
Proxy 3个pod
Broker 3个pod
Bookkeeper 4个pod
pulsar-recovery 1个pod
pulsar-toolset 1 个pod
环境准备:
上传helm chart
https://github.com/apache/pulsar-helm-chart/archive/refs/heads/master.zip
Pulsar helm chart 安装配置
https://downloads.apache.org/pulsar/helm-chart/3.0.0/pulsar-3.0.0.tgz
准备镜像文件
pulsar-all:3.0.0
pulsar-manager:latest
安装pulsarctl:
内网无法连接在线资源,所以需要通过install.sh确定所需要下载的文件:
curl --retry 10 -L -o ${TARFILE} https://github.com/streamnative/pulsarctl/releases/download/${version}/${TARFILE}
这里的version,由
version=$(curl -s https://raw.githubusercontent.com/streamnative/pulsarctl/master/stable.txt)
取得;
TARFILE由
pulsarctl-${ARCH}-${OS}.tar.gz
拼接得来,这里需要根据环境本身的处理器架构和操作系统选择。
这里官方网址下载pulsarctl安装包
pulsarctl-amd64-linux.tar.gz
作为示例,并上传内网解压
之后手动复制文件到
${HOME}/.pulsarctl
并增加环境变量
export PATH=${HOME}/.pulsarctl:${HOME}/.pulsarctl/plugins:${PATH}
创建kubernetes secret:
./scripts/pulsar/prepare_helm_release.sh -n pulsar -k pulsar -l > pulsar_helm_release_res.yaml
其中-n参数对应kubernetes集群中namesapce名称,-k参数对应之后helm部署时helm-release名称
得到输出结果为一个yaml文件,其中包含生了4个K8S Secret的Manifest。其中
pulsar-token-asymmetric-key这个Secret中是用于生成Token和验证Token的私钥和公钥;
pulsar-token-proxy-admin这个Secret中是用于proxy的超级用户角色Token;
pulsar-token-broker-admin这个Secret中是用于broker的超级用户角色Token;
pulsar-token-admin这个Secret中是用于管理客户端的超级用户角色Token
接下来使用
kubectl apply -f pulsar_helm_release_res.yaml
完成创建。
编辑values.yaml:
values中一些配置需要修改:
修改对应镜像名称与版本:
images:
zookeeper:
repository: dockerhub.kubekey.local/apachepulsar/pulsar-all
# uses defaultPulsarImageTag when unspecified
tag: 3.0.0
pullPolicy: IfNotPresent
bookie:
repository: dockerhub.kubekey.local/apachepulsar/pulsar-all
# uses defaultPulsarImageTag when unspecified
tag: 3.0.0
pullPolicy: IfNotPresent
autorecovery:
repository: dockerhub.kubekey.local/apachepulsar/pulsar-all
# uses defaultPulsarImageTag when unspecified
tag: 3.0.0
pullPolicy: IfNotPresent
broker:
repository: dockerhub.kubekey.local/apachepulsar/pulsar-all
# uses defaultPulsarImageTag when unspecified
tag: 3.0.0
pullPolicy: IfNotPresent
proxy:
repository: dockerhub.kubekey.local/apachepulsar/pulsar-all
# uses defaultPulsarImageTag when unspecified
tag: 3.0.0
pullPolicy: IfNotPresent
functions:
repository: dockerhub.kubekey.local/apachepulsar/pulsar-all
# uses defaultPulsarImageTag when unspecified
tag: 3.0.0
pulsar_manager:
repository: dockerhub.kubekey.local/apachepulsar/pulsar-manager
#tag: v0.3.0
tag: test
pullPolicy: IfNotPresent
hasCommand: false
演示集群关闭本地存储:
local_storage: false
集群启动:
输入命令:
helm install --values values.yaml --set initialize=true --namespace pulsar pulsar pulsar-3.0.0.tgz
这里第一个pulsar是对应需要部署pulsar集群的kubernetes namespace。第二个pulsar对应创建kubernetes secret步骤中-k后面传入的helm部署名
测试:
查看pod启动情况:
出现此情况代表集群初始化完成
可用kubectl查看集群情况:
测试集群功能:
输入命令:
kubectl exec -it -n pulsar pulsar-toolset-0 -- /bin/bash
进入toolset容器,然后尝试创建tenant:
bin/pulsar-admin tenants create test-tenant
使用命令:
bin/pulsar-admin tenants list
输出tenant,可以看到创建成功:
可能遇到的问题及解决方案:
出现该问题说明当前helm chart可能存在版本过老,与kubernetes不匹配的问题,可以考虑尝试更新的helm chart
出现该问题说明当前端口号80,kubeernetes没有权限进行绑定操作。可以修改values中对应组件(pulsar-proxy)的端口号: