創建zk工作負載
創建集群的工作負載不能選擇Deployment 而要選擇Statfulset才行 這樣創建的pod名稱才是帶有編號的 如果是Deployment類型 那么創建出來的pod名稱是隨機的
創建的pod名稱有規律后,我們就可以在zoo.cfg的配置文件中進行主機名稱的配置 如果是隨機的pod名稱,那么pod每次重啟后,配置在配置文件中的主機名稱就會異常
動態生成zk配置文件
使用sidecar模式來根據pod的順序來動態生成配置文件內容
1.使用邊車模式的initcontainer容器實現
2.在主容器中掛載卷
3.訪問主容器中的卷文件
4.動態生成serverid的配置文件

#!/bin/sh ordinal=`env | grep HOSTNAME |cut -d "-" -f2` let serverid=$ordinal+1 echo $serverid > /mnt/myid
zk集群異常處理
報錯信息:
Cannot open channel to 3 at election address
UnknownHostException: zk-2.zk-hs.default.svc.cluster.local
解決思路:
配置文件$ ZOOKEEPER_HOME/conf/zoo.cfg,每個機器IP設置為“0.0.0.0”,如下所示:
server.1=0.0.0.0:2888:3888
server.2=zk-1.zk-hs.default.svc.cluster.local:2888:3888
server.3=zk-2.zk-hs.default.svc.cluster.local:2888:3888
修改方法:
修改文件內容:當是本機的時候使用0.0.0.0ip
function print_servers() {
for (( i=1; i<=$SERVERS; i++ ))
do
#echo "server.$i=$NAME-$((i-1)).$DOMAIN:$SERVER_PORT:$ELECTION_PORT"
if [ $ORD -eq $((i-1)) ]; then
echo "server.$i=0.0.0.0:$SERVER_PORT:$ELECTION_PORT"
else
echo "server.$i=$NAME-$((i-1)).$DOMAIN:$SERVER_PORT:$ELECTION_PORT"
fi
done
}
搭建kafka集群
1.動態修改配置文件

serverid=128 sed -i "s/broker.id=108/broker.id=$serverid/g" kafka.properties

#!/bin/sh mkdir -p /kafka/config2/ ordinal=`env | grep HOSTNAME |cut -d "-" -f2` let serverid=$ordinal+1 let containerport=9092+$serverid let listenport=39090+$serverid sed -i "s/broker.id=.*/broker.id=$serverid/g" /kafka/config2/kafka.properties #sed -i "s/listeners=.*/listeners=PLAINTEXT:/\/\0.0.0.0:$containerport/g" /kafka/config2/kafka.properties sed -i "s/advertised.port=.*/advertised.port=$listenport/g" /kafka/config2/kafka.properties sed -i "s#advertised.listeners=.*#advertised.listeners=PLAINTEXT://192.168.30.108:$listenport#g" /kafka/config2/kafka.properties #sed -i "s/advertised.listeners=.*/advertised.listeners=PLAINTEXT://192.168.30.108:$listenport/g" /kafka/config2/kafka.properties
2.設置sidecar容器
主容器設置
最終實現kafka集群搭建
只用到了statfulset有序創建的特性 沒有使用到sidecar模型
rancher頁面設置
kafka消息通信測試
kafka集群搭建成功版本