溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

kubernets之statefulset

發布時間:2020-08-09 19:55:36 來源:網絡 閱讀:976 作者:gyj0825 欄目:建站服務器

StatefulSet是控制器的一種,可以創建獨特身份的POD。它提供有序的部署和伸縮。

  • 使用statefulset

  • 使用限制

  • 組成部分

  • pod身份識別

  • 保證部署和伸縮

使用statefulset

statefulset對以下應用是有價值的。

  • 穩定、唯一的網絡訪問地址

  • 穩定、持久的存儲

  • 有序、優雅的部署和伸縮

  • 有序。優雅的刪除和終止

上述描述中,穩定等同于在POD再次調度之后可以持久。如果應用不需要穩定的認證或有序的部署、刪除、伸縮,你可以使用無狀態的副本(例如Deployment或ReplicaSet)來部署你的應用,這將更適合無狀態應用。

使用限制

  • Statefulset目前為bate版本,在1.5之前在任何發布版中都不可用

  • 類似所有alpha/beta資源,你可以通過apiserver參數--runtime-config禁用Statefulset

  • POD使用的持久化存儲可以是基于storage class的動態卷,也可以是預先管理員分配的

  • 刪除或縮減Statefulset不會刪除分配的volumes。這是為了確保數據安全,數據比自動清除與statefulset關聯的資源更重要

  • Statefulset當前需要一個Headless Service提供網絡訪問地址

  • 目前需要手動完成更新存在Statefulset

組成部分

  • 下面的示例描述Statefulset的組件。

  • 一個名為nginx的Headless Service,用于控制網絡訪問

  • 名為web的Statefulset,啟動三個副本POD

  • volumeClaimTemplates將提供持久化存儲

---
apiVersion: v1
kind: Service
metadata:
    name: nginx
    labels:
       app: nginx
spec:
   ports:
   - port: 80
     name: web
   clusterIP: None
   selector:
     app: nginx
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
    name: webspec:
    serviceName: "nginx"
    replicas: 3
    template:
        metadata:
              labels:
                 app: nginx
        spec:
            terminationGracePeriodSeconds: 10
            containers:
            - name: nginx
               p_w_picpath: gcr.io/google_containers/nginx-slim:0.8
               ports:
               - containerPort: 80
                 name: web
               volumeMounts:
               - name: www
                 mountPath: /usr/share/nginx/html
    volumeClaimTemplates:
    - metadata:
            name: www
            annotations:
                volume.beta.kubernetes.io/storage-class: anything
       spec:
           accessModes: [ "ReadWriteOnce" ]
           resources:
               requests:
                   storage: 1Gi

POD身份識別

StatefulSet POD有一個獨特的身份識別,由一個序號、一個穩定的網絡身份和穩定的存儲。身份綁定POD,不管POD被調度到哪個節點上。

1)序號索引

Statefulset有N個實例,每個POD將被分配一個唯一的整數序號,范圍在[1,N]。

2)穩定的網絡ID

StatefulSet的每個POD的名稱是由StatefulSet的名稱和Pod序號組成。POD名稱的格式為$(statefulset name)-$(ordinal)。上述示例中創建的POD名稱為web-0,web-1,web-2。statefulset使用Headless Service控制POD的域名。service域名的格式為$(service name).$(namespace).svc.cluster.local,cluster.local為cluster domain。每個POD創建后會有一個匹配的域名,格式為$(podname).$(service_domain)。下表為示例,描述cluster domain、service name和statefulset name如何相互作用。

Cluster Domain        Service (ns/name)            StatefulSet (ns/name)        StatefulSet Domain     Pod DNS     Pod Hostname

cluster.local    default/nginx    default/web    nginx.default.svc.cluster.local    web-{0..N-1}.nginx.default.svc.cluster.local    web-{0..N-1}    

cluster.local    foo/nginx    foo/web    nginx.foo.svc.cluster.local    web-{0..N-1}.nginx.foo.svc.cluster.local    web-{0..N-1}    

kube.local    foo/nginx    foo/web    nginx.foo.svc.kube.local    web-{0..N-1}.nginx.foo.svc.kube.local    web-{0..N-1}    

3)穩定的存儲

 kubernetes為每一個VolumeClaimTemplate創建一個PV。在上述nginx的示例中,每一個POD將獲得一個大小為1G的PV。當POD被調度到一個節點上的時候,volumeMounts將通過與之綁定的PVC掛載PV。

說明:與PVC綁定的PV不會因POD或statefulset刪除而刪除,需要手動執行刪除。

保證部署和伸縮

  • 對于statefulset的N個副本,當POD被部署,它們將是有序的,[0..N-1]

  • 當POD被刪除,它們將按反向的順序終止,先終止N-1的POD

  • 在伸縮操作應用到POD之前,必須保證之前所有POD的狀態是running且ready。

  • 在POD被終止之前,所有當前序號之后的POD必須完全關閉

StatefulSet不應該指定pod.Spec.TerminationGracePeriodSeconds為0。這種做法是不安全的,強烈勸阻。為進一步解釋,請參閱強制刪除StatefulSet POD。

上面的nginx例子創建后,三個POD將按web-0 web-1 web-2順序部署。web-1不會在web-0 running并ready之前部署,web-2直到web-1處于running并ready狀態后才會開始部署。web-1 running且ready之后,但web-2還未啟動,此時如果web-0故障,web-2將不會被啟動,直到web-0成功被重啟并達到running且ready的狀態。

如果一個用戶修改已部署的statefulset,例如replicas=1,web-2會先被終止。web-1將不會終止,直到web-2完全關閉和刪除。web-2已經終止并完全關閉,但在web-1終止前,此時如果web-0故障,web-1將不會被終止,直到web-0處于running且ready的狀態。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女