|NO.Z.00275|——————————|^^ 部署 ^^|——|KuberNetes&中间件容器化及helm.V22|——|中间件.v02|helm.v3.5.4|下载部署|zookeeper&kafka|
一、使用helm部署zookeeper和kafka;下载部署
### --- 添加bitnami的helm仓库并添加版本库
~~~ 添加bitnami的helm仓库
[root@k8s-master01 zookeeper-kafka]# helm repo add bitnami https://charts.bitnami.com/bitnami
### --- 查看添加的仓库
[root@k8s-master01 zookeeper-kafka]# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
### --- 查看bitnami仓库下zookeeper和kafka的程序包
~~~ 注:可以直接安装,也可以下载后更改values值后安装
[root@k8s-master01 zookeeper-kafka]# helm search repo zookeeper
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/zookeeper 6.7.2 3.7.0 A centralized service for maintaining configura...
bitnami/kafka 12.18.1 2.8.0 Apache Kafka is a distributed streaming platform.
二、将zookeeper和kafka的包下载下来,部署
### --- 下载zookeeper和kafka的helm包文件
[root@k8s-master01 zookeeper-kafka]# helm pull bitnami/zookeeper
[root@k8s-master01 zookeeper-kafka]# helm pull bitnami/kafka
[root@k8s-master01 zookeeper-kafka]# ls
kafka-12.18.1.tgz zookeeper-6.7.2.tgz
### --- 解压包文件,修改配置参数
[root@k8s-master01 zookeeper-kafka]# tar -zxf zookeeper-6.7.2.tgz
[root@k8s-master01 zookeeper-kafka]# tar -zxf kafka-12.18.1.tgz
[root@k8s-master01 zookeeper-kafka]# ls
kafka kafka-12.18.1.tgz zookeeper zookeeper-6.7.2.tgz
三、部署zookeeper
### --- 修改zookeeper的配置参数
[root@k8s-master01 zookeeper-kafka]# vim zookeeper/values.yaml
enabled: false # 将存储卷更改为false
# storageClass: "-"
# 若是内存和CPU配置比较低,实验环境可以更改CPU和内存大小
resources:
requests:
memory: 100Mi
cpu: 100m
### --- 安装zookeeper
[root@k8s-master01 zookeeper]# pwd
/root/README/install-some-apps/zookeeper-kafka/zookeeper
[root@k8s-master01 zookeeper]# helm install zookeeper -n public-service --set replicaCount=1 --set auth.enabled=false --set allowAnonymousLogin=true .
NAME: zookeeper
LAST DEPLOYED: Sat May 22 17:26:29 2021
NAMESPACE: public-service
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** 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.public-service.svc.cluster.local // 可以通过dnsname的2181端口访问到zookeeper
To connect to your ZooKeeper server run the following commands:
export POD_NAME=$(kubectl get pods --namespace public-service -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.sh
To connect to your ZooKeeper server from outside the cluster execute the following commands:
kubectl port-forward --namespace public-service svc/zookeeper 2181:2181 &
zkCli.sh 127.0.0.1:2181
~~~ # 启动参数详解
~~~ 注:可以指定namespace
~~~ 注:若是生产环境下:集群副本数更改为3,打开metrics,可以让promise可以采集它的一些信息
--set replicaCount=3 // 副本数设置为1
--set auth.enabled=false // 认证方式关闭;因为zookeeper集群不会暴露到公网,所以认证方式给关闭
--set allowAnonymousLogin=true // 允许匿名访问
### --- 查看部署的zookeeper的pod
[root@k8s-master01 zookeeper]# kubectl get po -n public-service -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
zookeeper-0 1/1 Running 0 18m 172.27.14.246 k8s-node02 <none> <none>
四、部署kafka
### --- 配置kafka的values配置文件
[root@k8s-master01 kafka]# vim values.yaml
# 注:
replicaCount: 1 // 副本数量设置为1
### --- 部署kafka
[root@k8s-master01 kafka]# pwd
/root/README/install-some-apps/zookeeper-kafka/kafka
[root@k8s-master01 kafka]# helm install kafka -n public-service --set zookeeper.enabled=false --set replicaCount=1 --set externalZookeeper.servers=zookeeper .
~~~ # 启动参数详解
helm install kafka bitnami/kafka // 若是在当前目录,可以删除这个路径bitnami/kafka,若不是需要加上仓库的名称
--set zookeeper.enabled=false // 因为我们刚才创建了zookeeper,所以直接使用刚才创建的zookeeper供这个kafka使用。把它内部的kafka关闭;所以此项设置为false,若是设置为true的话,会再次创建zookeeper
--set replicaCount=3
--set externalZookeeper.servers=ZOOKEEPER-SERVICE-NAME // 外部的service地址,因为它们在同一个namespace下,所以可以直接写成zookeeper的名称即可
### --- kafka和zookeeper一般都是在一起使用的
### --- 查看创建的kafka
~~~ 注:显示是pending状态
[root@k8s-master01 zookeeper-kafka]# kubectl get po -n public-service -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kafka-0 0/1 Pending 0 4m22s <none> <none> <none> <none>
### --- 创建kafka
[root@k8s-master01 kafka]# helm install kafka -n public-service --set zookeeper.enabled=false --set replicaCount=1 --set externalZookeeper.servers=zookeeper .
NAME: kafka
LAST DEPLOYED: Sat May 22 18:15:02 2021
NAMESPACE: public-service
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** 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.public-service.svc.cluster.local
Each Kafka broker can be accessed by producers via port 9092 on the following DNS name(s) from within your cluster:
kafka-0.kafka-headless.public-service.svc.cluster.local:9092
To 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:2.8.0-debian-10-r24 --namespace public-service --command -- sleep infinity
kubectl exec --tty -i kafka-client --namespace public-service -- bash
PRODUCER:
kafka-console-producer.sh \
--broker-list kafka-0.kafka-headless.public-service.svc.cluster.local:9092 \
--topic test
CONSUMER:
kafka-console-consumer.sh \
--bootstrap-server kafka.public-service.svc.cluster.local:9092 \
--topic test \
--from-beginning
### --- 查看创建的kafka资源
[root@k8s-master01 kafka]# kubectl get po -n public-service -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kafka-0 1/1 Running 0 76s 172.25.244.203 k8s-master01 <none> <none>
五、查看创建的zookeeper和kafka资源
### --- 查看helm创建的2个应用
[root@k8s-master01 zookeeper-kafka]# helm list -n public-service
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
kafka public-service 1 2021-05-22 17:41:14.104792854 +0800 CST deployed kafka-12.18.1 2.8.0
zookeeper public-service 1 2021-05-22 17:26:29.604378029 +0800 CST deployed zookeeper-6.7.2 3.7.0
### --- 查看创建的2个pod
~~~ 注:生成环境中:同一类型的服务,尽量不要部署在同一台宿主机上
~~~ 注:生成环境中,最少3个实例起步,一定要启奇数个,防止脑裂
[root@k8s-master01 zookeeper-kafka]# kubectl get po -n public-service -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kafka-0 1/1 Running 0 19m 172.17.125.23 k8s-node01 <none> <none>
zookeeper-0 1/1 Running 0 86m 172.27.14.246 k8s-node02 <none> <none>
### --- 查看service
[root@k8s-master01 zookeeper-kafka]# kubectl get svc -n public-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka ClusterIP 10.111.68.94 <none> 9092/TCP 43m
kafka-headless ClusterIP None <none> 9092/TCP,9093/TCP 43m
zookeeper ClusterIP 10.107.222.142 <none> 2181/TCP,2888/TCP,3888/TCP 92m
zookeeper-headless ClusterIP None <none> 2181/TCP,2888/TCP,3888/TCP 92m
### --- 查看ep
[root@k8s-master01 zookeeper-kafka]# kubectl get ep -n public-service
NAME ENDPOINTS AGE
kafka 172.17.125.23:9092 44m
kafka-headless 172.17.125.23:9092,172.17.125.23:9093 44m
zookeeper 172.27.14.246:3888,172.27.14.246:2181,172.27.14.246:2888 92m
zookeeper-headless 172.27.14.246:3888,172.27.14.246:2181,172.27.14.246:2888 92m
附录一:
### --- 报错现象:
[root@k8s-master01 zookeeper-kafka]# kubectl describe po kafka-0 -n public-service
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 9s default-scheduler 0/5 nodes are available: 5 pod has unbound immediate PersistentVolumeClaims.
Warning FailedScheduling 9s default-scheduler 0/5 nodes are available: 5 pod has unbound immediate PersistentVolumeClaims.
### --- 报错分析:
~~~ 关闭持久存储的pvc接口 和zookeeper一样,也是因为pvc的问题导致的,关闭pvc即可
[root@k8s-master01 kafka]# pwd
/root/README/install-some-apps/zookeeper-kafka/kafka
### --- 解决方案:关闭持久存储参数
[root@k8s-master01 kafka]# vim values.yaml
## Persistence parameters
##
persistence:
enabled: false // 将存储卷更改为false
~~~ # 删除历史创建:重新触发,查看结果
~~~ 注:helm是不允许修改配置文件的,只能删除后重新创建
[root@k8s-master01 kafka]# helm upgrade kafka -n public-service --set zookeeper.enabled=false --set replicaCount=1 --set externalZookeeper.servers=zookeeper .
Error: UPGRADE FAILED: cannot patch "kafka" with kind StatefulSet: StatefulSet.apps "kafka" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden
~~~ # 删除kafka
[root@k8s-master01 kafka]# helm uninstall kafka -n public-service
release "kafka" uninstalled
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了