【云原生】zookeeper + kafka on k8s 环境部署

news/2024/5/1 15:30:12/文章来源:https://blog.csdn.net/qq_35745940/article/details/126919918

文章目录

    • 一、概述
    • 二、Zookeeper on k8s 部署
      • 1)添加源
      • 2)修改配置
      • 3)开始安装
      • 4)测试验证
      • 5)Prometheus监控
      • 6)卸载
    • 三、Kafka on k8s 部署
      • 1)添加源
      • 2)修改配置
      • 3)开始安装
      • 4)测试验证
        • 1、创建Topic(一个副本一个分区)
        • 2、查看Topic列表
        • 3、生产者/消费者测试
        • 4、查看数据积压
        • 5、删除topic
      • 5)Prometheus监控
      • 6)卸载

一、概述

  • Apache ZooKeeper 是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务,ZooKeeper 致力于开发和维护一个开源服务器,以实现高度可靠的分布式协调,其实也可以认为就是一个分布式数据库,只是结构比较特殊,是树状结构。官网文档:https://zookeeper.apache.org/doc/r3.8.0/
    ,关于Zookeeper的介绍,也可以参考我之前的文章:分布式开源协调服务——Zookeeper

-

  • Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统。官方文档:https://kafka.apache.org/documentation/关于Kafka的介绍,也可以参考我之前的文章:Kafka原理介绍+安装+基本操作

在这里插入图片描述

二、Zookeeper on k8s 部署

在这里插入图片描述

1)添加源

部署包地址:https://artifacthub.io/packages/helm/zookeeper/zookeeper

helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull bitnami/zookeeper
tar -xf  zookeeper-10.2.1.tgz

2)修改配置

  • 修改zookeeper/values.yaml
image:registry: myharbor.comrepository: bigdata/zookeepertag: 3.8.0-debian-11-r36
...replicaCount: 3...service:type: NodePortnodePorts:#NodePort 默认范围是 30000-32767client: "32181"tls: "32182"...persistence:storageClass: "zookeeper-local-storage"size: "10Gi"# 目录需要提前在宿主机上创建local:- name: zookeeper-0host: "local-168-182-110"path: "/opt/bigdata/servers/zookeeper/data/data1"- name: zookeeper-1host: "local-168-182-111"path: "/opt/bigdata/servers/zookeeper/data/data1"- name: zookeeper-2host: "local-168-182-112"path: "/opt/bigdata/servers/zookeeper/data/data1"...# Enable Prometheus to access ZooKeeper metrics endpoint
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:- ReadWriteOncelocal:path: {{ .path }}nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- {{ .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)开始安装

# 先准备好镜像
docker pull docker.io/bitnami/zookeeper:3.8.0-debian-11-r36
docker tag docker.io/bitnami/zookeeper:3.8.0-debian-11-r36 myharbor.com/bigdata/zookeeper:3.8.0-debian-11-r36
docker push myharbor.com/bigdata/zookeeper:3.8.0-debian-11-r36# 开始安装
helm install zookeeper ./zookeeper -n zookeeper --create-namespace

NOTES

NAME: zookeeper
LAST DEPLOYED: Sun Sep 18 18:24:03 2022
NAMESPACE: zookeeper
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: zookeeper
CHART VERSION: 10.2.1
APP VERSION: 3.8.0** Please be patient while the chart is being deployed **ZooKeeper can be accessed via port 2181 on the following DNS name from within your cluster:zookeeper.zookeeper.svc.cluster.localTo connect to your ZooKeeper server run the following commands:export POD_NAME=$(kubectl get pods --namespace zookeeper -l "app.kubernetes.io/name=zookeeper,app.kubernetes.io/instance=zookeeper,app.kubernetes.io/component=zookeeper" -o jsonpath="{.items[0].metadata.name}")kubectl exec -it $POD_NAME -- zkCli.shTo connect to your ZooKeeper server from outside the cluster execute the following commands:export NODE_IP=$(kubectl get nodes --namespace zookeeper -o jsonpath="{.items[0].status.addresses[0].address}")export NODE_PORT=$(kubectl get --namespace zookeeper -o jsonpath="{.spec.ports[0].nodePort}" services zookeeper)zkCli.sh $NODE_IP:$NODE_PORT

在这里插入图片描述
查看pod状态

kubectl get pods,svc -n zookeeper -owide

在这里插入图片描述

4)测试验证

