成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何在Kubernetes中管理有狀態(tài)應(yīng)用

KaltZK / 1288人閱讀

摘要:在中,被用來管理有狀態(tài)應(yīng)用的對(duì)象。并行管理并行管理告訴控制器以并行的方式啟動(dòng)或者終止所有的。如果設(shè)置為,則控制器將會(huì)刪除和重建中的每一。在大部分的情況下,不會(huì)使用分隔當(dāng)希望進(jìn)行金絲雀發(fā)布,或者執(zhí)行階段發(fā)布時(shí),分隔是很有用的。

在Kubernetes中,StatefulSet被用來管理有狀態(tài)應(yīng)用的API對(duì)象。StatefulSets在Kubernetes 1.9版本才穩(wěn)定。StatefulSet管理Pod部署和擴(kuò)容,并為這些Pod提供順序和唯一性的保證。與Deployment相似的地方是,StatefulSet基于spec規(guī)格管理Pod;與Deployment不同的地方是,StatefulSet需要維護(hù)每一個(gè)Pod的唯一身份標(biāo)識(shí)。這些Pod基于同樣的spec創(chuàng)建,但互相之間不能替換,每一個(gè)Pod都保留自己的持久化標(biāo)識(shí)。


1、使用StatefulSet的場(chǎng)景

對(duì)于下面的應(yīng)用場(chǎng)景,StatefulSets是有價(jià)值的:

穩(wěn)定、唯一的網(wǎng)絡(luò)標(biāo)識(shí)

穩(wěn)定、持久的存儲(chǔ)

按照順序、優(yōu)雅的部署和擴(kuò)容

按照順序、優(yōu)雅的刪除和終止

按照順序、自動(dòng)滾動(dòng)更新

上述的穩(wěn)定是持久的同義詞,如果應(yīng)用不需要穩(wěn)定的標(biāo)識(shí)或者順序的部署、刪除、擴(kuò)容,則應(yīng)該使用無狀態(tài)的副本集。Deployment或者ReplicaSet的控制器更加適合無狀態(tài)業(yè)務(wù)場(chǎng)景。

2、StatefulSet的限制

在Kubernetes 1.9版本之前是beta版本,在Kubernetes 1.5版本之前是不提供的。

Pod存儲(chǔ)由PersistentVolume(storage類或者管理員預(yù)先創(chuàng)建)提供。

刪除或者縮容StatefulSet不會(huì)刪除與StatefulSet關(guān)聯(lián)的數(shù)據(jù)卷,這樣能夠保證數(shù)據(jù)的安全性。

當(dāng)前的StatefulSets需要一個(gè)Headless服務(wù)來為Pod提供網(wǎng)絡(luò)標(biāo)識(shí),此Headless服務(wù)需要通過手工創(chuàng)建。

3、組件

下面是一個(gè)StatefuleSet組成的示例:

一個(gè)名稱為nginx的Headless服務(wù),用來控制網(wǎng)絡(luò)域。

一個(gè)名稱為web的statefulSet,它擁有nginx容器(在唯一的Pod啟動(dòng))的3個(gè)副本集。

使用PersistenVolumes(由PersistentVolume
Provisioner提供)提供穩(wěn)定存儲(chǔ)的volumeClaimTemplates。

apiVersion:v1
kind:Service
metadata:
  name:nginx
  labels:
     app:nginx
spec:
  ports:
  -port:80
     name:web
  clusterIP:None //Headless服務(wù)
  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"
  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: #掛接數(shù)據(jù)卷
         -name:www
           mountPath:/usr/share/nginx/html #掛接路徑為容器的/usr/share/nginx/html
  volumeClaimTemplates: #數(shù)據(jù)卷生命模板
  -metadata:
       name:www
     spec:
       accessModes:["ReadWriteOnce"]
       storageClassName:my-storage-class
       resources:
         requests:
           storage:1Gi 
4、Pod選擇器

必須設(shè)置StatefulSet的sepc.selector,以匹配.spec.template.metadata.labels。在Kubernetes 1.8之前,spec.selector是可以忽略的,它被設(shè)置一個(gè)默認(rèn)值。在1.8或者后續(xù)的版本,如果不設(shè)置sepc.selector,則會(huì)導(dǎo)致創(chuàng)建StatefulSet失敗。

5、Pod身份標(biāo)識(shí)

StatfuleSet Pod擁有一個(gè)唯一的身份標(biāo)識(shí),它由順序、穩(wěn)定的網(wǎng)絡(luò)標(biāo)識(shí)和穩(wěn)定的存儲(chǔ)所組成。此身份標(biāo)識(shí)一直跟隨著Pod,不過它被調(diào)度到那個(gè)Node上。

5.1 序數(shù)索引(Ordinal Index)

對(duì)于擁有N個(gè)副本集的StatefulSet,在StatefulSet中的每一個(gè)Pod都會(huì)被指派一個(gè)整型的序數(shù),此序數(shù)在0和N之間,在整個(gè)集合中是唯一的。

