前言

最近在工作上调研k8s部署kafka集群的方案,顺带调研部署zookeeper方案。以下配置和部署方案都是亲测可用,有问题可以评论或私我解决。

kafka需要依赖zookeeper

kafka的生产者与消费者需要在zookeeper中注册,不然消费者怎么知道生产者是否存活之类的哈哈。废话不多说,直接上干货!

本文用的是statefulset和动态存储部署zookeeper和kafka集群。

部署zookeeper

apiVersion:v1kind:Servicemetadata:name:zk-headlessnamespace:liuleilabels:app:zkspec:ports:- port:2888name:server- port:3888name:leader-electionclusterIP:None #指定无头服务,需要对外暴露自行创建一个serviceselector:app:zk---apiVersion:policy/v1beta1kind:PodDisruptionBudgetmetadata:name:zk-pdbnamespace:liuleispec:selector:matchLabels:app:zkminAvailable:2---apiVersion:apps/v1kind:StatefulSetmetadata:name:zk #指定的zookeeper名称会在kafka.yaml里面用来配置和kafka连接,会创建pod为zk-0,zk-1,zk-2......这里只创建了三个namespace:liuleispec:selector:matchLabels:app:zkserviceName:zk-headlessreplicas:3updateStrategy:type:RollingUpdate # K8s 会将 StatefulSet 管理的 pod 分批次逐步替换掉podManagementPolicy:OrderedReady # 设置为Parallel这样Pod的创建就不必等待,而是会同时创建、同时删除template:metadata:labels:app:zkspec:containers:- name:k8s-zkimage:k8szk:1.0-3.4.10 #需要指定自己的镜像,可去阿里云上下载zookeeper镜像imagePullPolicy:Alwaysresources:requests:memory:"1Gi"cpu:"1000m"limits:memory:"1Gi"cpu:"1000m"ports:- containerPort:2181name:client- containerPort:2888name:server- containerPort:3888name:leader-electioncommand:- sh- -c- "start-zookeeper \--servers=5 \--data_dir=/var/lib/zookeeper/data \--data_log_dir=/var/lib/zookeeper/data/log \--conf_dir=/opt/zookeeper/conf \--client_port=2181 \--election_port=3888 \--server_port=2888 \--tick_time=2000 \--init_limit=10 \--sync_limit=5 \--heap=512M \--max_client_cnxns=60 \--snap_retain_count=3 \--purge_interval=12 \--max_session_timeout=40000 \--min_session_timeout=4000 \--log_level=INFO"- "zkGenConfig.sh && exec zkServer.sh start-foreground"readinessProbe:exec:command:- sh- -c- "zookeeper-ready 2181"initialDelaySeconds:10timeoutSeconds:5livenessProbe:exec:command:- sh- -c- "zookeeper-ready 2181"initialDelaySeconds:10timeoutSeconds:5imagePullPolicy:IfNotPresentvolumeMounts:- name:zookeeper-pvcmountPath:/var/lib/zookeepersecurityContext:runAsUser:1000fsGroup:1000volumeClaimTemplates:- metadata:name:zookeeper-pvclabels:type:statefulspec:accessModes:["ReadWriteMany"]storageClassName:storageclass-default #需要指定你自己的动态存储类名resources:requests:storage:1Gi

验证部署zookeeper

待zookeeper集群创建成功后验证zookeeper集群(注意修改自己的名称空间 -n后面参数):

[root@master1 liulei]# for i in 0 1 2; do kubectl exec zk-$i -n liulei -- hostname; done

zk-0

zk-1

zk-2

[root@master1 liulei]# for i in 0 1 2; do echo "myid zk-$i";kubectl exec zk-$i -nliulei -- cat /var/lib/zookeeper/data/myid; done

myid zk-0

1

myid zk-1

2

myid zk-2

3

[root@master1 liulei]# for i in 0 1 2; do kubectl exec zk-$i -nliulei -- hostname -f; done

zk-0.zk-headless.liulei.svc.cluster.local

zk-1.zk-headless.liulei.svc.cluster.local

zk-2.zk-headless.liulei.svc.cluster.local

部署kafka

