「Kubernetes」- 使用DaemonSet時,主節點沒有運行Pod實例 @20210416

內容簡介

處理「當使用DaemonSet時,沒有在主節點建立Pod實例」問題。node

問題描述

在以DaemonSet方式部署Traefik Ingress Controller以後,沒有在Master節點上建立Pod實例。所以不能經過Master節點來訪問服務,可是咱們但願Master節點中也運行Pod實例。安全

通過一番Google查找,學習「Taints and Tolerations」文檔。ide

問題緣由(正常狀況)

由於從1.6開始,不會再將DaemonSet調度到主節點上。因爲主節點上有node-role.kubernetes.io/masterNoSchedule污點,而Pod沒有容忍該污點,因此不會調度到主節點上。學習

!!!既然官方已經不建議這麼作了,若是沒有必要就不要向主機調度Pod了,除非是出於監控或者指標收集等緣由。測試

解決辦法(正常狀況)

我參考了「Kubernetes ds won't run pod on master node」與「Scheduler is not scheduling Pod for DaemonSet in Master node」這兩個問題。文檔

正確的解決辦法實際上是在DaemonSets的Pod定義中添加以下配置:部署

tolerations:
- key: node-role.kubernetes.io/master
  effect: NoSchedule

問題緣由(個人狀況)

個人狀況有點特殊:症狀是常見的症狀,可是成因卻稍微有所不一樣。kubernetes

由於在第一次遇到這個問題以後,因爲不懂,我一頓搜索搜索以後,執行了kubectl taint nodes k8s-master key=value:NoSchedulekubectl taint nodes --all node-role.kubernetes.io/master-命令。當執行第一條命令以後,將不會有Pod調度到主節點上。以後,執行第二條命令,雖然刪除了node-role.kubernetes.io/master污點,可是依舊不能調度,由於Pod不能容忍第一個污點。it

解決辦法(個人狀況)

不是常規成因,因此也不是常規的解決辦法。io

最後我也發現:因爲以前的測試,在Master節點上添加了Taint的NoSchedule標記,從而致使後面建立的Pod示例沒法調度到該節點上。所以去掉該Taint便可。(而最好的解決辦法是把Master的node-role.kubernetes.io/master污點還給人家,而後運行正常的解決辦法。)

注意事項

因爲主節點具備必定的特殊性,出於安全及角色的緣由,其實不建議在Master節點上運行Pod實例。

參考文獻

Kubernetes ds won't run pod on master nodeScheduler is not scheduling Pod for DaemonSet in Master nodekubernetes/Concepts/DaemonSet#Taints and Tolerations

相關文章
相關標籤/搜索