kubernetes實踐之四十二:StatefulSet

百聯達發表於2018-05-17
一: 前言

1.使用StatefulSet的場景
a.穩定、唯一的網路標識
b.穩定、持久的儲存
c.按照順序、優雅的部署和擴容
d.按照順序、優雅的刪除和終止
e.按照順序、自動滾動更新

2.StatefulSet的限制
a.在Kubernetes 1.9版本之前是beta版本,在Kubernetes 1.5版本之前是不提供的。
b.Pod儲存由PersistentVolume(storage類或者管理員預先建立)提供。
c.刪除或者縮容StatefulSet不會刪除與StatefulSet關聯的資料卷,這樣能夠保證資料的安全性。
d.當前的StatefulSets需要一個Headless服務來為Pod提供網路標識,此Headless服務需要透過手工建立。

二:儲存供應模式
1.靜態資源供應模式,透過PV和PVC完成繫結。

2.動態資源供應模式,透過StorageClass和PVC完成資源動態繫結


三: StatefulSet Nginx 應用例項

1. 建立三個pv (name分別為glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)

點選(此處)摺疊或開啟

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4.   name: glusterfs-nginx-0
  5.   namespace: default
  6. spec:
  7.   capacity:
  8.     storage: 1Gi
  9.   accessModes:
  10.     - ReadWriteOnce
  11.   glusterfs:
  12.     endpoints: "glusterfs-cluster"
  13.     path: "k8s-volume"
  14.     readOnly: false

2.建立三個pvc (name分別為glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)

點選(此處)摺疊或開啟

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4.   name: glusterfs-nginx-0
  5.   namespace: default
  6. spec:
  7.   accessModes:
  8.     - ReadWriteOnce
  9.   resources:
  10.     requests:
  11.       storage: 1Gi
3.建立Headless服務

點選(此處)摺疊或開啟

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.      name: nginx
  5.      labels:
  6.         name: nginx
  7. spec:
  8.    ports:
  9.    - port: 80
  10.      targetPort: 80
  11.    clusterIP: None
  12.    selector:
  13.       role: mongo
4.建立StatefulSet

點選(此處)摺疊或開啟

  1. apiVersion: apps/v1beta1
  2. kind: StatefulSet
  3. metadata:
  4.      name: nginx
  5. spec:
  6.    serviceName: "nginx"
  7.    replicas: 3
  8.    template:
  9.       metadata:
  10.            labels:
  11.               role: nginx
  12.       spec:
  13.          terminationGracePeriodSeconds: 10
  14.          containers:
  15.          - name: nginx
  16.            image: nginx
  17.            ports:
  18.            - containerPort: 80
  19.            volumeMounts:
  20.            - name: glusterfs
  21.              mountPath: /usr/share/nginx/html
  22.    volumeClaimTemplates:
  23.    - metadata:
  24.         name: glusterfs
  25.      spec:
  26.       accessModes: [ "ReadWriteOnce" ]
  27.       resources:
  28.         requests:
  29.           storage: 1Gi
四:備註
1.StatfuleSet Pod擁有一個唯一的身份標識,它由順序、穩定的網路標識和穩定的儲存所組成。此身份標識一直跟隨著Pod,不過它被排程到那個Node上。

2.對於擁有N個副本集的StatefulSet,在StatefulSet中的每一個Pod都會被指派一個整型的序數,此序數在0和N之間,在整個集合中是唯一的。

3.在StatefulSet中,每一個Pod的主機名稱都由StatefulSet的名稱和序數所組成。Pod的主機名稱的格式:$(statefulset name)-$(ordinal)。如果建立了三個Pod,這他們的主機名稱為web-0,web-1,web-2。StatefulSet能夠使用Headless服務來控制Pod的域。Service管理的域的格式為:$(service name).$(namespace).svc.cluster.localcluster.local是叢集域。對於每一個被建立的Pod,它將得到一個DNS子域,格式為: $(podname).$(governing service domain),這裡的管理服務在StatefulSet中,透過serviceName設定。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2154621/,如需轉載,請註明出處,否則將追究法律責任。

相關文章