apiVersion:v1kind:Servicemetadata:name:kafka-svcnamespace:liuleilabels:app:kafkaspec:ports:- port:9093name:serverclusterIP:None #创建无头服务,如果需要对外暴露端口可自行创建serviceselector:app:kafka---apiVersion:policy/v1beta1kind:PodDisruptionBudgetmetadata:name:kafka-pdbnamespace:liuleispec:selector:matchLabels:app:kafkaminAvailable:2---apiVersion:apps/v1kind:StatefulSetmetadata:name:kafkanamespace:liuleispec:selector:matchLabels:app:kafkaserviceName:kafka-svcreplicas:3template:metadata:labels:app:kafkaspec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key:"app"operator:Invalues:- kafkatopologyKey:"kubernetes.io/hostname"podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight:1podAffinityTerm:labelSelector:matchExpressions:- key:"app"operator:Invalues:- zktopologyKey:"kubernetes.io/hostname"terminationGracePeriodSeconds:300containers:- name:k8skafkaimagePullPolicy:Alwaysimage:registry.cn-hangzhou.aliyuncs.com/ccgg/k8skafka:v1 #可自行去阿里云拉去对应镜像resources:requests:memory:"1Gi"cpu:"1000m"limits:memory:"1Gi"cpu:"1000m"ports:- containerPort:9093name:servercommand:- sh- -c- "exec kafka-server-start.sh /opt/kafka/config/server.properties --override broker.id=${HOSTNAME##*-} \--override listeners=PLAINTEXT://:9093 \--override zookeeper.connect=zk-0.zk-headless.liulei.svc.cluster.local:2181,zk-1.zk-headless.liulei.svc.cluster.local:2181,zk-2.zk-headless.liulei.svc.cluster.local:2181 \ #这里配置了与zookeeper进行连接,非常重要。格式为:pod名.zookeeper的service名.名称空间.svc.cluster.local:2181--override log.dir=/var/lib/kafka "env:- name:KAFKA_HEAP_OPTSvalue:"-Xmx512M -Xms512M"- name:KAFKA_OPTSvalue:"-Dlogging.level=INFO"volumeMounts:- name:kafka-datamountPath:/var/lib/kafkareadinessProbe:exec:command:- sh- -c- "/opt/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server=localhost:9093"securityContext:runAsUser:1000fsGroup:1000volumeClaimTemplates:- metadata:name:kafka-dataspec:accessModes:["ReadWriteMany"]storageClassName:storageclass-default #需指定自己的动态存储类名resources:requests:storage:1Gi

部署成功后查看pod情况:

验证kafka是否可用:

1、进入kafka-0命令: kubectl exec -it kafka-0 -nliulei bash

进入容器目录:cd /opt/kafka/config

2、创建一个名为aaa的topc命令:kafka-topics.sh --create --topic aaa --zookeeper zk-0.zk-headless.liulei.svc.cluster.local:2181,zk-1.zk-headless.liulei.svc.cluster.local:2181,zk-2.zk-headless.liulei.svc.cluster.local:2181 --partitions 3 --replication-factor 2

结果为:

Created topic “aaa”.

3、进入topic为aaa的生产者消息中心:kafka-console-consumer.sh --topic aaa --bootstrap-server localhost:9093

4、复制新的会话,进入另一个容器kafka-1:kubectl exec -it kafka-1 -nliulei bash

进入消费者,输入命令:kafka-console-producer.sh --topic aaa --broker-list localhost:9093

输入:

hello

i lovle you

回车后,可在生产者消息中心看到消息

总结

以上步骤和内容都是我一个一个坑踩过来的,亲测可用,如果本文对你有帮助的话可以给我点个赞支持一下吗,比心❤。

欢迎访问我的博客,里面或许会有你感兴趣的文章哦leige24的博客_CSDN博客-K8S,Java,WSO2领域博主​blog.csdn.net

