Helm方式部署 zookeeper+kafka 集群 ——2023.05

版本概况

服务版本
centos7.9
kubernetesv1.20.15
helmv3.10.1
zookeeper3.8.1
kafka3.4.0

一、添加helm仓库

# 添加bitnami和官方helm仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami

# 查看仓库
helm repo list

二、安装部署集群

安装方式有两种,在线安装和离线安装,在线安装方便快捷,但是无法修改参数。由于需要修改配置,故本文采用离线安装方式。

2.1 在线安装zookeeper+kafka集群

1. 部署zookeeper集群

# 部署zookeeper集群
helm install zookeeper bitnami/zookeeper \
  --set replicaCount=3 \
  --set auth.enabled=false \
  --set allowAnonymousLogin=true

# 查看
helm list

在这里插入图片描述

提示:
由于这个ApacheZookeeper集群不会公开,所以在部署时禁用了身份验证。对于生产环境,请考虑使用生产配置。
生产环境参考:https://github.com/bitnami/charts/tree/main/bitnami/zookeeper#production-configuration

2. 部署kafka集群

# 部署kafka集群
helm install kafka bitnami/kafka \
  --set zookeeper.enabled=false \
  --set replicaCount=3 \
  --set externalZookeeper.servers=ZOOKEEPER-SERVICE-NAME    # ZOOKEEPER-SERVICE-NAME  替换为上一步结束时获得的Apache ZOOKEEPER服务名称

2.2 离线安装zookeeper+kafka集群

由于在线安装,zookeeper的pod起不来,一直处于pending的状态,原因是因为pvc存储卷挂载的问题,所以这里选择把zookeeper和kafka的包下载下来,修改配置文件,然后进行离线安装。
我这里将zookeeper和kafka安装在default命名空间下,如果您想按在指定namespace下,命令后加-n [namespace] 就可以了。
1. 下载离线包

# 创建存放压缩包目录
mkdir /bsm/zookeeper-kafka && cd /bsm/zookeeper-kafka

# 拉取压缩包
helm pull bitnami/zookeeper
helm pull bitnami/kafka

# 解压
tar -zvxf kafka-22.1.2.tgz
tar -zvxf zookeeper-11.4.1.tgz

在这里插入图片描述

2. 部署zookeeper集群

  • 修改配置文件values.yaml
    主要修改内容:enabled设为false ;注释掉 storageClass: “”、existingClaim: “”
cd /bsm/zookeeper-kafka/zookeeper  
vim values.yaml

# 修改配置文件,主要修改存储storageclass(kafka的配置文件类似)
persistence:
  ## @param persistence.enabled Enable ZooKeeper data persistence using PVC. If false, use emptyDir
  ##
  enabled: false    # 测试环境可设置为false
  ## @param persistence.existingClaim Name of an existing PVC to use (only when deploying a single replica)
  ##
#  existingClaim: ""
  ## @param persistence.storageClass PVC Storage Class for ZooKeeper data volume
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
  ##   GKE, AWS & OpenStack)
  ##
#  storageClass: ""      # 注释掉storageClass。如果创建好了storageclass可打开注释,并写入storageClass的名称
  • 安装zookeeper集群
# 安装zookeeper
cd  /bsm/zookeeper-kafka/zookeeper
helm install zookeeper --set replicaCount=3 --set auth.enabled=false --set allowAnonymousLogin=true ./
# ./ 表示zookeeper的value.yaml文件所在路径

在这里插入图片描述

# 查看pod状态:
[root@k8s-master1 rabbitmq]# kubectl get pods
NAME                                      READY   STATUS    RESTARTS   AGE
zookeeper-0                               1/1     Running   0          85s
zookeeper-1                               1/1     Running   0          85s
zookeeper-2                               1/1     Running   0          84s

3. 安装kafka集群

  • 修改配置文件values.yaml
    主要修改内容:enabled设为false ;注释掉 storageClass: “”、existingClaim: “”;kraft.enable 修改为 false
cd /bsm/zookeeper-kafka/kafka
vim values.yaml

修改一:
persistence:
  ## @param persistence.enabled Enable Kafka data persistence using PVC, note that ZooKeeper persistence is unaffected
  ##
  enabled: false    #改为false
  ## @param persistence.existingClaim A manually managed Persistent Volume and Claim
  ## If defined, PVC must be created manually before volume will be bound
  ## The value is evaluated as a template
  ##
#  existingClaim: ""
  ## @param persistence.storageClass PVC Storage Class for Kafka data volume
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ## set, choosing the default provisioner.
  ##