# 登录zookeeper pod
kubectl exec -it zookeeper-0 -n zookeeper -- zkServer.sh status
kubectl exec -it zookeeper-1 -n zookeeper -- zkServer.sh status
kubectl exec -it zookeeper-2 -n zookeeper -- zkServer.sh statuskubectl exec -it zookeeper-0 -n zookeeper -- bash

在这里插入图片描述

5)Prometheus监控

Prometheus:https://prometheus.k8s.local/targets?search=zookeeper
在这里插入图片描述

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

kubectl get --raw http://10.244.0.52:9141/metrics
kubectl get --raw http://10.244.1.101:9141/metrics
kubectl get --raw http://10.244.2.137:9141/metrics

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

kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

导入grafana模板,集群资源监控:10465
官方模块下载地址:https://grafana.com/grafana/dashboards/
在这里插入图片描述

6)卸载

helm uninstall zookeeper -n zookeeperkubectl delete pod -n zookeeper `kubectl get pod -n zookeeper|awk 'NR>1{print $1}'` --force
kubectl patch ns zookeeper -p '{"metadata":{"finalizers":null}}'
kubectl delete ns zookeeper --force

三、Kafka on k8s 部署

1)添加源

部署包地址:https://artifacthub.io/packages/helm/bitnami/kafka

helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull bitnami/kafka
tar -xf kafka-18.4.2.tgz

2)修改配置

  • 修改kafka/values.yaml
image:registry: myharbor.comrepository: bigdata/kafkatag: 3.2.1-debian-11-r16...replicaCount: 3...service:type: NodePortnodePorts:client: "30092"external: "30094"...externalAccessenabled: trueservice:type: NodePortnodePorts:- 30001- 30002- 30003useHostIPs: true...persistence:storageClass: "kafka-local-storage"size: "10Gi"# 目录需要提前在宿主机上创建local:- name: kafka-0host: "local-168-182-110"path: "/opt/bigdata/servers/kafka/data/data1"- name: kafka-1host: "local-168-182-111"path: "/opt/bigdata/servers/kafka/data/data1"- name: kafka-2host: "local-168-182-112"path: "/opt/bigdata/servers/kafka/data/data1"...metrics:kafka:enabled: trueimage:registry: myharbor.comrepository: bigdata/kafka-exportertag: 1.6.0-debian-11-r8jmx:enabled: trueimage:registry: myharbor.comrepository: bigdata/jmx-exportertag: 0.17.1-debian-11-r1annotations:prometheus.io/path: "/metrics"...zookeeper:enabled: false...externalZookeeperservers:- 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:- ReadWriteOncelocal:path: {{ .path }}nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- {{ .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)开始安装

# 先准备好镜像
docker pull docker.io/bitnami/kafka:3.2.1-debian-11-r16
docker tag docker.io/bitnami/kafka:3.2.1-debian-11-r16 myharbor.com/bigdata/kafka:3.2.1-debian-11-r16
docker push myharbor.com/bigdata/kafka:3.2.1-debian-11-r16# node-export
docker pull docker.io/bitnami/kafka-exporter:1.6.0-debian-11-r8
docker tag docker.io/bitnami/kafka-exporter:1.6.0-debian-11-r8 myharbor.com/bigdata/kafka-exporter:1.6.0-debian-11-r8
docker push myharbor.com/bigdata/kafka-exporter:1.6.0-debian-11-r8# JXM
docker.io/bitnami/jmx-exporter:0.17.1-debian-11-r1
docker tag docker.io/bitnami/jmx-exporter:0.17.1-debian-11-r1 myharbor.com/bigdata/jmx-exporter:0.17.1-debian-11-r1
docker push myharbor.com/bigdata/jmx-exporter:0.17.1-debian-11-r1#开始安装
helm install kafka ./kafka -n kafka --create-namespace