k8s kafka集群 连接不上_k8s利用statefulset部署kafka集群(依赖zookeeper)相关推荐

  1. 思腾合力-SCM集群 通过ssh上传大内存数据集至集群文件系统内

    相关链接: 思腾合力-SCM集群 上传镜像步骤 思腾合力-SCM集群 下载镜像步骤 思腾合力-SCM集群 通过ssh上传大内存数据集至集群文件系统内 思腾合力-SCM集群 通过ssh下载大内存数据集至 ...

  2. 如何在群晖NAS上安装cpolar内网穿透(群晖7.X版)

    系列文章 如何在群晖NAS上安装cpolar内网穿透(群晖7.X版) 内网穿透远程群晖NAS--上篇(7.X版) 内网穿透远程群晖NAS--下篇(7.X版) 将群晖NAS搭建的网站发布上线[内网穿透] ...

  3. k8s kafka集群 连接不上_图解 K8s 核心概念和术语

    我第一次接触容器编排调度工具是 Docker 自家的 Docker Swarm,主要解决当时公司内部业务项目部署繁琐的问题,我记得当时项目实现容器化之后,花在项目部署运维的时间大大减少了,当时觉得这玩 ...

  4. k8s使用StatefulSet部署MongoDB集群

    1.1 前提准备 制作MongoDB 镜像,可从 Docker Hub 官网 下载镜像,目的是解决提示权限mongo-sidecar提示权限错误问题(官方镜像基础上添加了密码认证) 生成 keyfil ...

  5. kafka Linux 下启动服务 测试,Linux下安装部署Kafka分布式集群与测试

    注意:部署Kafka之前先部署环境Java.Zookeeper 准备三台CentOS_6.5_x64服务器,分别是: IP: 192.168.0.249dbTest249 Kafka IP: 192. ...

  6. k8s springboot 文件_30分钟无痛上云——springboot项目部署到kubernetes

    最近学习kubernetes,看书千言,不如一行.还是直接上手把一个项目迁移过去操作一下感觉深刻一点.废话少说,言归正传. 一.环境准备 操作系统版本 mac Mojove 10.14.5.docke ...

  7. 从零开始,在阿里云,腾讯云centos8系统上,利用docker部署asp.net core项目的一次实践,总结

    第一部分:注意事项,前言 注意点:建议选择centos8系统,安装docker建议安装最新,详细见下文,非常重要 注意点:建议选择centos8系统,安装docker建议安装最新,详细见下文,非常重要 ...

  8. 在K8s上部署Redis 集群

    一.前言 架构原理:每个Master都可以拥有多个Slave.当Master下线后,Redis集群会从多个Slave中选举出一个新的Master作为替代,而旧Master重新上线后变成新Master的 ...

  9. 使用Rancher的RKE快速部署Kubernetes集群

    简要说明: 本文共涉及3台Ubuntu机器,1台RKE部署机器(192.168.3.161),2台Kubernetes集群机器(3.162和3.163). 先在Windows机器上,将rke_linu ...

  10. 技术分享 | InnoDB Cluster+GreatSQL快速部署MGR集群,并实现读写分离和故障自动转移(超详细)...

    本文来源:原创投稿 * GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 0. 内容提纲 1. 部署环境及初始化 2. 利用MySQL Shell构建MGR集群 3. 对在 ...

最新文章

  1. 一文概览主要语义分割网络:FCN,SegNet,U-Net...
  2. Docker(十五):Docker实战 使用 docker-compose
  3. 怎么添加项目到SVN上面
  4. VTK:网格之QuadricClustering
  5. matlab graphic,Matlab图形系统,Matlab Graphic System,音标,读音,翻译,英文例句,英语词典...
  6. 2016 7 25 链表
  7. c语言用字符串统计一个整数中数字的个数_全国计算机等级考试二级C语言
  8. time_t 和 struct tm 及时间戳的正确用法
  9. JAVA IO - RandomAccessFile
  10. oracle 审计变换表空间_Oracle 审计表AUD$迁移表空间及创建清理job
  11. Cesium:本地node运行cesium报错Must use import to load ES Module
  12. POJ2806 Square
  13. python脚本转换为EXE文件
  14. peer之间的通信协议
  15. Sketch及其相关插件介绍
  16. 跟着团子学SAP DMS—在SAP中通过DMS上传文档基本操作(CV01N/CV02N/CV03N/CV04N)
  17. 控制器分析-绘制伯德图
  18. 执行xpath时提示,需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数
  19. 前端、框架和其他(155题)
  20. OAuth2.0,CodeChallenge的生成问题

热门文章

  1. MySQL 之 query cache
  2. SpringBoot+zk+dubbo架构实践(二):SpringBoot 集成 zookeeper
  3. 关于支付宝授权登录获取用户信息
  4. python运维脚本面试_参加Linux运维面试时经常会被问到的shell脚本问题有哪些?
  5. if(){}else{}层数太多,提出来另写一个方法
  6. JAVA加载一个目录下有依赖关系本地库的通用代码
  7. 六石管理学:到了一定境界,确实可以随心所欲
  8. error LNK2005: 已经在 app_launcher.obj 中定义
  9. 编码基本功:以文件大小进行性能测试是错误的
  10. cmake编译时不能指定头文件路径?