1. 程式人生 > 其它 >38 k8s-16DaemonSet:守護程序集

38 k8s-16DaemonSet:守護程序集

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 created
4 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

  

搜尋

複製