您好,登錄后才能下訂單哦!
小編給大家分享一下Kubernetes服務(wù)中StatefulSets有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
StatefulSets在v1.5時還是個beta特性,它取代了v1.4的PetSets特性。PetSets的用戶可以參考v1.5的升級指導(dǎo),將正在運(yùn)行的PeetSets升級到StatefulSets。
StatefulSet是一個給Pod提供唯一標(biāo)志的控制器,它可以保證部署和擴(kuò)展的順序。
當(dāng)應(yīng)用有以下任意要求時,StatefulSet的價值就體現(xiàn)出來了。
● 穩(wěn)定的、唯一的網(wǎng)絡(luò)標(biāo)識。
● 穩(wěn)定的、持久化的存儲。
● 有序的、優(yōu)雅的部署和擴(kuò)展。
● 有序的、優(yōu)雅的刪除和停止。
上面提到的點(diǎn)中,在Pod調(diào)度時,穩(wěn)定性和持久化是同一個意思。如果一個應(yīng)用不需要任何穩(wěn)定的標(biāo)識或順序的部署、刪除和擴(kuò)展,那么你應(yīng)該使用提供無狀態(tài)備份的控制器來部署你的應(yīng)用。諸如Deployment或者ReplicaSet可能更適合你的無狀態(tài)服務(wù)需求。
● StatefulSet還是beta版本,Kubernetes v1.5之前不可用。
● 和所有的alpha/beta資源一樣,可以將--runtime-config選項傳遞給apiserver,來禁止StatefulSet。
● 給定Pod的存儲必須是:基于請求存儲等級(Storage Class)的PersistentVolume Provisioner,或者是由管理員預(yù)先配置。
● 刪除和(或)減少StatefulSet副本,不會刪除StatefulSet相關(guān)的卷。這樣做是為了保證數(shù)據(jù)安全,比自動的清除StatefulSet相關(guān)資源更有價值。 ● 當(dāng)前StatefulSet需要Headless服務(wù)來負(fù)責(zé)Pod的網(wǎng)絡(luò)一致性。你需要創(chuàng)建該服務(wù)。
● 當(dāng)前,更新已經(jīng)存在的StatefulSet需要手動執(zhí)行。
下面的示例演示了StatefulSet的組件。
● 一個Headless服務(wù),名為nginx,用來控制網(wǎng)絡(luò)域。
● StatefulSet,名為web,在同一個Pod中起3個nginx容器的副本。
● volumeClaimTemplates使用PV供應(yīng)商的PV來提供穩(wěn)定的存儲。
--- 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: web spec: serviceName: "nginx" replicas: 3 template: metadata: labels: app: nginx spec: terminationGracePeriodSeconds: 10 containers: - name: nginx image: 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
StatefulSet Pod有著唯一的一致性,該一致性包含次序(啟動和停止次序)、穩(wěn)定的網(wǎng)絡(luò)一致性,和穩(wěn)定的網(wǎng)絡(luò)。該一致性和Pod緊密相關(guān),無論P(yáng)od被調(diào)度到哪個node節(jié)點(diǎn)上。
對于有N個副本的StatefulSet,StatefulSet的每個Pod都被分配了一個數(shù)字序號,序號在[0,N)的范圍內(nèi),并且在Set中是唯一的。
StatefulSet中每個Pod都從StatefulSet的名稱和Pod的序號派生其主機(jī)名。組成的hostname的模式為$(statefulset名稱)-$(序號)
。上面的例子會創(chuàng)建名為web-0,web-1,web-2
。StatefulSet可以以使用Headless服務(wù)來控制Pod的域,這個域使用的格式為:$(service name).$(namespace).svc.cluster.local
,其中,“cluster.local”指的是集群域。Pod被創(chuàng)建后,每個Pod都會得到一個匹配的DNS子域,格式為$(podname).$(governing service domain)
,其中的“governing service”是在StatefulSet中通過serviceName
字段來定義的。
這里有幾個示例,可以展示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} |
注意:除非另外的配置,集群域就會被設(shè)置為cluster.local 。 |
Kubernetes為每個VolumeClaimTemplate創(chuàng)建一個PV。在上面的nginx例子中,每個Pod會得到一個PV,該P(yáng)V的存儲等級(storagee class)為anything
,大小為1Gb。當(dāng)Pod被調(diào)度到其他node節(jié)點(diǎn)上時,volumeMounts
會重新映射對應(yīng)的PVC。注意,當(dāng)Pod或者StatefulSet被刪除時,對應(yīng)的PV和PVC不會被刪除,這個刪除操作必須手動來執(zhí)行。
● 對于擁有N個拷貝的StatefulSet,當(dāng)部署Pod時,它們會被順序地創(chuàng)建(從0到N-1)。
● 當(dāng)Pod被刪除時,它們被終止的順序是從N-1到0。
● 當(dāng)對Pod執(zhí)行擴(kuò)展操作時,它前面的Pod必須都處于Running和Ready
狀態(tài)。
● 當(dāng)Pod被終止時,它所有的successors都必須被完全地關(guān)閉。
不應(yīng)該將StatefulSet的pod.Spec.TerminationGracePeriodSeconds
值設(shè)置為0,因為該操作不安全,強(qiáng)烈不建議使用。若需要更深層次的解釋,請參考強(qiáng)制刪除StatefulSet Pod。
當(dāng)創(chuàng)建了上面的nginx示例后,會按順序部署三個Pod,名字依次為web-0、web-1和web-2。web--1在web-0變?yōu)镽unning and Ready之后才會再部署,同理,web-2也會等web-1變?yōu)镽unning and Ready狀態(tài)后才部署。如果在web-1變?yōu)镽unning and Ready之后,但web-2還沒有啟動之前,此時web-0運(yùn)行失敗了,那么直到web-0再次成功啟動并變?yōu)镽unning and Ready之前,web-2都不會啟動。
如果用戶希望改變上面例子中Pod的個數(shù),比如修改replicas=1
,那么web-2首先被終止。直到web-2完全被關(guān)閉和刪除后,web-1才會被終止。如果在web-2被終止和完全關(guān)閉后,但web-1還沒有被終止之前,此時web-0運(yùn)行出錯了,那么直到web-0再次變?yōu)镽unning and Ready狀態(tài)之后,web-1才會被終止。
以上是“Kubernetes服務(wù)中StatefulSets有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。