老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

kubernetes關于statefulset的理解

概述
RC、Deployment、DaemonSet都是面向無狀態的服務,它們所管理的Pod的IP、名字,啟停順序等都是隨機的,而StatefulSet是什么?顧名思義,有狀態的集合,管理所有有狀態的服務,比如MySQL、MongoDB集群等。
StatefulSet本質上是Deployment的一種變體,在v1.9版本中已成為GA版本,它為了解決有狀態服務的問題,它所管理的Pod擁有固定的Pod名稱,啟停順序,在StatefulSet中,Pod名字稱為網絡標識(hostname),還必須要用到共享存儲。
在Deployment中,與之對應的服務是service,而在StatefulSet中與之對應的headless service,headless service,即無頭服務,與service的區別就是它沒有Cluster IP,解析它的名稱時將返回該Headless Service對應的全部Pod的Endpoint列表。
除此之外,StatefulSet在Headless Service的基礎上又為StatefulSet控制的每個Pod副本創建了一個DNS域名,這個域名的格式為:

寧海網站建設公司成都創新互聯公司,寧海網站設計制作,有大型網站制作公司豐富經驗。已為寧海上千家提供企業網站建設服務。企業網站搭建\成都外貿網站建設公司要多少錢,請找那個售后服務好的寧海做網站的公司定做!

$(podname).(headless server name)
FQDN: $(podname).(headless server name).namespace.svc.cluster.local
StatefulSet示例
接下來看一些示例,演示下上面所說的特性,以加深理解。

apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:

  • port: 80
    name: web
    clusterIP: None
    selector:
    app: nginx

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
    name: web
    spec:
    selector:
    matchLabels:
    app: nginx # has to match .spec.template.metadata.labels
    serviceName: "nginx" #聲明它屬于哪個Headless Service.
    replicas: 3 # by default is 1
    template:
    metadata:
    labels:
    app: nginx # has to match .spec.selector.matchLabels
    spec:
    terminationGracePeriodSeconds: 10
    containers:

    • name: nginx
      image: k8s.gcr.io/nginx-slim:0.8
      ports:
      • containerPort: 80
        name: web
        volumeMounts:
      • name: www
        mountPath: /usr/share/nginx/html
        volumeClaimTemplates: #可看作pvc的模板
  • metadata:
    name: www
    spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: "gluster-heketi" #存儲類名,改為集群中已存在的
    resources:
    requests:
    storage: 1Gi
    通過該配置文件,可看出StatefulSet的三個組成部分:

Headless Service:名為nginx,用來定義Pod網絡標識( DNS domain)。
StatefulSet:定義具體應用,名為Nginx,有三個Pod副本,并為每個Pod定義了一個域名。
volumeClaimTemplates: 存儲卷申請模板,創建PVC,指定pvc名稱大小,將自動創建pvc,且pvc必須由存儲類供應。
為什么需要 headless service 無頭服務?
在用Deployment時,每一個Pod名稱是沒有順序的,是隨機字符串,因此是Pod名稱是無序的,但是在statefulset中要求必須是有序 ,每一個pod不能被隨意取代,pod重建后pod名稱還是一樣的。而pod IP是變化的,所以是以Pod名稱來識別。pod名稱是pod唯一性的標識符,必須持久穩定有效。這時候要用到無頭服務,它可以給每個Pod一個唯一的名稱 。
為什么需要volumeClaimTemplate?
對于有狀態的副本集都會用到持久存儲,對于分布式系統來講,它的最大特點是數據是不一樣的,所以各個節點不能使用同一存儲卷,每個節點有自已的專用存儲,但是如果在Deployment中的Pod template里定義的存儲卷,是所有副本集共用一個存儲卷,數據是相同的,因為是基于模板來的 ,而statefulset中每個Pod都要自已的專有存儲卷,所以statefulset的存儲卷就不能再用Pod模板來創建了,于是statefulSet使用volumeClaimTemplate,稱為卷申請模板,它會為每個Pod生成不同的pvc,并綁定pv, 從而實現各pod有專用存儲。這就是為什么要用volumeClaimTemplate的原因。

創建:

$ kubectl create -f nginx.yaml
service "nginx" created
statefulset "web" created
看下這三個Pod創建過程:

#第一個是創建web-0
$ kubectl get pod
web-0 1/1 ContainerCreating 0 51s

#待web-0 running且ready時,創建web-1
$ kubectl get pod
web-0 1/1 Running 0 51s
web-1 0/1 ContainerCreating 0 42s

#待web-1 running且ready時,創建web-2
$ kubectl get pod
web-0 1/1 Running 0 1m
web-1 1/1 Running 0 45s
web-2 1/1 ContainerCreating 0 36s

#最后三個Pod全部running且ready
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 4m
web-1 1/1 Running 0 3m
web-2 1/1 Running 0 1m
根據volumeClaimTemplates自動創建的PVC

$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
www-web-0 Bound pvc-ecf003f3-828d-11e8-8815-000c29774d39 2G RWO gluster-heketi 7m
www-web-1 Bound pvc-0615e33e-828e-11e8-8815-000c29774d39 2G RWO gluster-heketi 6m
www-web-2 Bound pvc-43a97acf-828e-11e8-8815-000c29774d39 2G RWO gluster-heketi 4m
如果集群中沒有StorageClass的動態供應PVC的機制,也可以提前手動創建多個PV、PVC,手動創建的PVC名稱必須符合之后創建的StatefulSet命名規則:(volumeClaimTemplates.name)-(pod_name)

