加入helm的repo

helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator/
helm repo update

然後我們就可以配置需要安裝的 Values 文件了,可以直接使用默認的 values.yaml 文件,然後可以用它來進行定制,比如指定我們自己的 StorageClass:

curl https://raw.githubusercontent.com/helm/charts/master/incubator/kafka/values.yaml > kfk-values.yaml

指定設定好的配置檔安裝

helm install kafka ./kafka -f kfk-values.yaml

如果你沒有配置 StorageClass 可用的 PV,或者安裝的時候 kafka 的 Pod 就會出現 Pending 狀態,所以一定提前配置好數據卷。
正常情況隔一會兒Kafka就可以安裝成功了:

> kubectl get pods
NAME READY STATUS RESTARTS AGE
kafka-0 1/1 Running 0 25m
kafka-1 1/1 Running 0 11m
kafka-2 1/1 Running 0 2m
kafka-zookeeper-0 1/1 Running 0 25m
kafka-zookeeper-1 1/1 Running 0 22m
kafka-zookeeper-2 1/1 Running 0 18m

默認會安裝 3 個 ZK Pods 和 3 個 Kafka Pods,這樣可以保證應用的高可用,也可以看下我配置的持久卷信息:

如果我們配置了一個默認的存儲類,動態去申請持久化卷,如果你的無動態卷,可以修改values.yaml來使用動態卷。
然後查看下對應的服務對象:
> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka ClusterIP 10.100.205.187 9092/TCP 31m
kafka-headless ClusterIP None 9092/TCP 31m
kafka-zookeeper ClusterIP 10.100.230.255 2181/TCP 31m
kafka-zookeeper-headless ClusterIP None 2181/TCP,3888/TCP,2888/TCP 31m
kubernetes ClusterIP 10.96.0.1 443/TCP 14d
可以看到一個 kafka-zookeeper 的 zookeeper 服務和一個叫 kafka 的 Kafka 服務,對於 Kafka 集群的管理,我們將與 kafka-zookeeper 服務進行交互,又可以解決消息的叫聲,我們將使用 kafka 服務。
 
客戶端測試
現在 Kafka 集群已經搭建完畢,接下來我們來安裝一個 Kafka 客戶端,用它來幫助我們和獲取話題消息。
直接使用下面的命令創建客戶端:
> cat <
apiVersion: v1
kind: Pod
metadata:
  name: testclient
  namespace: default
spec:
  containers:
  - name: kafka
    image: confluentinc/cp-kafka:5.0.1
    command:
      - sh
      - -c
      - "exec tail -f /dev/null"
EOF
> kubectl get pod testclient
NAME READY STATUS RESTARTS AGE
testclient 1/1 Running 0 23s

客戶端Pod創建成功後我們就可以開始進行一些簡單的測試了。首先讓我們創建一個名為test1的有一個單獨的和復制因子'1'的主題:

> kubectl exec -it testclient -- /usr/bin/kafka-topics --zookeeper kafka-zookeeper:2181 --topic test1 --create --partitions 1 --replication-factor 1
Created topic "test1".

然後創建一個生產者,將消息發佈到這個話題主題上:

> kubectl exec -ti testclient -- /usr/bin/kafka-console-producer --broker-list kafka:9092 --topic test1
>

然後再打一個終端頁面,讓我們打開一個消費者會話,這樣我們就可以看到我們發送的消息了。

> kubectl exec -ti testclient -- /usr/bin/kafka-console-consumer --bootstrap-server kafka:9092 --topic test1

現在我們在生產者的窗口發送消息,在上面的消費者會話窗口中就可以看到對應的消息了:

到這裡證明 Kafka 就應該注意正常工作了。 比如需要 zk 我們並沒有做持久化,如果是環境環境一定記得做下數據持久化,在 values.yaml 文件中根據需要進行定制生產,當然適合 環境還是推薦使用 Operator 來搭建 Kafka 集群,例如 strimzi-kafka-operator。

參考網址:https://www.qikqiak.com/post/deploy-kafka-ha-on-k8s/

 

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料