NOTES

NAME: kafka
LAST DEPLOYED: Sun Sep 18 20:57:02 2022
NAMESPACE: kafka
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kafka
CHART VERSION: 18.4.2
APP VERSION: 3.2.1
---------------------------------------------------------------------------------------------WARNINGBy specifying "serviceType=LoadBalancer" and not configuring the authenticationyou have most likely exposed the Kafka service externally without anyauthentication mechanism.For security reasons, we strongly suggest that you switch to "ClusterIP" or"NodePort". As alternative, you can also configure the Kafka authentication.---------------------------------------------------------------------------------------------** Please be patient while the chart is being deployed **Kafka can be accessed by consumers via port 9092 on the following DNS name from within your cluster:kafka.kafka.svc.cluster.localEach Kafka broker can be accessed by producers via port 9092 on the following DNS name(s) from within your cluster:kafka-0.kafka-headless.kafka.svc.cluster.local:9092kafka-1.kafka-headless.kafka.svc.cluster.local:9092kafka-2.kafka-headless.kafka.svc.cluster.local:9092To create a pod that you can use as a Kafka client run the following commands:kubectl run kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.2.1-debian-11-r16 --namespace kafka --command -- sleep infinitykubectl exec --tty -i kafka-client --namespace kafka -- bashPRODUCER:kafka-console-producer.sh \--broker-list 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 \--topic testCONSUMER:kafka-console-consumer.sh \--bootstrap-server kafka.kafka.svc.cluster.local:9092 \--topic test \--from-beginningTo connect to your Kafka server from outside the cluster, follow the instructions below:Kafka brokers domain: You can get the external node IP from the Kafka configuration file with the following commands (Check the EXTERNAL listener)1. Obtain the pod name:kubectl get pods --namespace kafka -l "app.kubernetes.io/name=kafka,app.kubernetes.io/instance=kafka,app.kubernetes.io/component=kafka"2. Obtain pod configuration:kubectl exec -it KAFKA_POD -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listenersKafka brokers port: You will have a different node port for each Kafka broker. You can get the list of configured node ports using the command below:echo "$(kubectl get svc --namespace kafka -l "app.kubernetes.io/name=kafka,app.kubernetes.io/instance=kafka,app.kubernetes.io/component=kafka,pod" -o jsonpath='{.items[*].spec.ports[0].nodePort}' | tr ' ' '\n')"

在这里插入图片描述
查看pod状态

kubectl get pods,svc -n kafka -owide

在这里插入图片描述

4)测试验证

# 登录zookeeper pod
kubectl exec -it kafka-0 -n kafka -- bash

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

--create: 指定创建topic动作--topic:指定新建topic的名称--bootstrap-server: 指定kafka连接地址--config:指定当前topic上有效的参数值,参数列表参考文档为: Topic-level configuration--partitions:指定当前创建的kafka分区数量,默认为1个--replication-factor:指定每个分区的复制因子个数,默认1个
kafka-topics.sh --create --topic test001 --bootstrap-server kafka.kafka:9092 --partitions 1 --replication-factor 1
# 查看
kafka-topics.sh --describe --bootstrap-server kafka.kafka:9092  --topic test001

在这里插入图片描述

2、查看Topic列表

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

3、生产者/消费者测试

【生产者】

kafka-console-producer.sh --broker-list kafka.kafka:9092 --topic test001{"id":"1","name":"n1","age":"20"}
{"id":"2","name":"n2","age":"21"}
{"id":"3","name":"n3","age":"22"}

【消费者】

# 从头开始消费
kafka-console-consumer.sh --bootstrap-server kafka.kafka:9092 --topic test001 --from-beginning
# 指定从分区的某个位置开始消费,这里只指定了一个分区,可以多写几行或者遍历对应的所有分区
kafka-console-consumer.sh --bootstrap-server kafka.kafka:9092 --topic test001 --partition 0 --offset 100 --group test001

