CKAD Note Section 6 Pod Design
Contents
79. Labels, Selectors and Annotations
|
|
我們可以在 kubernetes object 上貼上標籤 (labels) 用於分類。使用 kubectl get pod --selector <key>=<value>
可以篩選。
最後 Annotation 就是有點像註解的東西,給人看的 例如: build version, on call 電話號碼 之類的。label 可以幫助我們 select object,annotation 則否。
82. Rolling Updates & Rollbacks in Deployments
這邊主要介紹 rolling update strategy 是怎麼樣的概念,當我們部屬一個 deployment 就會觸發 rollout,可以透過 kubectl rollout status deployment <name>
查看 rollout 狀態。
▲ log 由上至下。 kubectl rollout history
可以查看歷史。
Kubernetes 預設使用 rolling update 策略 (strategy) 來更新 pod
,比起 recreate 後者能夠確保服務不被中斷。
kubectl describe deployments.apps rollout-test
能夠找到 RollingUpdateStrategy: 25% max unavailable, 25% max surge
rolling update
首先 kubectl create deployment nginx-rollout --image=nginx:1.20.1 --replicas=5
▲ kubectl rollout status
顯示完成
▲ Events
顯示 scale up replica set 75c585fb66 to 5
接著我們升級 nginx -> 1.21
▲ 我們以 藍色代表新的 replica set
scale up replica set 59b5b5c6bd to 2
scale down replica set 75c585fb66 to 4
scale up replica set 59b5b5c6bd to 3
scale down replica set 75c585fb66 to 3
scale up replica set 59b5b5c6bd to 4
scale down replica set 75c585fb66 to 2
scale up replica set 59b5b5c6bd to 5 (達標)
scale down replica set 75c585fb66 to 1
(combined from similar events): Scaled down replica set 75c585fb66 to 0
▲ 示意圖
rollback
反悔了,來個 rollback 時光倒轉一下吧! kubectl rollout undo deployment nginx-rollout
▲ 舊的 replicaset 又有東西囉~
▲ 總結
83. Updating a Deployment
▲ 使用 --revision=
可以查看指定 revision
▲ 在 create/edit deployment
的時候使用 --record
,可以把當次使用的命令紀錄到 CAUSE
欄位。
86. Jobs
Tips:
|
|
Jobs
就像 Linux 的 at
一樣,負責執行一次性工作 (參考資料: 小信豬 [Kubernetes] Job, CronJob & TTL Controller Overview)
我們直接 hands-on ~ 建立一個 pod
使用 perl
計算圓周率小數點後一位 (???)
|
|
接著用 kubectl get pod pi-pod
觀察 pod
的變化
▲ 狀態從 ContainerCreating -> Complete -> CrashLoopBackOff (Restart:1),好像哪裡怪怪的… 都 Complete 了怎麼會有 restart
呢?
其實這跟 Kubernetes 預設的 restartPolicy
有關。當 K8s 偵測到 pod
裡面的 container failed/exited 就會很熱心地去 restart
人家~
▲ 同場加映,昨天我用 --image=hello-world
建立的 pod
已經 restart
356 次了 XD 因為 hello-world 這個 image 只做一件事情: 顯示 Hello World 後 Exited (0)
然後就被 Kubernetes 一直 restart
惹 QQ
上面的例子讓我們知道一件事: Pod 不適合跑一次性的工作
可是你可能會想說: 那把 restartPolicy: Never
就好了呀~ No no no! Job
能夠幫我們做更多事 :)
我們在來把剛剛的 pod
改成 job
:
|
|
▲ 當 job 執行完成後 STATUS
會變成 Complete
不會被 K8s 一直雞婆 restart
。
job
同時可以執行多次、同時執行 (parallelism)
|
|
▲ 目標完成: 50,同時執行: 3
backoffLimit
Job
在 .spec.backoffLimit
預設值是 6
,這個設定值定義當 pod
failed 幾次之後就終止此 Job
。
87. CronJob
就跟 Linux 的 cronjob 一樣,定時執行。比較特別的是 CronJob
有三個 spec
:
CronJob
的Job
的Pod
的
|
|
Author
LastMod 2022-05-06 (be577e0)