1. 程式人生 > >kubernetes 滾動更新

kubernetes 滾動更新

set grace ini 版本 mina desc mman exp pau

示例:

創建一個app:
kubectl create deployment nginx --image=nginx:1.11

創建service
kubectl expose deployment nginx --port=80 --type=NodePort

擴縮容:
kubectl scale deployment nginx --replicas=5

修改鏡像,滾動更新:
kubectl set image deployment nginx nginx=nginx:1.10

或者
kubectl edit deployment/nginx

查看更新狀態:
kubectl rollout status deployment nginx

終止升級
kubectl rollout pause deployment/nginx

繼續升級
kubectl rollout resume deployment/nginx

回滾
kubectl rollout undo deployment/nginx

回滾到指定版本
kubectl rollout undo deployment/nginx --to-revision=2

查看滾動版本:
kubectl rollout history deployment nginx

查看信息:
kubectl describe deployment/nginx

幾個重要參數說明
maxSurge與maxUnavailable

maxSurge: 1 表示滾動升級時會先啟動1個pod
maxUnavailable: 1 表示滾動升級時允許的最大Unavailable的pod個數
由於replicas為3,則整個升級,pod個數在2-4個之間

terminationGracePeriodSeconds
k8s將會給應用發送SIGTERM信號,可以用來正確、優雅地關閉應用,默認為30秒。

如果需要更優雅地關閉,則可以使用k8s提供的pre-stop lifecycle hook 的配置聲明,將會在發送SIGTERM之前執行。

livenessProbe與readinessProbe
livenessProbe是kubernetes認為該pod是存活的,不存在則需要kill掉,然後再新啟動一個,以達到replicas指定的個數。

readinessProbe是kubernetes認為該pod是啟動成功的,這裏根據每個應用的特性,自己去判斷,可以執行command,也可以進行httpGet。比如對於使用java web服務的應用來說,並不是簡單地說tomcat啟動成功就可以對外提供服務的,還需要等待spring容器初始化,數據庫連接連接上等等。對於spring boot應用,默認的actuator帶有/health接口,可以用來進行啟動成功的判斷。

其中readinessProbe.initialDelaySeconds可以設置為系統完全啟動起來所需的最少時間,livenessProbe.initialDelaySeconds可以設置為系統完全啟動起來所需的最大時間+若幹秒。

kubernetes 滾動更新