5.2 網(wǎng)絡(luò)ID(Stable Network ID)

在StatefulSet中,每一個(gè)Pod的主機(jī)名稱都由StatefulSet的名稱和序數(shù)所組成。Pod的主機(jī)名稱的格式:$(statefulset name)-$(ordinal)。如果創(chuàng)建了三個(gè)Pod,這他們的主機(jī)名稱為web-0,web-1,web-2。StatefulSet能夠使用Headless服務(wù)來控制Pod的域。Service管理的域的格式為:$(service name).$(namespace).svc.cluster.local,cluster.local是集群域。對(duì)于每一個(gè)被創(chuàng)建的Pod,它將得到一個(gè)DNS子域,格式為: $(podname).$(governing service domain),這里的管理服務(wù)在StatefulSet中,通過serviceName設(shè)置。

下面是StatefulSet中Pod在DNS中的名稱:

5.3 穩(wěn)定的存儲(chǔ)

kubernetes為每一個(gè)VolumeClaimTemplate創(chuàng)建一個(gè)對(duì)應(yīng)的PersistentVolume。在前面的nginx實(shí)例中,每一個(gè)Pod將會(huì)my-storage-class存儲(chǔ)類型的PersistenVolume單一實(shí)例和1Gib的存儲(chǔ)空間。

如果沒有指定存儲(chǔ)類,則會(huì)使用默認(rèn)的存儲(chǔ)。但一個(gè)Pod被調(diào)度到Node上,它的volumeMounts將會(huì)掛接PersistentVolumes,并將其與PersistentVolumeClaims進(jìn)行關(guān)聯(lián)。需要注意的是,即使在Pod被刪除,PersistentVolumes與PersistentVolumeClaims之間的關(guān)聯(lián)關(guān)系也不會(huì)被刪除。

5.4 Pod命名標(biāo)簽

當(dāng)StatefulSet控制器創(chuàng)建了Pod,它將會(huì)添加一個(gè)標(biāo)簽,為此Pod名稱的集合。此標(biāo)簽將能夠管理服務(wù)到指定的Pod。

6、部署和擴(kuò)容保證

對(duì)于一個(gè)帶有N個(gè)副本集的StatefulSet,當(dāng)Pod被部署,它們將按0到N-1的順序被創(chuàng)建。

當(dāng)一Pod被刪除時(shí),它們將按照N-1到0的倒序被終止。

在進(jìn)行Pod擴(kuò)容前,所有依賴的Pod應(yīng)該都已在運(yùn)行和準(zhǔn)備好。

在Pod被終止前,所有的依賴它的Pod都必須完全停止。

在前文創(chuàng)建的nginx例子中,將按照順序部署web-0,web-1和web-2。web-1只能在web-0運(yùn)行和準(zhǔn)備好以后才能夠被部署,web-2只能在web-1運(yùn)行和準(zhǔn)備好以后才能夠被部署。如果web-0失敗,就算web-1正在運(yùn)行,web-2也是不能正常啟動(dòng)的,除非web-0被重啟,并正常運(yùn)行。

如果縮容上述例子,設(shè)置replicas=1,則web-2首先被終止,接著是web-1。如果在web-2被終止后,但在web-1被終止前,web-0失敗了,web-1將不能被終止,除非web-0處于正常運(yùn)行狀態(tài)。

6.1 Pod管理策略

在Kubernetes 1.7以后,StatefulSet的唯一性標(biāo)識(shí)可以通過.spec.podManagementPolicy的值進(jìn)行保證。

6.1.1 OrderedReady Pod管理

OrderedReady pod管理是StatefulSets默認(rèn)的管理模式,此模式安裝順序啟動(dòng)或者終止Pod。

6.1.2 并行Pod管理

并行Pod管理告訴StatefulSet控制器以并行的方式啟動(dòng)或者終止所有的Pod。

7、更新策略

在Kubernetes 1.7之后,運(yùn)行通過配置StatefulSet的.spec.updateStrategy,實(shí)現(xiàn)Pod的容器、標(biāo)簽、資源請(qǐng)求/限制和注釋自動(dòng)更新。

7.1 On Delete策略

OnDelete更新策略是1.6之前版本的行為。當(dāng)StatefulSet的.spec.updateStrategy.type被設(shè)置為OnDelete,則StatefulSet控制器將不會(huì)知道更新Pod。

7.2 Rolling Updates策略

RollingUpdate更新策略將實(shí)現(xiàn)StatefulSet中Pod的自動(dòng)滾動(dòng)更新,這是StatefulSet的默認(rèn)更新模式。如果.spec.updateStrategy.type設(shè)置為 RollingUpdate,則StatefulSet控制器將會(huì)刪除和重建StatefulSet中的每一Pod。它將會(huì)按照從最大到最小的序數(shù)終止Pod,并按照從小到大順序重建Pod。

7.3 Partitions