Statefulset名稱為web 三個Pod副本: web-0,web-1,web-2,volumeClaimTemplates名稱為:www,那么自動創建出來的PVC名稱為www-web[0-2],為每個Pod創建一個PVC。
規律總結:

匹配Pod name(網絡標識)的模式為:$(statefulset名稱)-$(序號),比如上面的示例:web-0,web-1,web-2。
StatefulSet為每個Pod副本創建了一個DNS域名,這個域名的格式為: $(podname).(headless server name),也就意味著服務間是通過Pod域名來通信而非Pod IP,因為當Pod所在Node發生故障時,Pod會被飄移到其它Node上,Pod IP會發生變化,但是Pod域名不會有變化。
StatefulSet使用Headless服務來控制Pod的域名,這個域名的FQDN為:$(service name).$(namespace).svc.cluster.local,其中,“cluster.local”指的是集群的域名。
根據volumeClaimTemplates,為每個Pod創建一個pvc,pvc的命名規則匹配模式:(volumeClaimTemplates.name)-(pod_name),比如上面的volumeMounts.name=www, Pod name=web-[0-2],因此創建出來的PVC是www-web-0、www-web-1、www-web-2。
刪除Pod不會刪除其pvc,手動刪除pvc將自動釋放pv。
關于Cluster Domain、headless service名稱、StatefulSet 名稱如何影響StatefulSet的Pod的DNS域名的示例:
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}
Statefulset的啟停順序:

有序部署:部署StatefulSet時,如果有多個Pod副本,它們會被順序地創建(從0到N-1)并且,在下一個Pod運行之前所有之前的Pod必須都是Running和Ready狀態。
有序刪除:當Pod被刪除時,它們被終止的順序是從N-1到0。
有序擴展:當對Pod執行擴展操作時,與部署一樣,它前面的Pod必須都處于Running和Ready狀態。 
Statefulset Pod管理策略:
在v1.7以后,通過允許修改Pod排序策略,同時通過.spec.podManagementPolicy字段確保其身份的唯一性。

OrderedReady:上述的啟停順序,默認設置。
Parallel:告訴StatefulSet控制器并行啟動或終止所有Pod,并且在啟動或終止另一個Pod之前不等待前一個Pod變為Running and Ready或完全終止。
StatefulSet使用場景:

穩定的持久化存儲,即Pod重新調度后還是能訪問到相同的持久化數據,基于PVC來實現。
穩定的網絡標識符,即Pod重新調度后其PodName和HostName不變。
有序部署,有序擴展,基于init containers來實現。
有序收縮。
更新策略
在Kubernetes 1.7及更高版本中,通過.spec.updateStrategy字段允許配置或禁用Pod、labels、source request/limits、annotations自動滾動更新功能。
OnDelete:通過.spec.updateStrategy.type 字段設置為OnDelete,StatefulSet控制器不會自動更新StatefulSet中的Pod。用戶必須手動刪除Pod,以使控制器創建新的Pod。
RollingUpdate:通過.spec.updateStrategy.type 字段設置為RollingUpdate,實現了Pod的自動滾動更新,如果.spec.updateStrategy未指定,則此為默認策略。
StatefulSet控制器將刪除并重新創建StatefulSet中的每個Pod。它將以Pod終止(從最大序數到最小序數)的順序進行,一次更新每個Pod。在更新下一個Pod之前,必須等待這個Pod Running and Ready。
Partitions:通過指定 .spec.updateStrategy.rollingUpdate.partition 來對 RollingUpdate 更新策略進行分區,如果指定了分區,則當 StatefulSet 的 .spec.template 更新時,具有大于或等于分區序數的所有 Pod 將被更新。
具有小于分區的序數的所有 Pod 將不會被更新,即使刪除它們也將被重新創建。如果 StatefulSet 的 .spec.updateStrategy.rollingUpdate.partition 大于其 .spec.replicas,則其 .spec.template 的更新將不會傳播到 Pod。在大多數情況下,不需要使用分區。


名稱欄目:kubernetes關于statefulset的理解
文章URL:http://www.xueling.net.cn/article/jcgopo.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 美女的大奶 | 天堂中文最新版在线中文 | 国产精品第一区揄拍 | 久久午夜视频 | 久久九九国产视频 | 丰满人妻无奈张开双腿AV | 精品国产一区三区 | 性一交一无一伦一精一品 | X8X8国产在线观看 | 色欲AV永久无码精品无码蜜桃 | 欧洲av网| 亚洲国产成人久久久 | 日本爽快片视频 | 1717she国产精品高清在线观看 | 噼里啪啦动漫在线观看免费 | 久久亚洲国产精品成人AV秋霞 | 午夜成人爽爽爽视频在线观看 | 国产96在线 | 91短视频在线免费观看 | 91免费网站在线观看 | 日本中文字幕一区二区 | 青青视频一区二区 | 国产熟女精品视频国语 | 亚洲中文字幕精品久久久久久动漫 | 丨国产丨调教丨91丨 | 动漫av一区二区在线观看 | 亚洲AV无码精品久久久久成精品 | 爽到高潮无码视频在线观看 | 超碰在线天天 | 日韩精品一区二区三区免费观影 | 亚洲第一精品夜夜躁人人爽 | 欧美黑人性受 | 大香伊蕉最新视频 | 色噜噜狠狠狠综合曰曰曰 | 在线影院一区 | 国精产品一区一区三区mba视频 | 一级黄色在线观看 | 国产精品自在拍一区二区不卡 | 成人全黄A片免费看香港 | 久久久久久久 | 国产一级毛片久久 |