0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

zookeeper+kafka on k8s环境部署

马哥Linux运维 来源:博客园 作者:大数据老司机 2022-09-20 10:10 次阅读

一、概述

  • Apache ZooKeeper 是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务,ZooKeeper 致力于开发和维护一个开源服务器,以实现高度可靠的分布式协调,其实也可以认为就是一个分布式数据库,只是结构比较特殊,是树状结构。官网文档:

    https://zookeeper.apache.org/doc/r3.8.0/

febc62a8-3821-11ed-ba43-dac502259ad0.pngfec6e552-3821-11ed-ba43-dac502259ad0.png

二、Zookeeper on k8s 部署

002bb7d8-3822-11ed-ba43-dac502259ad0.png

1)添加源

部署包地址:

https://artifacthub.io/packages/helm/zookeeper/zookeeper

helmrepoaddbitnamihttps://charts.bitnami.com/bitnami
helmpullbitnami/zookeeper
tar-xfzookeeper-10.2.1.tgz

2)修改配置

  • 修改zookeeper/values.yaml
image:
registry:myharbor.com
repository:bigdata/zookeeper
tag:3.8.0-debian-11-r36
...

replicaCount:3

...

service:
type:NodePort
nodePorts:
#NodePort默认范围是30000-32767
client:"32181"
tls:"32182"

...

persistence:
storageClass:"zookeeper-local-storage"
size:"10Gi"
#目录需要提前在宿主机上创建
local:
-name:zookeeper-0
host:"local-168-182-110"
path:"/opt/bigdata/servers/zookeeper/data/data1"
-name:zookeeper-1
host:"local-168-182-111"
path:"/opt/bigdata/servers/zookeeper/data/data1"
-name:zookeeper-2
host:"local-168-182-112"
path:"/opt/bigdata/servers/zookeeper/data/data1"

...

#EnablePrometheustoaccessZooKeepermetricsendpoint
metrics:
enabled:true
  • 添加zookeeper/templates/pv.yaml
{{-range.Values.persistence.local}}
---
apiVersion:v1
kind:PersistentVolume
metadata:
name:{{.name}}
labels:
name:{{.name}}
spec:
storageClassName:{{$.Values.persistence.storageClass}}
capacity:
storage:{{$.Values.persistence.size}}
accessModes:
-ReadWriteOnce
local:
path:{{.path}}
nodeAffinity:
required:
nodeSelectorTerms:
-matchExpressions:
-key:kubernetes.io/hostname
operator:In
values:
-{{.host}}
---
{{-end}}

  • 添加zookeeper/templates/storage-class.yaml
kind:StorageClass
apiVersion:storage.k8s.io/v1
metadata:
name:{{.Values.persistence.storageClass}}
provisioner:kubernetes.io/no-provisioner

3)开始安装

#先准备好镜像
dockerpulldocker.io/bitnami/zookeeper:3.8.0-debian-11-r36
dockertagdocker.io/bitnami/zookeeper:3.8.0-debian-11-r36myharbor.com/bigdata/zookeeper:3.8.0-debian-11-r36
dockerpushmyharbor.com/bigdata/zookeeper:3.8.0-debian-11-r36

#开始安装
helminstallzookeeper./zookeeper-nzookeeper--create-namespace

NOTES

NAME:zookeeper
LASTDEPLOYED:SunSep1818032022
NAMESPACE:zookeeper
STATUS:deployed
REVISION:1
TESTSUITE:None
NOTES:
CHARTNAME:zookeeper
CHARTVERSION:10.2.1
APPVERSION:3.8.0

**Pleasebepatientwhilethechartisbeingdeployed**

ZooKeepercanbeaccessedviaport2181onthefollowingDNSnamefromwithinyourcluster:

zookeeper.zookeeper.svc.cluster.local

ToconnecttoyourZooKeeperserverrunthefollowingcommands:

exportPOD_NAME=$(kubectlgetpods--namespacezookeeper-l"app.kubernetes.io/name=zookeeper,app.kubernetes.io/instance=zookeeper,app.kubernetes.io/component=zookeeper"-ojsonpath="{.items[0].metadata.name}")
kubectlexec-it$POD_NAME--zkCli.sh

ToconnecttoyourZooKeeperserverfromoutsidetheclusterexecutethefollowingcommands:

exportNODE_IP=$(kubectlgetnodes--namespacezookeeper-ojsonpath="{.items[0].status.addresses[0].address}")
exportNODE_PORT=$(kubectlget--namespacezookeeper-ojsonpath="{.spec.ports[0].nodePort}"serviceszookeeper)
zkCli.sh$NODE_IP:$NODE_PORT

004f18ea-3822-11ed-ba43-dac502259ad0.png
查看 pod 状态

kubectlgetpods,svc-nzookeeper-owide
0062232c-3822-11ed-ba43-dac502259ad0.png

4)测试验证

#登录zookeeperpod
kubectlexec-itzookeeper-0-nzookeeper--zkServer.shstatus
kubectlexec-itzookeeper-1-nzookeeper--zkServer.shstatus
kubectlexec-itzookeeper-2-nzookeeper--zkServer.shstatus

kubectlexec-itzookeeper-0-nzookeeper--bash
00798e5e-3822-11ed-ba43-dac502259ad0.png

5)Prometheus 监控

Prometheus:https://prometheus.k8s.local/targets?search=zookeeper
008f8952-3822-11ed-ba43-dac502259ad0.png

可以通过命令查看采集数据

kubectlget--rawhttp://10.244.0.52:9141/metrics
kubectlget--rawhttp://10.244.1.101:9141/metrics
kubectlget--rawhttp://10.244.2.137:9141/metrics

Grafana:https://grafana.k8s.local/
账号:admin,密码通过下面命令获取

kubectlgetsecret--namespacegrafanagrafana-ojsonpath="{.data.admin-password}"|base64--decode;echo

导入 grafana 模板,集群资源监控:10465
官方模块下载地址:

https://grafana.com/grafana/dashboards/

00a29880-3822-11ed-ba43-dac502259ad0.png

6)卸载

helmuninstallzookeeper-nzookeeper

kubectldeletepod-nzookeeper`kubectlgetpod-nzookeeper|awk'NR>1{print$1}'`--force
kubectlpatchnszookeeper-p'{"metadata":{"finalizers":null}}'
kubectldeletenszookeeper--force

三、Kafka on k8s 部署

1)添加源

部署包地址:

https://artifacthub.io/packages/helm/bitnami/kafka

helmrepoaddbitnamihttps://charts.bitnami.com/bitnami
helmpullbitnami/kafka
tar-xfkafka-18.4.2.tgz

2)修改配置

  • 修改kafka/values.yaml
image:
registry:myharbor.com
repository:bigdata/kafka
tag:3.2.1-debian-11-r16

...

replicaCount:3

...

service:
type:NodePort
nodePorts:
client:"30092"
external:"30094"

...

externalAccess
enabled:true
service:
type:NodePort
nodePorts:
-30001
-30002
-30003
useHostIPs:true

...

persistence:
storageClass:"kafka-local-storage"
size:"10Gi"
#目录需要提前在宿主机上创建
local:
-name:kafka-0
host:"local-168-182-110"
path:"/opt/bigdata/servers/kafka/data/data1"
-name:kafka-1
host:"local-168-182-111"
path:"/opt/bigdata/servers/kafka/data/data1"
-name:kafka-2
host:"local-168-182-112"
path:"/opt/bigdata/servers/kafka/data/data1"

...

metrics:
kafka:
enabled:true
image:
registry:myharbor.com
repository:bigdata/kafka-exporter
tag:1.6.0-debian-11-r8
jmx:
enabled:true
image:
registry:myharbor.com
repository:bigdata/jmx-exporter
tag:0.17.1-debian-11-r1
annotations:
prometheus.io/path:"/metrics"