#  storageClass: ""
  ## @param persistence.accessModes Persistent Volume Access Modes


修改二:
  kraft:
  ## @param kraft.enabled Switch to enable or disable the Kraft mode for Kafka
  ##
  enabled: false    #改为false
  ## @param kraft.processRoles Roles of your Kafka nodes. Nodes can have 'broker', 'controller' roles or both of them.
  ##
  processRoles: broker,controller
  • 安装 kafka 集群
# 安装zookeeper
cd  /bsm/zookeeper-kafka/kafka
helm install kafka --set zookeeper.enabled=false --set replicaCount=3 --set externalZookeeper.servers=ZOOKEEPER-SERVICE-NAME ./      
# ZOOKEEPER-SERVICE-NAME  替换为上一步结束时获得的Apache ZOOKEEPER服务名称
# ./ 表示kafka的value.yaml文件所在路径

在这里插入图片描述

# 查看:
[root@k8s-master1 kafka]# kubectl get pods 
NAME                                      READY   STATUS    RESTARTS   AGE
kafka-0                                   1/1     Running   0          3m58s
kafka-1                                   1/1     Running   0          3m58s
kafka-2                                   1/1     Running   0          3m58s

报错
Error: INSTALLATION FAILED: execution error at (kafka/templates/NOTES.txt:314:4):
VALUES VALIDATION:
kafka: Kraft mode
You cannot use Kraft mode and Zookeeper at the same time. They are mutually exclusive. Disable zookeeper in ‘.Values.zookeeper.enabled’ and delete values from ‘.Values.externalZookeeper.servers’ if you want to use Kraft mode
原因:
新版kafka新增了一个kraft模式,他与zookeeper是冲突的,不能同时使用,所以如果使用指定的zookeeper,kraft模式要关闭。
解决办法:
修改kafka的配置文件“value.yaml”,将 kraft.enable 的值改为false

三、验证kafka与zookeeper是否绑定

查看kafka日志中有以下信息:

kubectl logs -f kafka-0  | grep socket

在这里插入图片描述

四、测试集群

# 进入kafka的pod创建一个topic
[root@k8s-master1 kafka]# kubectl exec -it kafka-0 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.

I have no name!@kafka-0:/$ kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic testtopic
heCreated topic testtopic.

# 启动一个消费者
[root@k8s-master1 ~]# kubectl exec -it kafka-0 bash
I have no name!@kafka-0:/$ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic


# 新开一个窗口,进入kafka的pod,启动一个生产者,输入消息;在消费者端可以收到消息
[root@k8s-master1 ~]# kubectl exec -it kafka-0 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
I have no name!@kafka-0:/$ kafka-console-producer.sh --bootstrap-server localhost:9092 --topic testtopic

在生产者页面输入信息,可以在消费者页面查看到。
在这里插入图片描述
在这里插入图片描述
部署成功。

附:可改善地方

持久化存储,配置文件value.yaml中storageclass参数未设定,亲和力未设定,测试环境要求没有那么多,生产环境大家可以按需配置。

卸载应用

helm uninstall kafka -n [namespace]
helm uninstall zookeeper  -n [namespace]

参考文章:
bitnami官网:https://docs.bitnami.com/tutorials/deploy-scalable-kafka-zookeeper-cluster-kubernetes
csdn文章:https://blog.csdn.net/heian_99/article/details/114840056

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
使用Helm部署Kafka可以简化部署和管理过程。您可以使用以下命令来部署Kafka: ```shell helm install --name kafka --namespace kafka -f kafka-values.yaml bitnami/kafka ``` 这个命令将使用Helm安装Bitnami的Kafka chart。要成功执行此命令,请确保您已经添加了Bitnami的Helm仓库,并且已经在您的环境中配置了正确的命名空间和值文件。您可以使用以下命令来添加Bitnami的Helm仓库: ```shell helm repo add bitnami https://charts.bitnami.com/bitnami ``` 通过这个命令,您可以将Bitnami的Helm仓库添加到您的环境中。然后,您可以使用以下命令来查看已添加的仓库列表: ```shell helm repo list ``` 这个命令将显示您添加的所有Helm仓库的列表。 请注意,这只是部署Kafka的基本示例。根据您的需求,您可能需要调整部署配置和参数。我希望这个答案对您有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Helm 安装Kafka](https://blog.csdn.net/weixin_30471561/article/details/101474739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Helm方式部署 zookeeper+kafka 集群 ——2023.05](https://blog.csdn.net/weixin_64124795/article/details/130772120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小bā吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值