k8s-StatefulSet

前言:
本文從一個簡單示例開始介紹statefulSet的創(chuàng)建和基本用法橱野,最后提供一個mongo集群的生產(chǎn)示例。

1. 概念

1.1 功能:

  • 維護(hù)体斩、管理pod的生命周期
  • 運行的pod都是有狀態(tài)的剿吻,切有啟動順序

1.2 一般應(yīng)用

Mysql、Mongo 等有狀態(tài)的服務(wù)

1.3 比較

對象 是否有狀態(tài) POD數(shù)量
Deployment 按副本數(shù)
DaemonSet (適合節(jié)點)每節(jié)點一個
StatefulSet 按副本數(shù)

相關(guān)文檔
《K8S-Deployment》
《K8S-DaemonSet》

2. 簡單示例基本用法

說明:nginx本身是沒有狀態(tài)的讯檐,這里用nginx僅是便于后邊的伸縮演示,對實際生產(chǎn)并沒有意義染服。

  • 已有條件:
    集群中已經(jīng)創(chuàng)建了默認(rèn)StorageClass别洪。(pv會默認(rèn)自動創(chuàng)建)
  • 需要創(chuàng)建:
    HeadLessService
    StatefulSet

2.1 yml文件

  • HeadLessService
    創(chuàng)建一個test.yml文件譬重,內(nèi)容如下:
apiVersion: v1
kind: Service
metadata:
  name: headless-nginx
  namespace: test
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

說明:headless和普通service的區(qū)別是設(shè)置 clusterIP: None舶得,不讓其獲取ClusterIP , DNS解析的時候直接走pod的ip地址婉支。

  • 在test.yml文件添加如下內(nèi)容(和前邊service用--- 分開)
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
  namespace: test
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: harborcto.xxx.com.cn/public/nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

說明:
volumeClaimTemplates 是創(chuàng)建 pvc 的樣例秉颗。和pod的樣例 template 是平級的痢毒。

2.2 啟動和查看

[root@DoM01 statfulset]# kubectl create -f test.yml
service/headless-nginx created
statefulset.apps/web created
[root@DoM01 statfulset]# kubectl get all -n test
NAME        READY   STATUS    RESTARTS   AGE
pod/web-0   1/1     Running   0          28s
pod/web-1   1/1     Running   0          22s

NAME                     TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/headless-nginx   ClusterIP   None         <none>        80/TCP    25s

NAME                   READY   AGE
statefulset.apps/web   2/2     25s

可以看到:
1)沒有使用Deployment時的 replicaset來管理pod。
2)有web-0 和web-1 兩個pod啟動了蚕甥。
3)headless-service 沒有分配ip地址哪替。

2.3 伸縮

  • 增加到5個pod
[root@DoM01 ~]# kubectl scale statefulset -n test --replicas=5 web
statefulset.apps/web scaled
[root@DoM01 ~]# kubectl get pod -n test
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          20m
web-1   1/1     Running   0          20m
web-2   1/1     Running   0          18s
web-3   1/1     Running   0          13s
web-4   1/1     Running   0          7s

從時間可見,pod在按序號依次啟動菇怀。

  • 減少到兩個
[root@DoM01 ~]# kubectl scale statefulset -n test --replicas=2 web
statefulset.apps/web scaled
[root@DoM01 ~]# kubectl get pod -n test
NAME    READY   STATUS        RESTARTS   AGE
web-0   1/1     Running       0          26m
web-1   1/1     Running       0          26m
web-2   1/1     Running       0          6m53s
web-3   1/1     Running       0          6m48s
web-4   0/1     Terminating   0          6m42s
[root@DoM01 ~]# kubectl get pod -n test
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          27m
web-1   1/1     Running   0          26m

如上可見凭舶,pod按序號從后往前依次關(guān)閉。

2.4 刪除

[root@DoM01 ~]# kubectl delete -n test statefulsets web
statefulset.apps "web" deleted
[root@DoM01 ~]# kubectl get pod -n test
No resources found.
[root@DoM01 ~]# kubectl get pvc -n test
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
www-web-0   Bound    pvc-9dd04363-b482-45c6-a789-cfad170c1372   1Gi        RWO            nfs-client     37m
www-web-1   Bound    pvc-ef7a4f64-1279-4640-813d-4a2707d61258   1Gi        RWO            nfs-client     37m
www-web-2   Bound    pvc-0b6a3249-d2aa-4d8a-82a6-1fe78ce86999   1Gi        RWO            nfs-client     17m
www-web-3   Bound    pvc-bdbf66e9-0a86-4e29-807c-44c634ad23f7   1Gi        RWO            nfs-client     17m
www-web-4   Bound    pvc-9bb3fc9f-923e-46f9-b82c-66ec7414ea04   1Gi        RWO            nfs-client     17m