...

zookeeper:
enabled:false

...

externalZookeeper
servers:
-zookeeper-0.zookeeper-headless.zookeeper
-zookeeper-1.zookeeper-headless.zookeeper
-zookeeper-2.zookeeper-headless.zookeeper
  • 添加kafka/templates/pv.yaml
{{-range.Values.persistence.local}}
---
apiVersion:v1
kind:PersistentVolume
metadata:
name:{{.name}}
labels:
name:{{.name}}
spec:
storageClassName:{{$.Values.persistence.storageClass}}
capacity:
storage:{{$.Values.persistence.size}}
accessModes:
-ReadWriteOnce
local:
path:{{.path}}
nodeAffinity:
required:
nodeSelectorTerms:
-matchExpressions:
-key:kubernetes.io/hostname
operator:In
values:
-{{.host}}
---
{{-end}}
  • 添加kafka/templates/storage-class.yaml
kind:StorageClass
apiVersion:storage.k8s.io/v1
metadata:
name:{{.Values.persistence.storageClass}}
provisioner:kubernetes.io/no-provisioner

3)开始安装

#先准备好镜像
dockerpulldocker.io/bitnami/kafka:3.2.1-debian-11-r16
dockertagdocker.io/bitnami/kafka:3.2.1-debian-11-r16myharbor.com/bigdata/kafka:3.2.1-debian-11-r16
dockerpushmyharbor.com/bigdata/kafka:3.2.1-debian-11-r16

#node-export
dockerpulldocker.io/bitnami/kafka-exporter:1.6.0-debian-11-r8
dockertagdocker.io/bitnami/kafka-exporter:1.6.0-debian-11-r8myharbor.com/bigdata/kafka-exporter:1.6.0-debian-11-r8
dockerpushmyharbor.com/bigdata/kafka-exporter:1.6.0-debian-11-r8

#JXM
docker.io/bitnami/jmx-exporter:0.17.1-debian-11-r1
dockertagdocker.io/bitnami/jmx-exporter:0.17.1-debian-11-r1myharbor.com/bigdata/jmx-exporter:0.17.1-debian-11-r1
dockerpushmyharbor.com/bigdata/jmx-exporter:0.17.1-debian-11-r1

#开始安装
helminstallkafka./kafka-nkafka--create-namespace

NOTES

NAME:kafka
LASTDEPLOYED:SunSep1820022022
NAMESPACE:kafka
STATUS:deployed
REVISION:1
TESTSUITE:None
NOTES:
CHARTNAME:kafka
CHARTVERSION:18.4.2
APPVERSION:3.2.1
---------------------------------------------------------------------------------------------
WARNING

Byspecifying"serviceType=LoadBalancer"andnotconfiguringtheauthentication
youhavemostlikelyexposedtheKafkaserviceexternallywithoutany
authenticationmechanism.

Forsecurityreasons,westronglysuggestthatyouswitchto"ClusterIP"or
"NodePort".Asalternative,youcanalsoconfiguretheKafkaauthentication.

---------------------------------------------------------------------------------------------

**Pleasebepatientwhilethechartisbeingdeployed**

Kafkacanbeaccessedbyconsumersviaport9092onthefollowingDNSnamefromwithinyourcluster:

kafka.kafka.svc.cluster.local

EachKafkabrokercanbeaccessedbyproducersviaport9092onthefollowingDNSname(s)fromwithinyourcluster:

kafka-0.kafka-headless.kafka.svc.cluster.local:9092
kafka-1.kafka-headless.kafka.svc.cluster.local:9092
kafka-2.kafka-headless.kafka.svc.cluster.local:9092

TocreateapodthatyoucanuseasaKafkaclientrunthefollowingcommands:

