云原生」 在k8s中部署zookeeper + kafka
我們在這篇文章主要介紹,在 k8s 上通過 helm3 安裝 Zookeeper 和 Kafka。

文章概要
一 前期準(zhǔn)備工作
1.1 在master節(jié)點(diǎn)創(chuàng)建NFS共享目錄
#在master創(chuàng)建共享目錄
[bigdata@k8s-master ~]$ sudo mkdir -p /data/{zookeeper,kafka}
# 在master執(zhí)行授權(quán)
[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節(jié)點(diǎn)掛載共享目錄
在所有的客戶端節(jié)點(diǎn)掛載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?
# 驗(yàn)證是否掛載成功
?[bigdata@k8s-node1 ~]$ df -h

掛載NFS目錄
配置開機(jī)自動(dòng)掛載
[bigdata@k8s-node1 ~]$ sudo vi /etc/fstab

開機(jī)自動(dòng)掛載
1.3 創(chuàng)建zookeeper的持久化存儲(chǔ)
1.3.1 準(zhǔn)備zookeeper-nfs-storage.yaml文件
創(chuàng)建用作zookeeper集群的持久化存儲(chǔ)(zookeeper-nfs-storage),并將其放到/opt/module/zookeeper目錄,不存在需創(chuàng)建。







1.3.2 創(chuàng)建zookeeper的SC存儲(chǔ)
[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存儲(chǔ)
1.4 創(chuàng)建kafka的持久化存儲(chǔ)
1.4.1 準(zhǔn)備kafka-nfs-storage.yaml文件
創(chuàng)建用作kafka集群的持久化存儲(chǔ)(kafka-nfs-storage),并將其放到/opt/module/kafka目錄,不存在需創(chuàng)建。
?image:?registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2? 阿里云地址






1.4.2 創(chuàng)建Kafka的SC存儲(chǔ)
[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存儲(chǔ)
二 zookeeper on k8s 部署
2.1 選擇Zookeeper的倉庫地址
如何使用 helm 安裝Zookeeper,helm 必須要知道從哪些倉庫可以下載Zookeeper,有一個(gè)非常實(shí)用的網(wǎng)站https://artifacthub.io/,可以幫我們選擇使用哪個(gè)倉庫。選擇stars數(shù)量最多的鏡像源 bitnami/zookeeper。

artifacthub.io
既然選好了鏡像源,需要將鏡像源添加到本地。
2.1.1 添加鏡像源
add bitnami https://charts.bitnami.com/bitnami
[ ]$ helm repo
2.1.2 如何選擇Zookeeper版本
在大數(shù)據(jù)領(lǐng)域,通常都是優(yōu)先選擇穩(wěn)定的版本,不追求最新版本。可以登錄到zookeeper.apache.org網(wǎng)站上查看,目前zookeeper3.7.1是最新穩(wěn)定版本。

zookeeper3.7.1
可以通過下面的命令,查找zookeeper版本,左側(cè)是Chart版本,右側(cè)是Zookeeper版本;只能根據(jù)Chart版本安裝Zookeeper。
[bigdata@k8s-master zookeeper]$ helm search repo bitnami/zookeeper -l

zookeeper3.7.1
2.1.3 下載Zookeeper3.7
通過查詢,發(fā)現(xiàn)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文件內(nèi)容比較多,我只列出需要修改的部分。

2.3 下載zookeeper
每個(gè)大公司都有自己的harbor倉庫,存儲(chǔ)鏡像源。我們先pull一份
zookeeper:3.7.0-debian-10-r320鏡像,然后push到本地harbor中。
這樣做的好處是,① 可以在本地建立鏡像版本庫;② 通常公司的集群不能訪問外網(wǎng),可以直接從私有的harbor中下載鏡像;③ 外網(wǎng)不穩(wěn)定,有些鏡像在國外,下載不到。
[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 狀態(tài)
[get pod -n zookeeper -o wide
]$ ?kubectl

2.5 驗(yàn)證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

驗(yàn)證zookeeper是否安裝成功
三 kafka on k8s 部署
3.1 選擇Kafka的倉庫地址
如何使用 helm 安裝Kafka,helm 必須要知道從哪些倉庫可以下載Kafka,有一個(gè)非常實(shí)用的網(wǎng)站https://artifacthub.io/,可以幫我們選擇使用哪個(gè)倉庫。選擇stars數(shù)量最多的鏡像源 bitnami/Kafka。

artifacthub.io
既然選好了鏡像源,需要將鏡像源添加到本地。
3.1.1 添加鏡像源
add bitnami https://charts.bitnami.com/bitnami
[ ]$ helm repo
3.1.2 如何選擇Kafka版本
在大數(shù)據(jù)領(lǐng)域,通常都是優(yōu)先選擇穩(wěn)定的版本,不追求最新版本??梢缘卿浀絢afka.apache.org網(wǎng)站上查看,目前kafka3.2.3是最新穩(wěn)定版本。
可以通過下面的命令,查找Kafka版本,左側(cè)是Chart版本,右側(cè)是Kafka版本;只能根據(jù)Chart版本安裝Kafka。
[bigdata@k8s-master kafka]$ helm search repo bitnami/kafka -l

bitnami/kafka
3.1.3 下載Kafka3.2.3
通過查詢,發(fā)現(xiàn)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文件內(nèi)容比較多,我只列出需要修改的部分。


3.3 下載Kafka
每個(gè)大公司都有自己的harbor倉庫,存儲(chǔ)鏡像源。我們先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 狀態(tài)
[get pod -n kafka -o wide
]$ kubectl

查看 pod 狀態(tài)
3.5 測試驗(yàn)證Kafka
# 切入k8s內(nèi)部的kafka[bigdata@k8s-master kafka]$ kubectl exec -it kafka-0 -n kafka -- bash

驗(yàn)證Kafka
# 創(chuàng)建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
# 生產(chǎn)數(shù)據(jù)
I have no name!@kafka-0:/$ kafka-console-producer.sh --broker-list kafka.kafka:9092 --topic demo
>hello, kafka?
>hello, zookeeper?
>hello, k8s
>

驗(yàn)證Kafka
# 從最開始處消費(fèi)數(shù)據(jù)[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

消費(fèi)kafka中的數(shù)據(jù)