k8s部署kafka叢集
阿新 • • 發佈:2019-01-09
一、概述
在k8s裡面部署kafka、zookeeper這種有狀態的服務,不能使用deployment和RC,k8s提供了一種專門用來部署這種有狀態的服務的API--statefulset,有狀態簡單來說就是需要持久化資料,比如日誌、資料庫資料、服務狀態等。
statefulset應用場景:
- 穩定的持久化儲存,即Pod重新排程後還是能訪問到相同的持久化資料,基於PVC來實現
- 穩定的網路標誌,即Pod重新排程後其PodName和HostName不變,基於Headless Service(即沒有Cluster IP的Service)來實現
- 有序部署,有序擴充套件,即Pod是有順序的,在部署或者擴充套件的時候要依據定義的順序依次依次進行(即從0到N-1,在下一個Pod執行之前所有之前的Pod必須都是Running和Ready狀態),基於init containers來實現
- 有序收縮,有序刪除(即從N-1到0)
statefulset組成:
- 用於定義網路標誌(DNS domain)的Headless Service
- 用於建立PersistentVolumes的volumeClaimTemplates
- 定義具體應用的StatefulSet
StatefulSet中每個Pod的DNS格式為statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local
,其中
0..N-1
為Pod所在的序號,從0開始到N-1serviceName
為Headless Service的名字statefulSetName
為StatefulSet的名字namespace
為服務所在的namespace,Headless Servic和StatefulSet必須在相同的namespace.cluster.local
為Cluster Domain
二、部署
首先下載相關的部署檔案:
git clone https://github.com/cuishuaigit/k8s-kafka.git
部署前需要提前準備nfs提供動態儲存,參考我之前的部落格:https://www.cnblogs.com/cuishuai/p/9152277.html
cd k8s-kafka kubectl create-f zk.yaml kubectl create -f kafka.yaml
詳細資訊參考:https://github.com/cuishuaigit/k8s-kafka.git