kubectlrunkafka-client--restart='Never'--imagedocker.io/bitnami/kafka:3.2.1-debian-11-r16--namespacekafka--command--sleepinfinity
kubectlexec--tty-ikafka-client--namespacekafka--bash

PRODUCER:
kafka-console-producer.sh

--broker-listkafka-0.kafka-headless.kafka.svc.cluster.local:9092,kafka-1.kafka-headless.kafka.svc.cluster.local:9092,kafka-2.kafka-headless.kafka.svc.cluster.local:9092
--topictest

CONSUMER:
kafka-console-consumer.sh

--bootstrap-serverkafka.kafka.svc.cluster.local:9092
--topictest
--from-beginning

ToconnecttoyourKafkaserverfromoutsidethecluster,followtheinstructionsbelow:

Kafkabrokersdomain:YoucangettheexternalnodeIPfromtheKafkaconfigurationfilewiththefollowingcommands(ChecktheEXTERNALlistener)

1.Obtainthepodname:

kubectlgetpods--namespacekafka-l"app.kubernetes.io/name=kafka,app.kubernetes.io/instance=kafka,app.kubernetes.io/component=kafka"

2.Obtainpodconfiguration:

kubectlexec-itKAFKA_POD--cat/opt/bitnami/kafka/config/server.properties|grepadvertised.listeners

Kafkabrokersport:YouwillhaveadifferentnodeportforeachKafkabroker.Youcangetthelistofconfigurednodeportsusingthecommandbelow:

echo"$(kubectlgetsvc--namespacekafka-l"app.kubernetes.io/name=kafka,app.kubernetes.io/instance=kafka,app.kubernetes.io/component=kafka,pod"-ojsonpath='{.items[*].spec.ports[0].nodePort}'|tr'''
')"

00c57486-3822-11ed-ba43-dac502259ad0.png
查看 pod 状态

kubectlgetpods,svc-nkafka-owide
00dface8-3822-11ed-ba43-dac502259ad0.png

4)测试验证

#登录zookeeperpod
kubectlexec-itkafka-0-nkafka--bash

1、创建 Topic(一个副本一个分区)

--create:指定创建topic动作

--topic:指定新建topic的名称

--bootstrap-server:指定kafka连接地址

--config:指定当前topic上有效的参数值,参数列表参考文档为:Topic-levelconfiguration

--partitions:指定当前创建的kafka分区数量,默认为1个

--replication-factor:指定每个分区的复制因子个数,默认1个
kafka-topics.sh--create--topictest001--bootstrap-serverkafka.kafka:9092--partitions1--replication-factor1
#查看
kafka-topics.sh--describe--bootstrap-serverkafka.kafka:9092--topictest001

00faab10-3822-11ed-ba43-dac502259ad0.png

2、查看 Topic 列表

kafka-topics.sh--list--bootstrap-serverkafka.kafka:9092

3、生产者/消费者测试

【生产者】

kafka-console-producer.sh--broker-listkafka.kafka:9092--topictest001

{"id":"1","name":"n1","age":"20"}
{"id":"2","name":"n2","age":"21"}
{"id":"3","name":"n3","age":"22"}

【消费者】

#从头开始消费
kafka-console-consumer.sh--bootstrap-serverkafka.kafka:9092--topictest001--from-beginning
#指定从分区的某个位置开始消费,这里只指定了一个分区,可以多写几行或者遍历对应的所有分区
kafka-console-consumer.sh--bootstrap-serverkafka.kafka:9092--topictest001--partition0--offset100--grouptest001

4、查看数据积压

kafka-consumer-groups.sh--bootstrap-serverkafka.kafka:9092--describe--grouptest001

5、删除 topic

kafka-topics.sh--delete--topictest001--bootstrap-serverkafka.kafka:9092

5)Prometheus 监控

Prometheus:

https://prometheus.k8s.local/targets?search=kafka

01089248-3822-11ed-ba43-dac502259ad0.png

可以通过命令查看采集数据

