1. 程式人生 > 其它 >|NO.Z.00148|——————————|CloudNative|——|KuberNetes&資源排程.V18|-------------------------------------------------------|daemonset.v03|更新|回滾|

|NO.Z.00148|——————————|CloudNative|——|KuberNetes&資源排程.V18|-------------------------------------------------------|daemonset.v03|更新|回滾|



[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
### --- 檢視更新後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> 
二、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
### --- 使用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)