通過helm在k8s上部署kafka。zookeeper
通過helm方法安裝
k8s上安裝kafka,可以使用helm,將kafka作為一個應用安裝。當然這首先要你的k8s支持使用helm安裝。helm的介紹和參考見:https://yq.aliyun.com/articles/159601
helm倉庫地址https://github.com/helm/charts
通過阿里倉庫安裝kafka
helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
helm repo update
helm search kafka
hlem fetch incubator/kafka # 下載tgz文件
tar zxf kafka-0.2.1.tgz && cd kafka
把./charts/zookeeper/templates/statefulset.yaml中的zookeeper的鏡像地址改為registry.cn-hangzhou.aliyuncs.com/appstore/k8szk:v2
將以下兩個文件中的橘紅色部分改為你的storageclass。
storageclass查詢命令: kubectl get sc --all-namespaces
helm install ./ -n kafka --namespace xxx #安裝
kubectl get pvc -n xxx #查看pvc狀態
kubectl describe pvc pvcname -n xxx #查看pvc詳細信息排錯使用
要想外網訪問,修改服務的yaml文件,設置type為NodePort為30946
還要在安全組中開放這個端口
可以先在pod里面測試
進入kafka的pod
創建主題
bin/kafka-topics.sh --create --zookeeper 10.233.61.237:2181 --replication-factor 1 --partitions 1 --topic device 這里面使用的是集群ip,容器間訪問
創建消費者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic device --from-beginning
創建生產者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic device 使用本地ip bin/kafka-console-producer.sh --broker-list 10.233.9.150:9092 --topic device 使用集群id bin/kafka-console-producer.sh --broker-list 192.168.2.177:30946 --topic device 使用服務器內網ip和nodeport
現在pod內部可以訪問了,現在嘗試在外部創建生產者。
實驗發現,在k8s上部署服務來訪問k8s上的kafka,依然沒有問題。
下面我們嘗試直接在本地pc訪問服務器k8s中的kafka。
在本地電腦上cd到kafka的目錄
cd /home/lp/soft/kafka_2.11-1.1.0 bin/kafka-console-producer.sh --broker-list 192.168.2.177:30946 --topic device
發現訪問不了。
進入pod
在pod重啟kafka。
bin/kafka-server-stop.sh 關閉
進入pod,執行
bin/zookeeper-shell.sh 10.233.61.237:2181 <<< "get /brokers/ids/0" 使用的是zookeeper的集群ip