備戰(zhàn)CKA每日一題——第7天 | deployment的升級(jí)、回滾、滾動(dòng)更新策略、roll、set image命令解釋、initContainer考題

本活動(dòng)在微信公眾號(hào)【我的小碗湯】上舉行,有送書活動(dòng)!這里參與答題不能參與到送書活動(dòng)哦!

昨日考題

通過命令行,創(chuàng)建1個(gè)deployment,副本數(shù)為3,鏡像為nginx:latest。然后滾動(dòng)升 級(jí)到nginx:1.9.1,再回滾到原來的版本
要求:Deployment的名稱為cka-1125,貼出用到的相關(guān)命令。
最好附帶創(chuàng)建的Deployment完整yaml,以及和升級(jí)回滾有關(guān)的命令。

昨日答案

先創(chuàng)建deployment,可以用命令創(chuàng)建:

kubectl run cka-1125  --image=nginx --replicas=3

也可以用以下yaml:cka-1125.yaml創(chuàng)建

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cka-1125
  name: cka-1125
spec:
  replicas: 3
  selector:
    matchLabels:
      app: cka-1125
  template:
    metadata:
      labels:
        app: cka-1125
    spec:
      containers:
      - image: nginx
        name: cka-1125

創(chuàng)建:

kubectl apply -f cka-1125.yaml

升級(jí):

kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record
deployment.extensions/cka-1125 image updated

回滾:

# 回滾到上一個(gè)版本
kubectl rollout undo deploy/cka-1125
# 回滾到指定版本
kubectl rollout undo deploy/cka-1125 --to-revision=2

昨日解析

官方中set image命令:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#set

set image命令

set image命令格式如下:

kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N [--record]

--record指定,在annotation中記錄當(dāng)前的kubectl命令。 如果設(shè)置為false,則不記錄命令。 如果設(shè)置為true,則記錄命令。 默認(rèn)為false。

[root@liabio test]# kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record
deployment.extensions/cka-1125 image updated
[root@liabio test]# 
[root@liabio test]# kubectl rollout history deploy/cka-1125 
deployment.extensions/cka-1125 
REVISION  CHANGE-CAUSE
3         <none>
4         kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record=true

像上面這樣,CHANGE-CAUSE中會(huì)有升級(jí)命令。

set image命令可以對(duì):pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), replicaset (rs),statefulset(sts)進(jìn)行操作。

roll命令

roll命令官方文檔:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#rollout

可以管理deployments、daemonsets、statefulsets資源的回滾:

查詢升級(jí)歷史:

[root@liabio test]# kubectl rollout history deploy/cka-1125 
deployment.extensions/cka-1125 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

查看指定版本的詳細(xì)信息:

kubectl rollout history deploy/cka-1125 --revision=3 -o=yaml

回滾到上一個(gè)版本:

[root@liabio test]# kubectl rollout undo deploy/cka-1125 
deployment.extensions/cka-1125 rolled back

或者回滾到指定版本:

[root@liabio test]# kubectl rollout undo deploy/cka-1125 --to-revision=3
deployment.extensions/cka-1125 rolled back

其他roll子命令

restart:資源將重新啟動(dòng);
status:展示回滾狀態(tài);
resume:恢復(fù)被暫停的資源。控制器不會(huì)控制被暫停的資源。通過恢復(fù)資源,可以讓控制器再次控制。 resume僅對(duì)deployment支持。
pause:控制器不會(huì)控制被暫停的資源。 使用kubectl rollout resume來恢復(fù)暫停的資源。 當(dāng)前,只有deployment支持被暫停。

滾動(dòng)更新策略

滾動(dòng)更新官網(wǎng)文檔:
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

minReadySeconds: 5
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 1

minReadySeconds
Kubernetes在等待設(shè)置的時(shí)間后才進(jìn)行升級(jí)
如果沒有設(shè)置該值,Kubernetes會(huì)假設(shè)該容器啟動(dòng)起來后就提供服務(wù)了
如果沒有設(shè)置該值,在某些極端情況下可能會(huì)造成服務(wù)服務(wù)正常運(yùn)行

maxSurge

控制滾動(dòng)更新過程中副本總數(shù)超過DESIRED的上限。maxSurge可以是具體的整數(shù),也可以是百分比,向上取整。maxSurge默認(rèn)值為25%。

例如DESIRED為10,那么副本總數(shù)的最大值為roundUp(10 + 10*25%)=13,所以CURRENT為13。

maxUnavaible
控制滾動(dòng)更新過程中,不可用副本占DESIRED的最大比例。maxUnavailable可以是具體的整數(shù),也可以是百分之百,向下取整。默認(rèn)值為25%。

例如DESIRED為10,那么可用的副本數(shù)至少要為 10-roundDown(10*25%)=8所以AVAILABLE為8。

maxSurge越大,初始創(chuàng)建的新副本數(shù)量就越多;maxUnavailable越大,初始銷毀的舊副本數(shù)目就越多。

今日考題

提供一個(gè)pod的yaml,要求添加Init Container,Init Container的作用是創(chuàng)建一個(gè)空文件,pod的Containers判斷文件是否存在,不存在則退出
注意:附帶Pod完整yaml

作者簡(jiǎn)介

作者:小碗湯,一位熱愛、認(rèn)真寫作的小伙,目前維護(hù)原創(chuàng)公眾號(hào):『我的小碗湯』,專注于寫linux、golang、docker、kubernetes等知識(shí)等提升硬實(shí)力的文章,期待你的關(guān)注。轉(zhuǎn)載說明:務(wù)必注明來源(注明:來源于公眾號(hào):我的小碗湯, 作者:小碗湯)

作者簡(jiǎn)潔

作者:小碗湯,一位熱愛、認(rèn)真寫作的小伙,目前維護(hù)原創(chuàng)公眾號(hào):『我的小碗湯』,專注于寫go語言、docker、kubernetes、java等開發(fā)、運(yùn)維知識(shí)等提升硬實(shí)力的文章,期待你的關(guān)注。轉(zhuǎn)載說明:務(wù)必注明來源(注明:來源于公眾號(hào):我的小碗湯,作者:小碗湯)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容