Kubernetes-在Kubernetes集群上搭建Stateful Zookeeper集群

連續(xù)花了兩天時間在搭建Zookeeper集群這件事上了宛瞄,碰到了N多坑,終于是搭建成功了。

準(zhǔn)備工作


  1. Zookeeper鏡像苛坚,經(jīng)過我的測試,在Kubernetes上搭建Zookeeper需要用Kubernetes-Zookeeper這個鏡像色难,而不是用官方的Zookeeper鏡像(后面有時間再試一試)泼舱,Kubernetes-Zookeeper這個鏡像在國內(nèi)不好拿,我是采用docker hub構(gòu)建出來的枷莉,Dockerfile如下:
FROM k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10
MAINTAINER leo.lee <lis85@163.com>

當(dāng)然你也可以直接拉取我構(gòu)建成功的鏡像

docker pull leolee32/kubernetes-library:kubernetes-zookeeper1.0-3.4.10
  1. Zookeeper集群需要用到存儲娇昙,這里需要準(zhǔn)備持久卷(PersistentVolume,簡稱PV)笤妙,我這里以yaml文件創(chuàng)建3個PV冒掌,供待會兒3個Zookeeper節(jié)點創(chuàng)建出來的持久卷聲明(PersistentVolumeClaim,簡稱PVC)綁定蹲盘。
persistent-volume.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
  name: k8s-pv-zk1
  annotations:
    volume.beta.kubernetes.io/storage-class: "anything"
  labels:
    type: local
spec:
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/lib/zookeeper"
  persistentVolumeReclaimPolicy: Recycle
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: k8s-pv-zk2
  annotations:
    volume.beta.kubernetes.io/storage-class: "anything"
  labels:
    type: local
spec:
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/lib/zookeeper"
  persistentVolumeReclaimPolicy: Recycle
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: k8s-pv-zk3
  annotations:
    volume.beta.kubernetes.io/storage-class: "anything"
  labels:
    type: local
spec:
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/lib/zookeeper"
  persistentVolumeReclaimPolicy: Recycle

使用如下命令創(chuàng)建

kubectl create -f persistent-volume.yaml
create PV

查看PV

kubectl get pv -o wide
查看PV

部署Zookeeper集群


zookeeper.yaml
apiVersion: v1
kind: Service
metadata:
  name: zk-hs
  labels:
    app: zk
spec:
  ports:
  - port: 2888
    name: server
  - port: 3888
    name: leader-election
  clusterIP: None
  selector:
    app: zk
---
apiVersion: v1
kind: Service
metadata:
  name: zk-cs
  labels:
    app: zk
spec:
  ports:
  - port: 2181
    name: client
  selector:
    app: zk
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: zk-pdb
spec:
  selector:
    matchLabels:
      app: zk
  maxUnavailable: 1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zk
spec:
  selector:
    matchLabels:
      app: zk
  serviceName: zk-hs
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: zk
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - zk
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: kubernetes-zookeeper
        imagePullPolicy: Always
        image: "192.168.242.132/library/kubernetes-zookeeper:1.0-3.4.10"
        resources:
          requests:
            memory: "1Gi"
            cpu: "0.5"
        ports:
        - containerPort: 2181
          name: client
        - containerPort: 2888
          name: server
        - containerPort: 3888
          name: leader-election
        command:
        - sh
        - -c
        - "start-zookeeper \
          --servers=3 \
          --data_dir=/var/lib/zookeeper/data \
          --data_log_dir=/var/lib/zookeeper/data/log \
          --conf_dir=/opt/zookeeper/conf \
          --client_port=2181 \
          --election_port=3888 \
          --server_port=2888 \
          --tick_time=2000 \
          --init_limit=10 \
          --sync_limit=5 \
          --heap=512M \
          --max_client_cnxns=60 \
          --snap_retain_count=3 \
          --purge_interval=12 \
          --max_session_timeout=40000 \
          --min_session_timeout=4000 \
          --log_level=INFO"
        readinessProbe:
          exec:
            command:
            - sh
            - -c
            - "zookeeper-ready 2181"
          initialDelaySeconds: 10
          timeoutSeconds: 5
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - "zookeeper-ready 2181"
          initialDelaySeconds: 10
          timeoutSeconds: 5
        volumeMounts:
        - name: datadir
          mountPath: /var/lib/zookeeper
      securityContext:
        runAsUser: 1000
        fsGroup: 1000
  volumeClaimTemplates:
  - metadata:
      name: datadir
      annotations:
        volume.beta.kubernetes.io/storage-class: "anything"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 3Gi

使用如下命令創(chuàng)建

kubectl create -f zookeeper.yaml
創(chuàng)建Zookeeper集群

創(chuàng)建完后會出現(xiàn)一個問題股毫,就是所有的Zookeeper pod都啟動不起來,查看日志發(fā)現(xiàn)是用戶對文件夾【/var/lib/zookeeper】沒有權(quán)限引起的召衔,文件夾的權(quán)限是root用戶铃诬。

image.png

這里如何通過安裝解決還有待研究,目前可以先手動把文件夾【/var/lib/zookeeper】的權(quán)限修改為普通用戶苍凛,Zookeeper pod就可以正常啟動了趣席。
通過命令查看pod

kubectl get pod -o wide
pods

查看PV,發(fā)現(xiàn)持久卷聲明已經(jīng)綁定上了醇蝴。

kubectl get pv -o wide
PV

查看PVC

kubectl get pvc -o wide
pvc

最后來驗證Zookeeper集群是否正常宣肚,查看集群節(jié)點狀態(tài)

for i in 0 1 2; do kubectl exec zk-$i zkServer.sh status; done
zookeeper status

一個leader,兩個follower悠栓,成功C拐恰!闸迷!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嵌纲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腥沽,更是在濱河造成了極大的恐慌逮走,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件今阳,死亡現(xiàn)場離奇詭異师溅,居然都是意外死亡茅信,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門墓臭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蘸鲸,“玉大人,你說我怎么就攤上這事窿锉∽靡。” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵嗡载,是天一觀的道長窑多。 經(jīng)常有香客問我,道長洼滚,這世上最難降的妖魔是什么埂息? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮遥巴,結(jié)果婚禮上千康,老公的妹妹穿的比我還像新娘。我一直安慰自己铲掐,他們只是感情好拾弃,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迹炼,像睡著了一般砸彬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斯入,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天砂碉,我揣著相機與錄音,去河邊找鬼刻两。 笑死增蹭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的磅摹。 我是一名探鬼主播滋迈,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼户誓!你這毒婦竟也來了饼灿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤帝美,失蹤者是張志新(化名)和其女友劉穎碍彭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡庇忌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年舞箍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皆疹。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡疏橄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出略就,到底是詐尸還是另有隱情捎迫,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布残制,位于F島的核電站立砸,受9級特大地震影響掖疮,放射性物質(zhì)發(fā)生泄漏初茶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一浊闪、第九天 我趴在偏房一處隱蔽的房頂上張望恼布。 院中可真熱鬧,春花似錦搁宾、人聲如沸折汞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爽待。三九已至,卻和暖如春翩腐,著一層夾襖步出監(jiān)牢的瞬間鸟款,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工茂卦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留何什,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓等龙,卻偏偏與公主長得像处渣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛛砰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容