如上可見:
刪除statefulset后爱沟,默認(rèn)配置下pod會被刪除帅霜。但是pvc是不會被刪除的,需要我們手動刪除呼伸。

3. mongdb示例

3.1 HeadLessService

  • yml文件
    創(chuàng)建service.yml文件如下:
apiVersion: v1
kind: Service
metadata:
  name: headless-mongo
  namespace: test
  labels:
    name: mongo
spec:
  selector:
    role: mongo
  ports:
  - port: 27017
    targetPort: 27017
  clusterIP: None
  • 創(chuàng)建service
[root@DoM01 statfulset]# kubectl create -f service.yml
[root@DoM01 statfulset]# kubectl get service -n test
NAME                       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
headless-mongo            ClusterIP   None         <none>        27017/TCP   32m

3.2 StatefulSet

  • yml文件
    創(chuàng)建 statefulset.yml文件如下:
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo
  namespace: test
spec:
  serviceName: "mongo"
  replicas: 3
  template:
    metadata:
      labels:
        role: mongo
        environment: test
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: mongo
        image: harbocto.boe.com.cn/public/mongo:3.4.4
        command:
        - mongod
        - "--replSet"
        - rs0
        #- "--smallfiles"
        #- "--noprelloc"
        resources:
          limits:
            cpu: "1"
            memory: 2Gi
          requests:
            cpu: "0.2"
            memory: 100Mi
        ports:
        - containerPort: 27017
        volumeMounts:
        - name: mongo-persistent-storage
          mountPath: /data/db
      - name: mongo-sidecar
        image: harbocto.boe.com.cn/public/mongo-k8s-sidecar:latest
        resources:
          limits:
            cpu: "1"
            memory: 2Gi
          requests:
            cpu: "0.2"
            memory: 100Mi
        env:
        - name: MONGO_SIDECAR_POD_LABELS
          value: "role=mongo,environment=test"
        - name: KUBERNETES_MONGO_SERVICE_NAME
          value: "mongo"
  volumeClaimTemplates:
  - metadata:
      name: mongo-persistent-storage
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi
  • 啟動
[root@DoM01 statfulset]# kubectl create -f statefulset.yml
[root@DoM01 statfulset]# kubectl get pod -n test
NAME      READY   STATUS    RESTARTS   AGE
mongo-0   2/2     Running   0          68s
mongo-1   2/2     Running   0          62s
mongo-2   2/2     Running   0          39s

如上身冀,可見3個節(jié)點依次啟動。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末括享,一起剝皮案震驚了整個濱河市闽铐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奶浦,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踢星,死亡現(xiàn)場離奇詭異澳叉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門成洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來五督,“玉大人,你說我怎么就攤上這事瓶殃〕浒” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵遥椿,是天一觀的道長基矮。 經(jīng)常有香客問我,道長冠场,這世上最難降的妖魔是什么家浇? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮碴裙,結(jié)果婚禮上钢悲,老公的妹妹穿的比我還像新娘。我一直安慰自己舔株,他們只是感情好莺琳,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著载慈,像睡著了一般惭等。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娃肿,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天咕缎,我揣著相機(jī)與錄音,去河邊找鬼料扰。 笑死凭豪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晒杈。 我是一名探鬼主播嫂伞,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拯钻!你這毒婦竟也來了帖努?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粪般,失蹤者是張志新(化名)和其女友劉穎拼余,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亩歹,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡匙监,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年凡橱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亭姥。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡稼钩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出达罗,到底是詐尸還是另有隱情坝撑,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布粮揉,位于F島的核電站巡李,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滔蝉。R本人自食惡果不足惜击儡,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝠引。 院中可真熱鬧阳谍,春花似錦、人聲如沸螃概。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吊洼。三九已至训貌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冒窍,已是汗流浹背递沪。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留综液,地道東北人款慨。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像谬莹,于是被迫代替她去往敵國和親檩奠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

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