38 k8s-16DaemonSet:守護程序集
阿新 • • 發佈:2022-05-06
DaemonSet:守護程序集,縮寫為ds,在所有節點或者是匹配的節點上都部署一個Pod。
使用DaemonSet的場景:
✥ 執行叢集儲存的daemon,比如ceph或者glusterd
✥ 節點的CNI網路外掛,calico
✥ 節點日誌的收集:fluentd或者是filebeat
✥ 節點的監控:node exporter
✥ 服務暴露:部署一個ingress nginx
01.例項 建立一個DaemonSet
1 01.## 建立一個ds## 2 [root@k8s-master01 ~]# kubectl create -f nginx-ds.yaml 3 daemonset.apps/nginx created4 02.##列出當前名稱空間下的全部 node,並顯示更詳細的資訊## 5 [root@k8s-master01 ~]# kubectl get node -owide 6 03.##master節點目前沒有打汙點,所以master節點上面也有pod,正常是不要把pod起到master主節點上,全放node上; ## 7 [root@k8s-master01 ~]# kubectl get po –owide 8 #同上[root@k8s-master01 ~]# kubectl get pod –owide 9 04.##如果不想給master部署容器,可以給它指定節點並打個標籤,ds=true是標籤##10 [root@k8s-master01 ~]# kubectl label node k8s-node01 k8s-node02 ds=true 11 node/k8s-node01 labeled 12 node/k8s-node02 labeled 13 [root@k8s-master01 ~]# kubectl get node --show-labels 14 05.##編輯nginx-ds.yaml檔案內容## 15 [root@k8s-master01 ~]# vim nginx-ds.yaml 16 修改的內容對比:增加了ds:''true'' 17 06.##更新yaml檔案內容看結果## 18[root@k8s-master01 ~]# kubectl replace -f nginx-ds.yaml #執行更新 19 daemonset.apps/nginx replaced 20 ##列出當前名稱空間下的Pod## 21 [root@k8s-master01 ~]# kubectl get pod 22 ....... 23 07.##看到不符合要求的pod被自動刪除## 24 [root@k8s-master01 ~]# kubectl get pod 25 NAME READY STATUS RESTARTS AGE 26 busybox 1/1 Running 1 110m 27 nginx-8vrcz 0/1 Terminating 0 2m36s 28 nginx-k6dj6 0/1 Terminating 0 2m36s 29 nginx-mgrks 1/1 Running 0 2m36s 30 08.##刪除重建的過程還做了更新## 31 [root@k8s-master01 ~]# kubectl get po -owide (#反覆執行看更新結果) 32 …...省略…… 33 ##更新的時候產生了兩個之前的版本記錄,因為沒有加record,所以沒有改變記錄## 34 [root@k8s-master01 ~]# kubectl rollout history ds nginx #檢視歷史版本 35 09.##實現了新的pod已經全部到node節點上面了,master主節點沒有了;## 36 37 10.##也可以直接指定master去建立pod## 38 [root@k8s-master01 ~]# kubectl label node k8s-master03 ds=true 39 [root@k8s-master01 ~]# kubectl get pod 40 [root@k8s-master01 ~]# kubectl get pod -owide 41 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES 42 busybox 1/1 Running 1 111m 10.244.32.153 k8s-master01 <none> <none> 43 nginx-2khfj 1/1 Running 0 67s 10.244.58.205 k8s-node02 <none> <none> 44 nginx-6s9cj 1/1 Running 0 16s 10.244.195.21 k8s-master03 <none> <none> 45 nginx-n9q4d 1/1 Running 0 75s 10.244.85.220 k8s-node01 <none> <none>
02.DaemonSet更新策略
#對 DaemonSet 執行滾動更新的詳細請操作參考官網: https://kubernetes.io/zh/docs/tasks/manage-daemon/update-daemon-set/ #配置檔案中注意maxUnavailable的值: updatestrategy: rollingUpdate: maxUnavailable: 1 #(1設定小點,更新的影響最小) type: RollingUpdate #故障排查# ##01.出現ErrImagePull,說明映象沒有拉取成功,需要檢查問題;比如更新策略,或者映象版本是否書寫正確 ##02.排查報錯問題 1.#第一個檢查點--映象策略:# kubectl edit ds 2.#檢查映象策略:imagePullPolicy: IfNotPresent (#檢查沒問題) 3.#再次重新整理#kubectl get pod –owide檢視問題依舊 4.#第二個檢查點--檢視pod更新過程 # kubectl describe pod nginx-glj6n (#nginx名字隨機的,以實際為準) 發現問題了:是版本寫錯了,對比之前寫的錯誤命令;(1.15.3前漏寫了nginx) ##03.重新設定 # kubectl set image ds nginx nginx=nginx:1.15.3 --record ##04.然後又是先刪除後建立 ##05.更新策略建議使用OnDelete ##06. 重新設定為1.15.2 # kubectl set image ds nginx nginx=nginx:1.15.2 --record ##07.測試:比如刪除master03這個節點的,我們手動刪除,刪除之後就觸發了OnDelete策略,它就只更新這一臺,更新為ngnix為1.15.2 ##08.檢視更新記錄 #kubectl rollout history ds nginx
搜尋
複製