4、查看数据积压

kafka-consumer-groups.sh --bootstrap-server kafka.kafka:9092 --describe --group test001

5、删除topic

kafka-topics.sh --delete --topic test001 --bootstrap-server kafka.kafka:9092

5)Prometheus监控

Prometheus:https://prometheus.k8s.local/targets?search=kafka
在这里插入图片描述

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

kubectl get --raw http://10.244.2.165:9308/metrics

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

kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

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

6)卸载

helm uninstall kafka -n kafkakubectl delete pod -n kafka `kubectl get pod -n kafka|awk 'NR>1{print $1}'` --force
kubectl patch ns kafka  -p '{"metadata":{"finalizers":null}}'
kubectl delete ns kafka  --force

zookeeper + kafka on k8s 环境部署 就先到这里了,小伙伴有任何疑问,欢迎给我留言,后续会持续分享【云原生和大数据】相关的问题~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9837.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch线性代数的基本操作

线性代数的基本操作 标量由只有一个元素的张量表示 import torch xtorch.tensor([3.0]) ytorch.tensor([2.0]) xy,x*y,x/y,x**y向量视为标量值的组成 通过张量的索引来访问任一元素 xtorch.arange(4) x,x[3] #张量的长度 len(x) #张量的形状 x.shape对称矩阵 AAT Btorch.ten…

一文看懂线性回归(保姆级别 含源码)

来源: AINLPer 微信公众号(每日论文干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2022- 9 -18 引言 最近作者网上看了很多关于线性回归的帖子,个人感觉比较乱,所以打算自己整理一版,希望能把…

(41)STM32——外部SRAM实验笔记

目录 学习目标 成果展示 硬件知识 特点 功能框图 读时序 ​编辑写时序 FSMC驱动 寄存器 闪存片选控制寄存器 硬件 配置 代码 总结 学习目标 今天我们要学习的是有关外部SRAM实验,其实F4内部也是有一个19&#x…

本周大新闻|索尼PS VR2体验首次公开;Meta Quest Pro开箱视频曝光

本周大新闻,AR方面,沃尔玛App加入AR试穿功能;谷歌搜索AR新增60个行星、卫星模型;Niantic宣布与漫威娱乐合作打造新款LBS AR游戏;AR眼镜ActiveLook打通Apple Watch。 VR方面,索尼PS VR2体验首次公开&#x…

2022年笔试知识总结展望

应届生的笔试知识总结,温故而知新,看看知识加深印象,希望学得更好,有个好结果。 目录 1. TCP的拥塞控制 2. position属性 3. [‘1‘, ‘2‘, ‘3‘].map(parseInt) 输出结果 4. 排序算法的稳定性分析 1)稳定的排…

事件研究法与其应用(2)---Excel实操步骤

我们借着学习事件研究法的应用,可以用Excel和Stata等软件进行操作。 今天这主要是利用EXCEL计算累积异常收益率。 在正式开展实操之前,我们先回顾一下事件研究法的步骤(尤其是我们写作论文的时候): 事件研究法计算步骤: 1. 获取数据,定义事件期 2.计算估计期间个股与市…

npm yarn 报错

目录npm yarn报错yarn: 无法加载文件 npm yarn报错 yarn: 无法加载文件 win10系统,yarn : 无法加载文件 C:\Users\丽丽小可爱\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 ... 导致此错误的原因是,PowerShell 执行策略,默认设置为Rest…

JSON 数据类型转换工具

简介 本文介绍一款数据类型转换工具,可以将JSON格式数据转换成YAML、MYSQL、XML、TOML、JavaScript等数据类型。 背景 在日常的开发工程中,我们经常使用JSON表达数据,但有些时候我们需要使用YAML、JavaScript等语言表达数据。因此&#xf…

HTML + HTTP请求 +CSS知识点

文章目录HTML1.HTML元素2.HTML页面3.常见元素1)文本2)多媒体3)表单作用与语法常见表单项案例体验4.HTTP请求1)请求组成2) 请求方式与数据格式get 请求示例post 请求(默认格式)示例json 请求&…

