Statefulset 實(shí)戰(zhàn) 3
上一部分我們說(shuō)到如何使用 Statefulset 部署有狀態(tài)的應(yīng)用,Statefulset 可以做到部署的 每一個(gè) pod 能夠獨(dú)立的擁有一個(gè)持久卷聲明和持久卷
之前我們 用 Statefulset ?和 ReplicaSet 對(duì)比,自然他們是有相似之處和不同之處,不同之處前面的文章已經(jīng)分享了,我們來(lái)看看他們的相似之處,那么那就是對(duì)于管理副本數(shù)的擴(kuò)容和縮容了
Statefulset 擴(kuò)容和縮容
查看我們環(huán)境中擁有的 1 個(gè) Statefulset ?和其管理的 2 個(gè) pod

以及 2 個(gè)持久卷聲明 pvc ?和 2 個(gè)持久卷 pv

開(kāi)始手動(dòng)刪除一個(gè) pod

當(dāng)我們手動(dòng)刪除 sta-kubia-0 的時(shí)候,由于 Statefulset ?自身管理的副本數(shù)是 2 個(gè),通過(guò)標(biāo)簽發(fā)現(xiàn)環(huán)境中少了一個(gè) pod,因此 Statefulset 會(huì)立馬創(chuàng)建一個(gè)和剛才少的那個(gè)一模一樣的 pod
通過(guò)我們查看 pod 的名稱和索引值是我們所期望的,并且是 curl 訪問(wèn) pod 的提供的接口,獲取的相應(yīng)數(shù)據(jù)也是我們所期望的
修改副本個(gè)數(shù)為 3
修改副本數(shù),只需要 kubectl get statefulset
修改 spec 下的 replicas 字段即可

修改副本數(shù)之后,通過(guò)如下命令查看相應(yīng)資源情況
kubectl?get?statefulset
kubectl?edit?statefulset?sta-kubia
kubectl?get?po?|?grep?sta
kubectl?get?pv
kubectl?get?pvc

副本數(shù)修改為 3 后,Statefulset 進(jìn)行了擴(kuò)容,我們發(fā)現(xiàn)確實(shí)是創(chuàng)建了一個(gè) pod,索引為 2 ,也同時(shí)創(chuàng)建 1 給 pvc 和 pv,實(shí)際操作后,效果和我們理論的效果是一致的
將副本數(shù)修改為 1
那么我們現(xiàn)在開(kāi)始縮容,效果會(huì)不會(huì)和我們理論上的還是一樣的呢?

操作和上述類似,將副本數(shù)修改為 1 即可

進(jìn)行縮容之后,我們可以看到 索引為 3 和 2 的 兩個(gè) pod 都被刪掉了,但是他們的 持久化卷聲明和持久化卷仍然還在,當(dāng)然里面的數(shù)據(jù)也是還在的,感興趣的小伙伴可以嘗試使用 curl 命令去請(qǐng)求一下,結(jié)果會(huì)如你所愿
將副本數(shù)修改回 3
那么現(xiàn)在我們?cè)龠M(jìn)行擴(kuò)容,Statefulset 是否會(huì)將剛才刪除的 2 個(gè) pod全部恢復(fù)回來(lái)呢?要恢復(fù)成一模一樣的哦?

咱們查看到效果果然和我們理論的一毛一樣,沒(méi)有偏差哦
sta-kubia-1 和 sta-kubia-2 又回來(lái)了,有沒(méi)有失而復(fù)得的喜悅呢?
Statefulset 說(shuō),我說(shuō)到做到,之前給你說(shuō)是啥樣子的,現(xiàn)在我就會(huì)做成啥樣子給你看,還不錯(cuò)吧
圖解上述案例
如圖,分為 3 步驟,該圖是用來(lái)表示我們手動(dòng)或者由于異常刪除了一個(gè) pod,此時(shí) Statefulset 的副本數(shù)是 2

刪除了 1 個(gè)pod ?sta-kubia-1
sta-kubia-1 對(duì)應(yīng)的 卷還是在環(huán)境中的,是沒(méi)有被刪除的
Statefulset 通過(guò)標(biāo)簽識(shí)別到少了 1 個(gè) pod,因此會(huì)重新創(chuàng)建 1 個(gè) pod,這個(gè) pod 和原來(lái)的 pod 一模一樣,標(biāo)識(shí),狀態(tài)等等完全一致,新建的 pod sta-kubia-1 仍然直接使用原來(lái)的 卷 1
下圖是表示修改 Statefulset ?的 replicas 進(jìn)行擴(kuò)縮容
同樣也是分 3 步驟

環(huán)境中 repilicas 副本數(shù) 為 3 ,通過(guò)編輯 Statefulset ?,將副本數(shù)修改為 1,此時(shí) k8s 會(huì)從最高索引,由大到小的刪除,最終剩下 1 個(gè) pod ,也就是 sta-kubia-0
刪除掉 2 個(gè) pod 之后,仍然是保留了原有 pod 的卷,Statefulset ?是不會(huì)去刪除卷的
人為的將 repilicas 副本數(shù)從 1 修改為 3,Statefulset 會(huì)如何我們所想的重新恢復(fù)原有的 2 個(gè) pod,即 sta-kubia-1,和 sta-kubia-2,這倆pod 仍然可以直接使用原來(lái)的卷 1 和 卷 2
看到這里了,有沒(méi)有發(fā)現(xiàn) Statefulset 和 Deployment 有一個(gè)共同點(diǎn),那就是 Statefulset ?刪除 pod 的時(shí)候,不會(huì)去刪除卷,Deployment ?在滾動(dòng)升級(jí)的時(shí)候,不會(huì)刪除 RS/RS
所以我們是否可以聯(lián)想到 Statefulset 的升級(jí),也是可以像 Deployment ?一樣可以支持滾動(dòng)升級(jí)呢?
沒(méi)錯(cuò),確實(shí)是可以的,以前不太行,k8s 從 1.7 版本之后就支持了,操作的方式和 Deployment 類似,如果對(duì)于 Deployment 顯示升級(jí)應(yīng)用的細(xì)節(jié)有疑問(wèn)的,可以查看文章 【k8s 系列】k8s 學(xué)習(xí)二十五-2,Deployment 升級(jí)應(yīng)用
今天就到這里,學(xué)習(xí)所得,若有偏差,還請(qǐng)斧正
歡迎點(diǎn)贊,關(guān)注,收藏
朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力

好了,本次就到這里
技術(shù)是開(kāi)放的,我們的心態(tài),更應(yīng)是開(kāi)放的。擁抱變化,向陽(yáng)而生,努力向前行。
我是阿兵云原生,歡迎點(diǎn)贊關(guān)注收藏,下次見(jiàn)~