iT邦幫忙

1

Kubernetes - Update Your App

  • 分享至 

  • xImage
  •  

Performing a Rolling Update

  • 使用kubectl執行滾動式更新

在真實的世界中,user期望他使用到的服務永遠不會中斷,而開發人員則希望不論何時部署版本都沒有問題,而在k8s中是透過滾動式更新(Rolling updates)來達成,滾動式更新允許你的Deployment在更新時透過新增Pods instance,以實現zero dowmtime,而新增出來的Pods則會去尋找可用的Nodes資源

在k8s中的任何更新都是版本化的,可以回復到以前的版本
以下這段真的翻不出來,放上原文

In the previous module we scaled our application to run multiple instances. This is a requirement for performing updates without affecting application availability. By default, the maximum number of Pods that can be unavailable during the update and the maximum number of new Pods that can be created, is one. Both options can be configured to either numbers or percentages (of Pods). In Kubernetes, updates are versioned and any Deployment update can be reverted to a previous (stable) version.

Deployment近似於app scaling,當Deployment是公開的,則Service會在update期間進行負載平衡將流量輸送到可用Pods,這代表了在更新期間用戶會訪問到這些可用的Pods

滾動式更新有以下的特點

  • Promote an application from one environment to another (via container image updates)
  • Rollback to previous versions
  • Continuous Integration and Continuous Delivery of applications with zero downtime

Interactive Tutorial - Updating Your App

Step 1: Update the version of the app

  • 取得deployment list kubectl get deployments

  • 列出正在運行的Pods kubectl get pods

  • 將app image版本更新到version 2,使用 set image 將會通知Deployment使用不一樣的image給你的app,並開使rolling update kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2,並使用 kubectl get pods 觀察滾動式更新的情形

Step 2: Verify an update

  • 使用 describe service 找出運行中的app,以及app的NodePort & IP kubectl describe services/kubernetes-bootcamp

  • 導出為環境變數 export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') echo NODE_PORT=$NODE_PORT

  • 用curl訪問API,每次都會從不同的Pod得到response,並這時的版本是v2 curl $(minikube ip):$NODE_PORT

  • 使用 kubectl rollout status deployments/kubernetes-bootcamp 查看滾動式更新狀況

  • 最後查看Pods的image資訊會是v2 kubectl describe pods

Step 3: Rollback an update

  • 使用另一個v10版本更新 kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10

  • 查看deployment的狀況 kubectl get deployments

  • 查看Pods的狀況 kubectl get pods 此時會發現拉取image失敗的訊息『ImagePullBackOff』,並在 Events的部分可以查看到錯誤訊息

  • 使用 kubectl rollout undo deployments/kubernetes-bootcamp 回復到上一個版本(v2)

  • 查看Pods狀況 kubectl get pods 可以看到正常運行

  • 最後查看Pods的詳細資訊,會使用v2版本運作中 kubectl describe pods

參考

心得

翻譯文件去看英文真的是蠻累的,至少花了三倍的時間,因為還要製作文章
然後來回比對去查看不太懂的地方,不過到後來速度有起來,有比較熟練,算是很值得
而且說實在的一開始的教學是k8s的整個基本面,只能硬啃
後面有一些load-balance或是一些部署的東西就是擅長的地方,加上前面的練習就是如魚得水
所以一天直接產出兩篇XD
後續的話會根據k8s實際的需求、應用、管理、優化、實際案例這幾個方向去著手進行
把積了兩年的東西給學掉有一種如釋負重的感覺


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言