|NO.Z.00148|——————————|CloudNative|——|KuberNetes&資源排程.V18|-------------------------------------------------------|daemonset.v03|更新|回滾|
阿新 • • 發佈:2022-03-30
[CloudNative:KuberNetes&資源排程.V18] [Applications.KuberNetes] [|DevOps|k8s|資源排程|DaemonSet使用|DaemonSet更新和回滾|]
一、daemonset更新和回滾
### --- daemonset的更新 ~~~ 使用RollingUpdate更新DaemonSet ~~~ daemonset滾動更新是先刪除然後再建立一個新的。 ~~~ 預設的更新策略是RollingUpdate;多了一個update字串,maxUnavailable:最大不可用是1, ~~~ 建議滾動更新的配置是1,寫的很大的話,可能影響範圍就比較大,寫的小的話,影響可能就不會這麼大。 [root@k8s-master01 ~]# kubectl get ds -oyaml updateStrategy: rollingUpdate: maxUnavailable: 1 type: RollingUpdate
二、daemonset更新過程### --- 檢視更新後pod的狀態 [root@k8s-master01 ~]# kubectl get po -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6dxm6 1/1 Running 0 6s 172.18.195.9 k8s-master03 <none> <none> nginx-pnl8k 1/1 Running 0 49s 172.27.14.195 k8s-node02 <none> <none> nginx-t26ct 1/1 Running 0 2m19s 172.17.125.3 k8s-node01 <none> <none>
三、使用OnDelete更新daemonset### --- daemonset更新過程 [root@k8s-master01 ~]# kubectl get po -l app=nginx -w NAME READY STATUS RESTARTS AGE nginx-n47b7 1/1 Running 0 12m nginx-tsxcp 1/1 Running 0 13m nginx-wfrpz 1/1 Running 0 8m36s ~~~ 第一階段:初始狀態 nginx-n47b7 1/1 Terminating 0 16m nginx-t26ct 0/1 Pending 0 0s nginx-t26ct 0/1 ContainerCreating 0 1s nginx-t26ct 1/1 Running 0 35s ~~~ 第二階段:刪除第一個再去更新建立第一個Pod nginx-tsxcp 1/1 Terminating 0 18m nginx-pnl8k 0/1 Pending 0 0s nginx-pnl8k 0/1 ContainerCreating 0 0s nginx-pnl8k 1/1 Running 0 39s ~~~ 第三階段:刪除第二個再去更新建立第二個Pod nginx-wfrpz 1/1 Terminating 0 15m nginx-6dxm6 0/1 Pending 0 0s nginx-6dxm6 0/1 ContainerCreating 0 0s nginx-6dxm6 1/1 Running 0 2s ~~~ 第四階段:刪除第三個再去更新建立第三個Pod ~~~ 不建議把maxUnavailable的值設定很大,一般設定為1即可。設定很大,影響會很大 ~~~ 且不建議使用RollingUpdate更新,而是使用OnDelete,建議使用OnDelete更新DaemonSet
### --- 使用OnDelete更新DaemonSet
[root@k8s-master01 ~]# kubectl set image ds nginx nginx=nginx:1.15.2 --record
daemonset.apps/nginx image updated
### --- 檢視更新模式
[root@k8s-master01 ~]# kubectl edit ds
updateStrategy:
type: OnDelete
### --- 檢視pod的狀態
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-76llf 1/1 Running 0 6m34s 172.27.14.196 k8s-node02 <none> <none>
nginx-ts5x4 1/1 Running 0 6m21s 172.18.195.10 k8s-master03 <none> <none>
nginx-v245j 1/1 Running 0 5m34s 172.17.125.4 k8s-node01 <none> <none>
### --- 觸發更新pod
[root@k8s-master01 ~]# kubectl delete po nginx-76llf //刪掉這一臺容器,刪掉完之後它就會觸發更新
pod "nginx-76llf" deleted
### --- pod歷史版本
~~~ 部署守護程序的時候會使用到這種方式。
[root@k8s-master01 ~]# kubectl rollout history ds nginx
daemonset.apps/nginx
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image ds nginx nginx=nginx:1.15.3 --record=true
4 <none>
### --- 為什麼建議使用OnDelete呢?
~~~ 就是在k8s叢集中,肯定有很多的節點的,DaemonSet也是部署在這些節點上。
~~~ 肯定有些節點是用來當做測試環境的,而我們可以從不重要的節點中測試,
~~~ 測試沒有問題,再去部署其它的節點。
~~~ 若是這個映象由問題的話,就隻影響這一臺容器。
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)