摘要:有狀態(tài)集群服務(wù),與普通有狀態(tài)服務(wù)相比,它多了集群管理的需求。為此開發(fā)了一套以為核心的全新特性,方便了有狀態(tài)集群服務(wù)在上的部署和管理。
2016年12月2日,時(shí)速云架構(gòu)師張壽紅應(yīng)邀參加ArchSummit2016全球架構(gòu)師峰會(huì),并在微服務(wù)與容器實(shí)踐專場(chǎng)做了《Kubernetes有狀態(tài)集群服務(wù)部署與管理》的干貨分享。
現(xiàn)場(chǎng)演講圖
由于篇幅關(guān)系,第一部分Kubernetes相關(guān)概念略過不提,本文將結(jié)合分享內(nèi)容,對(duì)《Kubernetes有狀態(tài)服務(wù)部署與管理》之K8S存儲(chǔ)系統(tǒng)做重點(diǎn)闡述。對(duì)K8S有狀態(tài)服務(wù)特性:Init Container 和 Pet Set感興趣的伙伴,請(qǐng)關(guān)注《Kubernetes有狀態(tài)集群服務(wù)部署與管理(下)》
在K8S運(yùn)行的服務(wù),從簡(jiǎn)單到復(fù)雜可以分成三類:無狀態(tài)服務(wù)、普通有狀態(tài)服務(wù)和有狀態(tài)集群服務(wù)。下面分別來看K8S是如何運(yùn)行這三類服務(wù)的。
無狀態(tài)服務(wù),K8S使用RC(或更新的Replica Set)來保證一個(gè)服務(wù)的實(shí)例數(shù)量,如果說某個(gè)Pod實(shí)例由于某種原因Crash了,RC會(huì)立刻用這個(gè)Pod的模版新啟一個(gè)Pod來替代它,由于是無狀態(tài)的服務(wù),新啟的Pod與原來健康狀態(tài)下的Pod一模一樣。在Pod被重建后它的IP地址可能發(fā)生變化,為了對(duì)外提供一個(gè)穩(wěn)定的訪問接口,K8S引入了Service的概念。一個(gè)Service后面可以掛多個(gè)Pod,實(shí)現(xiàn)服務(wù)的高可用。
普通有狀態(tài)服務(wù),和無狀態(tài)服務(wù)相比,它多了狀態(tài)保存的需求。Kubernetes提供了以Volume和Persistent Volume為基礎(chǔ)的存儲(chǔ)系統(tǒng),可以實(shí)現(xiàn)服務(wù)的狀態(tài)保存。
有狀態(tài)集群服務(wù),與普通有狀態(tài)服務(wù)相比,它多了集群管理的需求。K8S為此開發(fā)了一套以Pet Set為核心的全新特性,方便了有狀態(tài)集群服務(wù)在K8S上的部署和管理。具體來說是通過Init Container來做集群的初始化工作,用 Headless Service 來維持集群成員的穩(wěn)定關(guān)系,用動(dòng)態(tài)存儲(chǔ)供給來方便集群擴(kuò)容,最后用Pet Set來綜合管理整個(gè)集群。
要運(yùn)行有狀態(tài)集群服務(wù)要解決的問題有兩個(gè),一個(gè)是狀態(tài)保存,另一個(gè)是集群管理。 我們先來看如何解決第一個(gè)問題:狀態(tài)保存。Kubernetes 有一套以Volume插件為基礎(chǔ)的存儲(chǔ)系統(tǒng),通過這套存儲(chǔ)系統(tǒng)可以實(shí)現(xiàn)應(yīng)用和服務(wù)的狀態(tài)保存。
K8S的存儲(chǔ)系統(tǒng)從基礎(chǔ)到高級(jí)又大致分為三個(gè)層次:普通Volume,Persistent Volume 和動(dòng)態(tài)存儲(chǔ)供應(yīng)。
1.普通Volume最簡(jiǎn)單的普通Volume是單節(jié)點(diǎn)Volume。它和Docker的存儲(chǔ)卷類似,使用的是Pod所在K8S節(jié)點(diǎn)的本地目錄。
第二種類型是跨節(jié)點(diǎn)存儲(chǔ)卷,這種存儲(chǔ)卷不和某個(gè)具體的K8S節(jié)點(diǎn)綁定,而是獨(dú)立于K8S節(jié)點(diǎn)存在的,整個(gè)存儲(chǔ)集群和K8S集群是兩個(gè)集群,相互獨(dú)立。
跨節(jié)點(diǎn)的存儲(chǔ)卷在Kubernetes上用的比較多,如果已有的存儲(chǔ)不能滿足要求,還可以開發(fā)自己的Volume插件,只需要實(shí)現(xiàn)Volume.go 里定義的接口。如果你是一個(gè)存儲(chǔ)廠商,想要自己的存儲(chǔ)支持Kubernetes 上運(yùn)行的容器,就可以去開發(fā)一個(gè)自己的Volume插件。
2.persistent volume它和普通Volume的區(qū)別是什么呢?
普通Volume和使用它的Pod之間是一種靜態(tài)綁定關(guān)系,在定義Pod的文件里,同時(shí)定義了它使用的Volume。Volume 是Pod的附屬品,我們無法多帶帶創(chuàng)建一個(gè)Volume,因?yàn)樗皇且粋€(gè)獨(dú)立的K8S資源對(duì)象。
而Persistent Volume 簡(jiǎn)稱PV是一個(gè)K8S資源對(duì)象,所以我們可以多帶帶創(chuàng)建一個(gè)PV。它不和Pod直接發(fā)生關(guān)系,而是通過Persistent Volume Claim,簡(jiǎn)稱PVC來實(shí)現(xiàn)動(dòng)態(tài)綁定。Pod定義里指定的是PVC,然后PVC會(huì)根據(jù)Pod的要求去自動(dòng)綁定合適的PV給Pod使用。
PV的訪問模式有三種:
第一種,ReadWriteOnce:是最基本的方式,可讀可寫,但只支持被單個(gè)Pod掛載。
第二種,ReadOnlyMany:可以以只讀的方式被多個(gè)Pod掛載。
第三種,ReadWriteMany:這種存儲(chǔ)可以以讀寫的方式被多個(gè)Pod共享。不是每一種存儲(chǔ)都支持這三種方式,像共享方式,目前支持的還比較少,比較常用的是NFS。在PVC綁定PV時(shí)通常根據(jù)兩個(gè)條件來綁定,一個(gè)是存儲(chǔ)的大小,另一個(gè)就是訪問模式。
剛才提到說PV與普通Volume的區(qū)別是動(dòng)態(tài)綁定,我們來看一下這個(gè)過程是怎樣的。
這是PV的生命周期,首先是Provision,即創(chuàng)建PV,這里創(chuàng)建PV有兩種方式,靜態(tài)和動(dòng)態(tài)。所謂靜態(tài),是管理員手動(dòng)創(chuàng)建一堆PV,組成一個(gè)PV池,供PVC來綁定。動(dòng)態(tài)方式是通過一個(gè)叫 Storage Class的對(duì)象由存儲(chǔ)系統(tǒng)根據(jù)PVC的要求自動(dòng)創(chuàng)建。
一個(gè)PV創(chuàng)建完后狀態(tài)會(huì)變成Available,等待被PVC綁定。
一旦被PVC邦定,PV的狀態(tài)會(huì)變成Bound,就可以被定義了相應(yīng)PVC的Pod使用。
Pod使用完后會(huì)釋放PV,PV的狀態(tài)變成Released。
變成Released的PV會(huì)根據(jù)定義的回收策略做相應(yīng)的回收工作。有三種回收策略,Retain、Delete 和 Recycle。Retain就是保留現(xiàn)場(chǎng),K8S什么也不做,等待用戶手動(dòng)去處理PV里的數(shù)據(jù),處理完后,再手動(dòng)刪除PV。Delete 策略,K8S會(huì)自動(dòng)刪除該P(yáng)V及里面的數(shù)據(jù)。Recycle方式,K8S會(huì)將PV里的數(shù)據(jù)刪除,然后把PV的狀態(tài)變成Available,又可以被新的PVC綁定使用。
在實(shí)際使用場(chǎng)景里,PV的創(chuàng)建和使用通常不是同一個(gè)人。這里有一個(gè)典型的應(yīng)用場(chǎng)景:管理員創(chuàng)建一個(gè)PV池,開發(fā)人員創(chuàng)建Pod和PVC,PVC里定義了Pod所需存儲(chǔ)的大小和訪問模式,然后PVC會(huì)到PV池里自動(dòng)匹配最合適的PV給Pod使用。
前面在介紹PV的生命周期時(shí),提到PV的供給有兩種方式,靜態(tài)和動(dòng)態(tài)。其中動(dòng)態(tài)方式是通過StorageClass來完成的,這是一種新的存儲(chǔ)供應(yīng)方式。
使用StorageClass有什么好處呢?除了由存儲(chǔ)系統(tǒng)動(dòng)態(tài)創(chuàng)建,節(jié)省了管理員的時(shí)間,還有一個(gè)好處是可以封裝不同類型的存儲(chǔ)供PVC選用。在StorageClass出現(xiàn)以前,PVC綁定一個(gè)PV只能根據(jù)兩個(gè)條件,一個(gè)是存儲(chǔ)的大小,另一個(gè)是訪問模式。在StorageClass出現(xiàn)后,等于增加了一個(gè)綁定維度。
比如這里就有兩個(gè)StorageClass,它們都是用谷歌的存儲(chǔ)系統(tǒng),但是一個(gè)使用的是普通磁盤,我們把這個(gè)StorageClass命名為slow。另一個(gè)使用的是SSD,我們把它命名為fast。
在PVC里除了常規(guī)的大小、訪問模式的要求外,還通過annotation指定了Storage Class的名字為fast,這樣這個(gè)PVC就會(huì)綁定一個(gè)SSD,而不會(huì)綁定一個(gè)普通的磁盤。
到這里Kubernetes的整個(gè)存儲(chǔ)系統(tǒng)就都介紹完了。總結(jié)一下,兩種存儲(chǔ)卷:普通Volume 和Persistent Volume。普通Volume在定義Pod的時(shí)候直接定義,Persistent Volume通過Persistent Volume Claim來動(dòng)態(tài)綁定。PV可以手動(dòng)創(chuàng)建,也可以通過StorageClass來動(dòng)態(tài)創(chuàng)建。
Tips: 關(guān)注時(shí)速云公眾號(hào)(tenxcloud2),回復(fù) "1206 "即可獲得下載現(xiàn)場(chǎng)PPT。
下篇文章將介紹Kubernetes與有狀態(tài)集群服務(wù)相關(guān)的兩個(gè)新特性:Init Container 和 Pet Set。敬請(qǐng)關(guān)注!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/32531.html
摘要:千呼萬喚始出來,有狀態(tài)集群服務(wù)部署與管理下將著重介紹與有狀態(tài)集群服務(wù)相關(guān)的兩個(gè)新特性和。把這些特性和有狀態(tài)集群服務(wù)關(guān)聯(lián)起來串一下,我們可以用來管理一個(gè)有狀態(tài)服務(wù)集群,里每個(gè)對(duì)應(yīng)集群的一個(gè)成員,集群的初始化可以用來完成。 千呼萬喚始出來,《Kubernetes有狀態(tài)集群服務(wù)部署與管理(下)》將著重介紹Kubernetes與有狀態(tài)集群服務(wù)相關(guān)的兩個(gè)新特性:Init Container 和 ...
摘要:來源商業(yè)新知網(wǎng),原標(biāo)題干貨分享云服務(wù)平臺(tái)的架構(gòu)及優(yōu)勢(shì)上前言我們通常所說的云服務(wù)或云平臺(tái)廣義上是一個(gè)概念,但其實(shí)內(nèi)部是兩個(gè)部分。本期我們?yōu)槟庾x云平臺(tái)的業(yè)界概況和優(yōu)勢(shì)。來源商業(yè)新知網(wǎng),原標(biāo)題:【干貨分享】云服務(wù)平臺(tái)的架構(gòu)及優(yōu)勢(shì)(上)前言 我們通常所說的云服務(wù)或云平臺(tái)廣義上是一個(gè)概念,但其實(shí)內(nèi)部是兩個(gè)部分。 1.支撐云服務(wù)運(yùn)行的硬件和軟件系統(tǒng)環(huán)境(云架構(gòu)平臺(tái),簡(jiǎn)稱云平臺(tái)); 2.實(shí)現(xiàn)業(yè)務(wù)邏輯,支...
摘要:使用命名空間的概念幫助解決集群中在管理對(duì)象時(shí)的復(fù)雜性問題。命名空間為集群中的對(duì)象名稱賦予作用域。同樣,命名空間范圍的策略允許運(yùn)維人員為生產(chǎn)環(huán)節(jié)設(shè)置嚴(yán)格的權(quán)限。這會(huì)修改操作在活躍時(shí)應(yīng)用到的命名空間。 K8s使用命名空間的概念幫助解決集群中在管理對(duì)象時(shí)的復(fù)雜性問題。在本文中,會(huì)討論命名空間的工作原理,介紹常用實(shí)例,并分享如何使用命名空間來管理K8s對(duì)象。最后,介紹名為projects的Ra...
閱讀 1528·2021-11-24 09:38
閱讀 3377·2021-11-18 10:02
閱讀 3267·2021-09-22 15:29
閱讀 2952·2021-09-22 15:15
閱讀 1055·2021-09-13 10:25
閱讀 1874·2021-08-17 10:13
閱讀 2004·2021-08-04 11:13
閱讀 1985·2019-08-30 15:54