云原生」 在k8s中部署zookeeper + kafka
我们在这篇文章主要介绍,在 k8s 上通过 helm3 安装 Zookeeper 和 Kafka。

文章概要
一 前期准备工作
1.1 在master节点创建NFS共享目录
#在master创建共享目录
[bigdata@k8s-master ~]$ sudo mkdir -p /data/{zookeeper,kafka}
# 在master执行授权
[bigdata@k8s-master ~]$ sudo chown -R 755 /data/{zookeeper,kafka}
# 修改配置文件
[bigdata@k8s-master ~]$ sudo vi /etc/exports
/data/zookeeper *(rw,sync,no_root_squash)
/data/kafka *(rw,sync,no_root_squash)
# 使配置生效
[bigdata@k8s-master ~]$ sudo exportfs -r
# 检查配置是否生效
[bigdata@k8s-master ~]$ sudo exportfs

sudo exportfs
1.2 在所有的node节点挂载共享目录
在所有的客户端节点挂载NFS目录
[bigdata@k8s-node1 ~]$ sudo mkdir -p /data/{zookeeper,kafka}
[bigdata@k8s-node1 ~]$ sudo mount -t nfs k8s-master:/data/zookeeper /data/zookeeper
[bigdata@k8s-node1 ~]$ sudo mount -t nfs k8s-master:/data/kafka /data/kafka
# 验证是否挂载成功
[bigdata@k8s-node1 ~]$ df -h

挂载NFS目录
配置开机自动挂载
[bigdata@k8s-node1 ~]$ sudo vi /etc/fstab

开机自动挂载
1.3 创建zookeeper的持久化存储
1.3.1 准备zookeeper-nfs-storage.yaml文件
创建用作zookeeper集群的持久化存储(zookeeper-nfs-storage),并将其放到/opt/module/zookeeper目录,不存在需创建。







1.3.2 创建zookeeper的SC存储
[bigdata@k8s-master module]$ pwd
/opt/module
[bigdata@k8s-master module]$ mkdir zookeeper
[bigdata@k8s-master module]$ cd zookeeper
[bigdata@k8s-master zookeeper]$ kubectl create namespace zookeeper
[bigdata@k8s-master zookeeper]$ kubectl apply -f zookeeper-nfs-storage.yaml
[bigdata@k8s-master zookeeper]$ kubectl get sc -n zookeeper
[bigdata@k8s-master zookeeper]$ kubectl describe sc zookeeper-nfs-storage -n zookeeper

zookeeper的SC存储
1.4 创建kafka的持久化存储
1.4.1 准备kafka-nfs-storage.yaml文件
创建用作kafka集群的持久化存储(kafka-nfs-storage),并将其放到/opt/module/kafka目录,不存在需创建。
image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2 阿里云地址






1.4.2 创建Kafka的SC存储
[bigdata@k8s-master zookeeper]$ cd ..
[bigdata@k8s-master module]$ mkdir kafka
[bigdata@k8s-master module]$ cd kafka/
[bigdata@k8s-master kafka]$ touch kafka-nfs-storage.yaml
[bigdata@k8s-master kafka]$ kubectl create namespace kafka
[bigdata@k8s-master kafka]$ kubectl apply -f kafka-nfs-storage.yaml
[bigdata@k8s-master kafka]$ kubectl get sc -n kafka
[bigdata@k8s-master kafka]$ kubectl describe sc kafka-nfs-storage -n kafka

zookeeper的SC存储
二 zookeeper on k8s 部署
2.1 选择Zookeeper的仓库地址
如何使用 helm 安装Zookeeper,helm 必须要知道从哪些仓库可以下载Zookeeper,有一个非常实用的网站https://artifacthub.io/,可以帮我们选择使用哪个仓库。选择stars数量最多的镜像源 bitnami/zookeeper。

artifacthub.io
既然选好了镜像源,需要将镜像源添加到本地。
2.1.1 添加镜像源
add bitnami https://charts.bitnami.com/bitnami
[ ]$ helm repo
2.1.2 如何选择Zookeeper版本
在大数据领域,通常都是优先选择稳定的版本,不追求最新版本。可以登录到zookeeper.apache.org网站上查看,目前zookeeper3.7.1是最新稳定版本。

zookeeper3.7.1
可以通过下面的命令,查找zookeeper版本,左侧是Chart版本,右侧是Zookeeper版本;只能根据Chart版本安装Zookeeper。
[bigdata@k8s-master zookeeper]$ helm search repo bitnami/zookeeper -l

zookeeper3.7.1
2.1.3 下载Zookeeper3.7
通过查询,发现zookeeper3.7.x系列最大的Chart version是8.1.2,因此,我们选择下载version8.1.2
# 下载
[bigdata@k8s-master zookeeper]$ helm pull bitnami/zookeeper --version 8.1.2
# 解压
[bigdata@k8s-master zookeeper]$ tar -zxvf zookeeper-8.1.2.tgz
2.2 修改配置信息
主要是修改values.yaml文件,values.yaml文件内容比较多,我只列出需要修改的部分。

