背景:客户的kafka组件部署时没有对外暴露端口,导致客户不能通过Kafka消费数据。
解决办法
1.检查是否kafka对外有端口露出
[root@k8s-master-01 ~]# kubectl get svc -A | grep kafka
default kafka NodePort 10.107.226.247 <none> 9092:30092/TCP 125d
default kafka-exporter-prometheus-kafka-exporter ClusterIP 10.111.246.55 <none> 9308/TCP 125d
default kafka-headless ClusterIP None <none> 9092/TCP,9093/TCP 125d
2.修改镜像仓库
vim install/servers/kafka/kafka/values.yaml
image:
registry: docker.io
repository: bitnami/kubectl
tag: 1.19.15-debian-10-r39
3.添加如下kafka脚本配置
此段需覆盖原有配置项
helm $status -n ${KAFKA_NAMESPACE} \
--set zookeeper.enabled=false \
--set replicaCount=${KAFKA_REPLICA} \
--set persistence.storageClass="kafka-storage" \
--set service.type=NodePort \
--set service.nodePorts.client="30092" \
--set externalAccess.enabled=true \
--set externalAccess.service.type=NodePort \
--set externalAccess.autoDiscovery.enabled=true \
--set rbac.create=true \
--set externalAccess.service.nodePorts[0]="30190" \
--set externalAccess.service.nodePorts[1]="30191" \
--set externalAccess.service.nodePorts[2]="30192" \
--set externalZookeeper.servers=zookeeper.${KAFKA_NAMESPACE}.svc.cluster.local \
--set ${helm_set_string} \
-f $CMD/servers/kafka/kafka/values.yaml kafka $CMD/servers/kafka/kafka/
}
注:此段需覆盖原有配置项
4.执行kafka更新
bash install/main_install.sh update kafka
5.检查
[root@k8s-master-01 ~]# kubectl get svc -A | grep kafka
default kafka NodePort 10.109.166.120 <none> 9092:30092/TCP,9094:31243/TCP 8h
default kafka-0-external NodePort 10.103.113.68 <none> 9094:30190/TCP 150m
default kafka-1-external NodePort 10.111.216.115 <none> 9094:30191/TCP 150m
default kafka-2-external NodePort 10.108.65.222 <none> 9094:30192/TCP 150m
default kafka-headless ClusterIP None <none> 9092/TCP,9093/TCP 8h
备注:
经过本地测试,此方法仅可保留kafka历史存量数据,对于新进入的数据无法存留,所以,请选择数据流量少的时间进行更新,更新的时间大概约2分钟左右。