更新APP-執(zhí)行滾動(dòng)更新

目標(biāo):

  • 使用kubectl做一次滾動(dòng)更新

更新一個(gè)應(yīng)用

用戶期望應(yīng)用一直是可用的,而開發(fā)者期望一天部署多次新版本。
在k8s里,這是通過(guò)滾動(dòng)更新來(lái)實(shí)現(xiàn)的。
Rolling updates允許增量更新新的Pods實(shí)例,部署的更新以零宕機(jī)時(shí)間進(jìn)行。新的Pod將在具有可用資源的節(jié)點(diǎn)上進(jìn)行調(diào)度。、
在之前的單元里,我們伸縮app以達(dá)到運(yùn)行多個(gè)實(shí)例的目的。這是一種不影響應(yīng)用可用的執(zhí)行更新的需求。默認(rèn)情況下,Pod實(shí)例的最大個(gè)數(shù)在更新期間是不可用的,而且可以新創(chuàng)建的新Pod也只能是一個(gè)。無(wú)論P(yáng)od的個(gè)數(shù)和百分比都是可以配置的。在k8s中,更新都是由版本的,而且無(wú)論什么時(shí)候的部署更新都能被回退到之前的(穩(wěn)定)版本。

總結(jié):

  • 更新應(yīng)用

滾動(dòng)更新允許部署的更新以零宕機(jī)時(shí)間的增量更新Pod實(shí)例來(lái)完成。

滾動(dòng)更新概覽

image.png
image.png
image.png
image.png

與伸縮應(yīng)用類似,如果部署被公開暴露了,服務(wù)將對(duì)流量做負(fù)載均衡到可用的Pod。一個(gè)可用的Pod是一個(gè)用戶可用的應(yīng)用實(shí)例。
滾動(dòng)更新包括以下幾個(gè)步驟:

  • 通過(guò)image更新,將應(yīng)用從一個(gè)環(huán)境推廣到另外一個(gè)環(huán)境
  • 回滾到之前的版本
  • 零宕機(jī)時(shí)間的持續(xù)集成和持續(xù)應(yīng)用分發(fā)

如果一個(gè)部署被公開暴露了出來(lái),更新期間服務(wù)將會(huì)把流量負(fù)載均衡到可用的Pod。

  • 通過(guò)kubectl set image更新一個(gè)已部署的應(yīng)用
  • 使用kubectl rollout undo回滾到之前的版本

更新app的版本

主要看image字段
kubectl describe pods
都是Image: gcr.io/google-samples/kubernetes-bootcamp:v1

升級(jí)應(yīng)用image到version 2
命令:set image + 部署名 + 新的image版本

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

deployment "kubernetes-bootcamp" image updated

驗(yàn)證更新

檢查正在運(yùn)行的App。我們可以用describe service找出外露IP和端口。
kubectl describe services/kubernetes-bootcamp

設(shè)置NODE_PORT變量

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT

NODE_PORT=32427

驗(yàn)證更新
curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7689dc585d-7b2gk | v=2

確認(rèn)更新
kubectl rollout status deployments/kubernetes-bootcamp
deployment "kubernetes-bootcamp" successfully rolled out

查看image版本
kubectl describe pods
Image: jocatalin/kubernetes-bootcamp:v2

回滾更新

升級(jí)deployments/kubernetes-bootcamp到v10
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10

kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 4 5 2 3 17m

kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-5569c6b8d6-86248 0/1 ImagePullBackOff 0 4m
kubernetes-bootcamp-5569c6b8d6-8cn6l 0/1 ImagePullBackOff 0 4m
kubernetes-bootcamp-7689dc585d-847df 1/1 Running 0 13m
kubernetes-bootcamp-7689dc585d-vk68v 1/1 Running 0 13m
kubernetes-bootcamp-7689dc585d-x7q9j 1/1 Running 0 13m

回滾到上一個(gè)版本(更新錯(cuò)誤時(shí)使用,比如我們的repo中沒(méi)有v10但卻set了image)
kubectl rollout undo deployments/kubernetes-bootcamp
deployment "kubernetes-bootcamp"

此時(shí)再查看部署
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 4 4 4 4 4m

期待和大家交流,共同進(jìn)步,歡迎大家加入我創(chuàng)建的與前端開發(fā)密切相關(guān)的技術(shù)討論小組:

努力成為優(yōu)秀前端工程師!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Kubernetes(K8S)中文文檔_Kubernetes中文社區(qū) Kubernetes基礎(chǔ) 在集群上規(guī)模化,帶...
    任嘉平生愿閱讀 455評(píng)論 0 0
  • Kubernetes官網(wǎng)為我們準(zhǔn)備了最小可用系統(tǒng),我們可以借此來(lái)快速了解Kubernetes。 訪問(wèn)地址如下: h...
    localThread閱讀 474評(píng)論 0 0
  • kubernetes(簡(jiǎn)稱K8s)是一個(gè)開源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用。 在之前的文章中,我介紹...
    萬(wàn)家千搗忙閱讀 3,502評(píng)論 0 0
  • 這幾天沈陽(yáng)一直下雨,因?yàn)槭芫盘?hào)臺(tái)風(fēng)影響,店里不如天熱時(shí)那么忙了,我起來(lái)的比較晚,睡到了自然醒了,兩個(gè)孩子看我開始工...
    孫貴云閱讀 405評(píng)論 1 3
  • 定風(fēng)波?頌兮蘭 文/竹蘭答水 百里松花橫眼前,踏青端午棹龍船。回想清明風(fēng)也似,重至。慎終懷遠(yuǎn)緬先賢。 香草美人...
    竹蘭答水閱讀 276評(píng)論 5 5

友情鏈接更多精彩內(nèi)容