2.3 下载zookeeper
每个大公司都有自己的harbor仓库,存储镜像源。我们先pull一份
zookeeper:3.7.0-debian-10-r320镜像,然后push到本地harbor中。
这样做的好处是,① 可以在本地建立镜像版本库;② 通常公司的集群不能访问外网,可以直接从私有的harbor中下载镜像;③ 外网不稳定,有些镜像在国外,下载不到。
[bigdata@k8s-master zookeeper]$ sudo docker pull docker.io/bitnami/zookeeper:3.7.0-debian-10-r320
[bigdata@k8s-master zookeeper]$ sudo docker tag docker.io/bitnami/zookeeper:3.7.0-debian-10-r320 192.168.220.101:30002/bigdata/zookeeper:3.7.0-debian-10-r320
# 上传到本地Harbor
[bigdata@k8s-master zookeeper]$ sudo docker push 192.168.220.101:30002/bigdata/zookeeper:3.7.0-debian-10-r320


2.4 安装Zookeeper
[bigdata@k8s-master zookeeper]$ helm install zookeeper ./zookeeper -n zookeeper

查看 pod 状态
[get pod -n zookeeper -o wide
]$ kubectl

2.5 验证zookeeper是否安装成功
[bigdata@k8s-master zookeeper]$ kubectl exec -it zookeeper-0 -n zookeeper -- zkServer.sh status
[bigdata@k8s-master zookeeper]$ kubectl exec -it zookeeper-1 -n zookeeper -- zkServer.sh status
[bigdata@k8s-master zookeeper]$ kubectl exec -it zookeeper-2 -n zookeeper -- zkServer.sh status

验证zookeeper是否安装成功
三 kafka on k8s 部署
3.1 选择Kafka的仓库地址
如何使用 helm 安装Kafka,helm 必须要知道从哪些仓库可以下载Kafka,有一个非常实用的网站https://artifacthub.io/,可以帮我们选择使用哪个仓库。选择stars数量最多的镜像源 bitnami/Kafka。

artifacthub.io
既然选好了镜像源,需要将镜像源添加到本地。
3.1.1 添加镜像源
add bitnami https://charts.bitnami.com/bitnami
[ ]$ helm repo
3.1.2 如何选择Kafka版本
在大数据领域,通常都是优先选择稳定的版本,不追求最新版本。可以登录到kafka.apache.org网站上查看,目前kafka3.2.3是最新稳定版本。
可以通过下面的命令,查找Kafka版本,左侧是Chart版本,右侧是Kafka版本;只能根据Chart版本安装Kafka。
[bigdata@k8s-master kafka]$ helm search repo bitnami/kafka -l

bitnami/kafka
3.1.3 下载Kafka3.2.3
通过查询,发现Kafka3.2.3系列最大的Chart version是18.5.0,因此,我们选择下载version18.5.0
# 下载
[bigdata@k8s-master kafka]$ helm pull bitnami/kafka --version 18.5.0
# 解压
[bigdata@k8s-master kafka]$ tar -zxvf kafka-18.5.0.tgz
3.2 修改配置信息
主要是修改values.yaml文件,values.yaml文件内容比较多,我只列出需要修改的部分。


3.3 下载Kafka
每个大公司都有自己的harbor仓库,存储镜像源。我们先pull一份kafka:3.2.3-debian-11-r1镜像,然后push到本地harbor中。
[bigdata@k8s-master kafka]$ sudo docker pull docker.io/bitnami/kafka:3.2.3-debian-11-r1
[bigdata@k8s-master kafka]$ sudo docker tag docker.io/bitnami/kafka:3.2.3-debian-11-r1 192.168.220.102:30002/bigdata/kafka:3.2.3-debian-11-r1
# 上传到本地Harbo
r[bigdata@k8s-master kafka]$ sudo docker push 192.168.220.102:30002/bigdata/kafka:3.2.3-debian-11-r1
3.4 安装Kafka
[bigdata@k8s-master kafka]$ helm install kafka ./kafka -n kafka

安装Kafka
查看 pod 状态
[get pod -n kafka -o wide
]$ kubectl

查看 pod 状态
3.5 测试验证Kafka
# 切入k8s内部的kafka[bigdata@k8s-master kafka]$ kubectl exec -it kafka-0 -n kafka -- bash

验证Kafka
# 创建topic
I have no name!@kafka-0:/$ kafka-topics.sh --create --topic demo --bootstrap-server kafka.kafka:9092 --partitions 1 --replication-factor 1Created topic demo
.# 查看topic
I have no name!@kafka-0:/$ kafka-topics.sh --list --bootstrap-server kafka.kafka:9092demo
# 生产数据
I have no name!@kafka-0:/$ kafka-console-producer.sh --broker-list kafka.kafka:9092 --topic demo
>hello, kafka
>hello, zookeeper
>hello, k8s
>

验证Kafka
# 从最开始处消费数据[bigdata@k8s-master kafka]$ kubectl exec -it kafka-0 -n kafka -- bash
I have no name!@kafka-0:/$ kafka-console-consumer.sh --bootstrap-server kafka.kafka:9092 --topic demo --from-beginning
hello, kafka
hello, zookeeper
hello, k8s

消费kafka中的数据