k8s 如何升級(jí)應(yīng)用
如何升級(jí)應(yīng)用
在之前的分享中,我們知道一個(gè)程序如何放到容器中,一個(gè)鏡像如何生成 pod, pod 的創(chuàng)建,運(yùn)行,管理,刪除過程,掛載等等
那么我們有沒有想過,在真正的生產(chǎn)環(huán)境中,我們的一個(gè)應(yīng)用程序,不可能就只有一個(gè)版本,一定會(huì)隨著時(shí)間不斷迭代的,那么,當(dāng)我們需要替換上我們新版本的程序的時(shí)候,我們需要如何替換上新的程序,而又不影響服務(wù)端的運(yùn)行呢?
我們替換程序的時(shí)候,我們可以有 2 個(gè)選擇:
可以先刪掉舊的 pod,然后創(chuàng)建新的 pod
可以先創(chuàng)建新的 pod, 然后刪除舊的 pod
可以先刪掉舊的 pod,然后創(chuàng)建新的 pod
正常情況下,我們?cè)賮砘仡櫼幌?pod 都是如何被 Service ?和 ReplicaSet / ReplicationController 管理的

如上圖,我們可以知道,多個(gè) pod 是被 RS 或者 RC 管理的,可以進(jìn)行擴(kuò)容和縮容,他們是通過標(biāo)簽來選擇的,Service 同樣也是通過標(biāo)簽來選定的
那么先刪掉舊的 pod,然后創(chuàng)建新的 pod有啥優(yōu)缺點(diǎn)呢?
優(yōu)點(diǎn)
操作比較簡單,可以直接利用 RC/RS 的擴(kuò)縮容,直接刪除 pod ,然后 RC/RS 會(huì)通過標(biāo)簽識(shí)別到 pod 的數(shù)量變少,進(jìn)而通過新的鏡像來創(chuàng)建 pod
缺點(diǎn)
會(huì)導(dǎo)致自身的服務(wù)有一段時(shí)間不能正常提供服務(wù)
我們畫個(gè)圖來分享一下先刪除 v1 版本的 pod,然后創(chuàng)建 v2 版本的 pod 的過程

一開始 RS 中的指定模板是 v1 版本的鏡像,先創(chuàng)建了 3 個(gè) v1 版本的 pod,然后將 RS 的鏡像版本改成 v2 版本的,但是由于設(shè)定的 pod 數(shù)量沒有變化,因此 pod 的實(shí)際版本還是 v1

現(xiàn)在將 v1 版本的 pod 刪掉,RS 會(huì)馬上創(chuàng)建出指定數(shù)量的 v2 版本的 pod ,在這個(gè)過程中,服務(wù)的提供會(huì)出現(xiàn)一定時(shí)間的中斷
可以先創(chuàng)建新的 pod, 然后刪除舊的 pod
那么先創(chuàng)建新的 pod,再刪除舊的 pod 我們的思路又是如何的呢,我們可以分享一下?
這個(gè)的優(yōu)點(diǎn)是:
應(yīng)用提供的服務(wù)不會(huì)中斷
這個(gè)的缺點(diǎn)是:
操作比較麻煩,不符合生產(chǎn)流程,比較繁瑣
有一段時(shí)間同時(shí)有 2 個(gè)版本的應(yīng)用程序?qū)ν馓峁┓?wù),這個(gè)時(shí)候,如果服務(wù)的數(shù)據(jù)對(duì)于版本有一定的要求的話,可能會(huì)出現(xiàn)異常

一開始,RS 1 設(shè)定的 pod 模板是 v1 版本的,這個(gè)時(shí)候,我們 RS2 指定 v2 版本的 pod 模板,并創(chuàng)建出新的 pod

確定 RS 2 新的 pod 運(yùn)行正常后,我們將 Service 的流量通過修改標(biāo)簽的方式,將流量切到 v2 版本的 pod 上面

最后設(shè)置 RS 1 的指定 pod 數(shù)量為 0,進(jìn)而刪除掉 v1 版本的 pod,最后 Service 的流量就完全的切到了 v2 版本的 pod 上面了
今天就到這里,學(xué)習(xí)所得,若有偏差,還請(qǐng)斧正
歡迎點(diǎn)贊,關(guān)注,收藏
朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力

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