RollingUpdate更新策略能夠通過指定.spec.updateStrategy.rollingUpdate.partition進(jìn)行分隔。當(dāng)分隔被指定,所有序數(shù)大于或等于分隔的Pod將會(huì)被更新,其它的Pod將被不會(huì)進(jìn)行更新。在大部分的情況下,不會(huì)使用分隔;當(dāng)希望進(jìn)行金絲雀發(fā)布,或者執(zhí)行階段發(fā)布時(shí),分隔是很有用的。

作者簡(jiǎn)介: 季向遠(yuǎn),北京神舟航天軟件技術(shù)有限公司產(chǎn)品經(jīng)理。本文版權(quán)歸原作者所有。

微信號(hào):RancherLabs

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/32665.html

相關(guān)文章

  • 零基礎(chǔ)入門│帶你理解Kubernetes

    摘要:的核心是以容器為中心的管理環(huán)境。命名空間提供了名稱范圍。換句話說,確保或同類組始終可用。用于管理有狀態(tài)應(yīng)用程序,它管理一組的部署和擴(kuò)展,并提供有關(guān)這些的排序和唯一性的保證。 條分縷析帶你充分理解Kubernetes的各個(gè)細(xì)節(jié)與部分:它是什么,它如何解決容器編排問題,它包含哪些你必須掌握的關(guān)鍵對(duì)象,以及如何快速上手部署使用Kubernetes。 showImg(https://segme...

    DevWiki 評(píng)論0 收藏0
  • 來說說Kubernetes的運(yùn)作機(jī)制

    摘要:提供用于獲取有關(guān)容器和容器組狀態(tài)的實(shí)時(shí)信息的服務(wù),以及有關(guān)群集中開發(fā)人員操作的詳細(xì)信息。集群最高級(jí)別的抽象是指運(yùn)行本身是集群應(yīng)用程序的一組機(jī)器及其管理的容器,一個(gè)集群必須有一個(gè),即命令和控制集群中所有其他機(jī)器的系統(tǒng)。Docker容器改變了人們對(duì)開發(fā)、部署和維護(hù)軟件的思考方式,利用現(xiàn)代操作系統(tǒng)的本機(jī)隔離功能,容器支持類似于虛擬機(jī)的關(guān)注點(diǎn)分離,但是與基于虛擬機(jī)監(jiān)控程序的虛擬機(jī)相比,它的開銷要小得...

    yanest 評(píng)論0 收藏0
  • 混合云環(huán)境擴(kuò)展Kubernetes的挑戰(zhàn)及方案

    摘要:本文分享了擴(kuò)展以及管理混合云環(huán)境時(shí)可能遇到的挑戰(zhàn),以及如何簡(jiǎn)單高效地完成擴(kuò)展??缭茢U(kuò)展的挑戰(zhàn)你已經(jīng)決定使用云了,所以讓我們回過頭來思考一下最初的問題。節(jié)點(diǎn)組件是中的。在向上或向下擴(kuò)展或調(diào)整集群大小時(shí),為部署命中公有,響應(yīng)狀態(tài)代碼始終為。 流量突增時(shí),我們需要擴(kuò)展應(yīng)用程序以滿足用戶需求。本文分享了擴(kuò)展Kubernetes以及管理混合云環(huán)境時(shí)可能遇到的挑戰(zhàn),以及如何簡(jiǎn)單高效地完成Kuber...

    wwq0327 評(píng)論0 收藏0
  • Kubernetes 如何打贏容器之戰(zhàn)?

    摘要:此時(shí),一些聰明的技術(shù)公司紛紛跟進(jìn),推出了自家的容器集群管理項(xiàng)目,并且稱之為。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。管理集群的所有行為例如應(yīng)用調(diào)度改變應(yīng)用的狀態(tài),擴(kuò)縮容,更新降級(jí)應(yīng)用等。 showImg(https://segmentfault.com/img/remote/1460000018689306); 阿里妹導(dǎo)讀:Kubernetes 近幾年很熱門,在各大技術(shù)論壇上被...

    shiguibiao 評(píng)論0 收藏0
  • TOP100summit分享實(shí)錄 | JFrog高欣:Kubernetes is hard!JFro

    摘要:本文內(nèi)容節(jié)選自由主辦的第七屆,架構(gòu)師高欣分享的的實(shí)踐實(shí)錄。當(dāng)然,在部署完成后,我們要做一個(gè)監(jiān)測(cè)以便掌握它的運(yùn)行狀況。規(guī)劃配置運(yùn)行環(huán)境在正式部署前,還要考慮如何規(guī)劃并配置好運(yùn)行環(huán)境。在使用部署時(shí),可以利用這些命令做驗(yàn)證,檢驗(yàn)部署是否正常。 showImg(https://segmentfault.com/img/bVblRHj?w=2880&h=1920); 本文內(nèi)容節(jié)選自由msup主辦...

    鄒強(qiáng) 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<