kubectlget--rawhttp://10.244.2.165:9308/metrics

Grafana:https://grafana.k8s.local/
账号:admin,密码通过下面命令获取

kubectlgetsecret--namespacegrafanagrafana-ojsonpath="{.data.admin-password}"|base64--decode;echo

导入 grafana 模板,集群资源监控:11962
官方模块下载地址:

https://grafana.com/grafana/dashboards/

6)卸载

helmuninstallkafka-nkafka

kubectldeletepod-nkafka`kubectlgetpod-nkafka|awk'NR>1{print$1}'`--force
kubectlpatchnskafka-p'{"metadata":{"finalizers":null}}'
kubectldeletenskafka--force

zookeeper + kafka on k8s 环境部署 就先到这里了,小伙伴有任何疑问,欢迎给我留言!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3594

    浏览量

    63419
  • kafka
    +关注

    关注

    0

    文章

    49

    浏览量

    5164
  • zookeeper
    +关注

    关注

    0

    文章

    32

    浏览量

    3623

原文标题:14 张图详解 Zookeeper + Kafka on K8S 环境部署

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    摘要: 今天,日志服务再次升级Kubernetes(k8s)的日志解决方案。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。点此
    发表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    摘要: 今天,日志服务再次升级Kubernetes(k8s)的日志解决方案。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。点此
    发表于 02-28 12:50

    基于kafkazookeeper高可用集群的shell脚本使用步骤

    kafka+zookeeper高可用集群搭建shell脚本使用教程
    发表于 03-11 16:50

    K8S容器编排的互通测试

    K8S容器编排之NetWorkPolicy官方实例
    发表于 06-06 11:28

    k8s核心原理学习指南3

    k8s学习3 - 核心原理
    发表于 09-25 16:37

    K8s 从懵圈到熟练 – 集群网络详解

    导读:阿里云 K8S 集群网络目前有两种方案:一种是 flannel 方案;另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似
    发表于 10-14 15:06

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    还是存在的,下次 pod 使用的时候,就可以直接通过 PVC 去复用。K8s 中的 StatefulSet 管理的 Pod 带存储的迁移就是通过这种方式。三、操作演示接下来,我会在实际的环境中给大家
    发表于 10-15 14:55

    从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度

    等动作,如进行环境的复制、数据开发等功能时,都可以通过存储快照来满足需求,而 K8s 中通过 CSI Snapshotter controller 来实现存储快照的功能。存储快照用户接口
    发表于 10-15 15:07

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    用的是阿里云的 NAS 文件存储;动态 Provisioning 主要用了阿里云的云盘。它们需要相应存储插件,插件我已经提前部署在我的 K8s 集群中了(csi-nasplugin 是为了在 K8s 中使
    发表于 10-16 10:10

    k8s volume中的本地存储和网络存储

    八 、 k8s volume 本地存储和网络存储
    发表于 03-25 08:44

    搭建K8s环境平台的步骤

    1 搭建K8s环境平台规划1.1 单master集群1.2 多master集群
    发表于 11-04 06:03

    Kafka集群环境的搭建

    1、环境版本版本:kafka2.11,zookeeper3.4注意:这里zookeeper3.4也是基于集群模式部署。2、解压重命名tar
    发表于 01-05 17:55

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful
    发表于 07-19 13:14 614次阅读

    zookeeperkafka的关系

    KafkaZookeeper是一个用于协调分布式系统的开源软件。它提供了一种分布式的协同服务,可以管理和维护大规模集群中的配置信息、命名服务、分布式锁和分布式队列等。Zookeeper的设计目标是提供一种简单而效率高的分布
    的头像 发表于 12-03 16:39 932次阅读

    zookeeper部署模式

    将详细介绍这些部署模式。 单机模式: 单机模式是最简单的Zookeeper部署模式,适合在开发和测试环境中使用。在此模式下,Zookeeper
    的头像 发表于 12-04 10:41 354次阅读