Python必知必会 os 模块详解

文章目录Python os 模块os模块的常用操作os.path模块os.open()模块Python os 模块 os是“operating system”的缩写,os模块提供各种 Python 程序与操作系统进行交互的接口,使用os模块,一方面可以方便地与操作系统进行交互,另一方…

【SLAM】4李群李代数

文章目录4.1.基础群李代数的引出李代数李代数so(3)\mathfrak{so}(3)so(3)李代数se(3)\mathfrak{se}(3)se(3)4.2.指数与对数映射4.2.1.SO(3)SO(3)SO(3)指数映射4.2.2.SE(3)SE(3)SE(3)的指数映射4.3.李代数求导与扰动模型4.3.1.BCH公式&近似形式4.3.2.李代数求导4.3.4.扰动模…

redis下载与安装(Linux环境下)

用的是阿里云的深度os Linux系统 一,下载 键入命令: wget http://download.redis.io/releases/redis-6.2.1.tar.gz 检查时候有gcc环境 gcc --version 若有gcc环境会有类似于下图的提示 没有则执行: yum install gcc 下载完毕之后&…

JavaEE基础知识

文章目录前言计算机的基本组成CPUCPU运行程序的过程CPU的构造操作系统操作系统功能常见的操作系统操作系统的具体组成操作系统的进程管理(重点)操作系统安排程序进程PCB(进程管理块)进程调度关于进程的几个属性虚拟地址空间线程(thread [θred] )前言 之前已经学过很多的知识,…

企业薪资系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):

PostgreSQL - 基于pg_basebackup实现主从流复制

PostgreSQL - 基于pg_basebackup实现主从流复制1 数据库节点2 安装PostgreSQL2.1 创建postgres用户2.2 安装PostgreSQL3 配置主节点4 配置从节点5 验证主从同步1 数据库节点 节点ip节点角色192.168.163.133主节点192.168.163.134从节点 2 安装PostgreSQL 2.1 创建postgres用户…

计算机网络——数据链路层(滑动窗口协议: 选择重传)(点对点协议 PPP)

目录 滑动窗口协议: 选择重传 选择重传协议 选择重传协议 点对点协议 PPP PPP 的主要特点 PPP 协议有三个组成部分 PPP 协议的帧格式 PPP 有一个 2 个字节的协议字段 透明传输问题 PPP 的字符填充 PPP 的工作状态 滑动窗口协议: 选择重传 选择重传协议 GBN相对简单&a…

【周末闲谈】谈谈数学转码这一年来的体会与反思

——我们走了太远,以至于忘了为何出发 前言 笔者本科读的是数学专业,就是每天和数学分析、高等代数、概率论、随机过程等等这些理论打交道的专业,这个专业出来工作好像一般有两个方向就是金融和计算机,我选择了计算机方向。主要…

2022 第五届 浙江省大学生网络与信息安全竞赛技能赛 预赛 Writeup,5题

文章目录1、Web:nisc_easyweb2、Web:nisc_学校门户网站3、Web:吃豆人吃豆魂4、MISC:好怪哦5、RE:ManyCheck1、Web:nisc_easyweb 题目描述: 打开网站,是一个php的初始页面。 思路…

springboot+微信小程序的点餐系统(开题报告+论文+答辩PPT+源码)

技术架构 SprongBootMysql微信小程序 简介 本点餐小程序是使用Java/JavaScript编程语言开发的,存储数据方面则用到了MySQL数据库。顾客可以使用小程序扫码功能扫描餐厅桌角的二维码就座,也可以点击排号等位由后台工作人员安排就座;通过首页…

通关GO语言10 Context:你必须掌握的多线程并发控制神器

在上一节课中我留了一个作业,也就是让你自己练习使用 sync.Map,相信你已经做出来了。现在我为你讲解 sync.Map 的方法。 Store:存储一对 key-value 值。 Load:根据 key 获取对应的 value 值,并且可以判断 key 是否存在…