歡迎各位讀者評(píng)論留言,共同學(xué)習(xí),共同進(jìn)步。
《kubernetes權(quán)威指南》筆記
上一節(jié)見1.4kubernetes基本概念和術(shù)語(2)
5. Deployment
- Deployment是1.2版本之后引入,為了更好的解決pod編排問題。
- Deployment相對(duì)于RC的一個(gè)最大升級(jí)是我們可以隨時(shí)知道當(dāng)前Pod“部署”的進(jìn)度。實(shí)際上由于一個(gè)Pod的創(chuàng)建、調(diào)度、綁定節(jié)點(diǎn)及在目標(biāo)Node上啟動(dòng)對(duì)應(yīng)的容器這一完整過程需要一定的時(shí)間,所以我們期待系統(tǒng)啟動(dòng)N個(gè)Pod副本的目標(biāo)狀態(tài),實(shí)際上是一個(gè)連續(xù)變化的“部署過程”導(dǎo)致的最終狀態(tài)。
RC 、RS、Deployment的區(qū)別:
Replication Contoller: 支持Pod擴(kuò)縮,只支持Equal條件
Replica Set: 支持模糊包含條件,其他與RC相同
Deployment: 相對(duì)RC,在內(nèi)部使用了Replica Set來實(shí)現(xiàn)目的,同時(shí)它可以隨時(shí)知道當(dāng)前Pod部署進(jìn)度。
- 應(yīng)用場(chǎng)景:
◎ 創(chuàng)建一個(gè)Deployment對(duì)象來生成對(duì)應(yīng)的Replica Set并完成Pod副本的創(chuàng)建。
◎ 檢查Deployment的狀態(tài)來看部署動(dòng)作是否完成(Pod副本數(shù)量是否達(dá)到預(yù)期的值)。
◎ 更新Deployment以創(chuàng)建新的Pod(比如鏡像升級(jí))。
◎ 如果當(dāng)前Deployment不穩(wěn)定,則回滾到一個(gè)早先的Deployment版本。
◎ 暫停Deployment以便于一次性修改多個(gè)PodTemplateSpec的配置項(xiàng),之后再恢復(fù)Deployment,進(jìn)行新的發(fā)布。
◎ 擴(kuò)展Deployment以應(yīng)對(duì)高負(fù)載。
◎ 查看Deployment的狀態(tài),以此作為發(fā)布是否成功的指標(biāo)。
◎ 清理不再需要的舊版本ReplicaSets。
6.Horizontal Pod Autoscaler (HPA)
- HPA(Pod橫向自動(dòng)擴(kuò)容)目的是為了使分布式系統(tǒng)要能夠根據(jù)當(dāng)前負(fù)載的變化自動(dòng)觸發(fā)水平擴(kuò)容或縮容。
- 實(shí)現(xiàn)原理:通過追蹤分析指定RC控制的所有目標(biāo)Pod的負(fù)載變化情況,來確定是否需要有針對(duì)性地調(diào)整目標(biāo)Pod的副本數(shù)量。
- Pod負(fù)載的度量指標(biāo):
◎ CPUUtilizationPercentage。
1). 指目標(biāo)Pod所有副本自身的CPU利用率的平均值,一個(gè)Pod自身的CPU利用率是該P(yáng)od當(dāng)前CPU的使用量除以它的Pod Request的值。
2).如果目標(biāo)Pod沒有定義Pod Request的值,則無法使用CPUUtilizationPercentage實(shí)現(xiàn)Pod橫向自動(dòng)擴(kuò)容。
◎ 應(yīng)用程序自定義的度量指標(biāo),比如服務(wù)在每秒內(nèi)的相應(yīng)請(qǐng)求數(shù)(TPS或QPS)。
除了可以通過直接定義YAML文件并且調(diào)用kubectrl create的命令來創(chuàng)建一個(gè)HPA資源對(duì)象的方式,還可以通過下面的簡(jiǎn)單命令行直接創(chuàng)建等價(jià)的HPA對(duì)象。
$ kubectl autoscale deployment .. ..
7.Stateful Set
- 用于管理有狀態(tài)的集群:
(1)每個(gè)節(jié)點(diǎn)都有固定的身份ID,通過這個(gè)ID,集群中的成員可以相互發(fā)現(xiàn)并通信。
(2)集群的規(guī)模是比較固定的,集群規(guī)模不能隨意變動(dòng)。
(3)集群中的每個(gè)節(jié)點(diǎn)都是有狀態(tài)的,通常會(huì)持久化數(shù)據(jù)到永久存儲(chǔ)中。
(4)如果磁盤損壞,則集群里的某個(gè)節(jié)點(diǎn)無法正常運(yùn)行,集群功能受損。 - Stateful Set的特性:
(1) StatefulSet里的每個(gè)Pod都有穩(wěn)定、唯一的網(wǎng)絡(luò)標(biāo)識(shí),可以用來發(fā)現(xiàn)集群內(nèi)的其他成員。假設(shè)StatefulSet的名稱為kafka,那么第1個(gè)Pod叫kafka-0,第2個(gè)叫kafka-1,以此類推。(有序命名)
(2)StatefulSet控制的Pod副本的啟停順序是受控的,操作第n個(gè)Pod時(shí),前n-1個(gè)Pod已經(jīng)是運(yùn)行且準(zhǔn)備好的狀態(tài)。(有序啟停)
(3)StatefulSet里的Pod采用穩(wěn)定的持久化存儲(chǔ)卷,通過PV或PVC來實(shí)現(xiàn),刪除Pod時(shí)默認(rèn)不會(huì)刪除與StatefulSet相關(guān)的存儲(chǔ)卷(為了保證數(shù)據(jù)的安全)。()
(4)StatefulSet除了要與PV卷捆綁使用以存儲(chǔ)Pod的狀態(tài)數(shù)據(jù),還要與Headless Service配合使用,使得每個(gè)pod要生成對(duì)應(yīng)的DNS域名。(實(shí)現(xiàn)穩(wěn)定持久化存儲(chǔ)狀態(tài)數(shù)據(jù))
${podname}.${headlesss service name}