在K8S中,DaemonSet型別的資源特性有哪些?

黄嘉波發表於2024-08-08

在Kubernetes(K8S)中,DaemonSet是一種控制器資源物件,它具有一系列獨特的資源特性,這些特性使得DaemonSet特別適用於在叢集的每個節點上執行守護程序或服務。以下是DaemonSet型別資源特性的詳細闡述:

1. 確保每個節點上執行Pod副本
  • 節點級部署:DaemonSet確保叢集中的每個節點(或滿足特定條件的節點)上都執行一個Pod副本。這意味著無論何時建立或加入新的節點到叢集中,DaemonSet都會自動為新節點排程和管理一個Pod。
  • 自動擴充套件:當節點加入或離開叢集時,DaemonSet會自動新增或刪除相應的Pod。如果一個節點被刪除或者由於某種原因變得不可用,那麼該節點上的DaemonSet Pod也會被清理;反之,如果有新節點加入,DaemonSet將確保在新節點上啟動一個Pod例項。
2. 精確控制Pod部署位置
  • 節點選擇器:透過使用NodeSelector、NodeAffinity或其他節點標籤,可以精確地控制DaemonSet中的Pod部署在哪些節點上。例如,可以選擇僅在具有特定硬體或功能的節點上執行DaemonSet。
  • 避免衝突:預設情況下,DaemonSet保證在每個節點上只執行一個Pod例項。這可以透過PodDisruptionBudget等機制來進一步強化,並且可以透過PodAntiAffinity規則來避免同一個節點上執行多個相同的DaemonSet Pod。
3. 支援版本升級和回滾
  • 更新策略:DaemonSet支援多種更新策略,包括滾動更新、按需更新等,以確保在維護或升級守護程序時能夠平滑過渡。這些更新策略類似於Deployment的滾動更新策略,但更側重於節點級別的更新而不是基於副本數量。
  • 版本控制:DaemonSet能夠管理其Pod的生命週期,包括初始化容器、健康檢查以及重啟策略等,從而支援版本升級和回滾操作。
4. 適用於叢集級別的基礎服務
  • 基礎服務部署:DaemonSet通常用於部署那些提供叢集層面功能的服務,如日誌收集代理(如Fluentd或Filebeat)、監控代理(如Prometheus Node Exporter或cAdvisor)、網路外掛以及其他需要在每個工作節點上都有一個例項執行的基礎服務。
  • 系統守護程序:DaemonSet的主要作用是確保叢集中的所有(或符合條件的部分)節點上都能按需執行指定的系統守護程序或其他基礎元件,以提供叢集範圍內的基礎設施支援。
5. 與其他資源物件的區別
  • 與Deployment的區別:DaemonSet與Deployment的主要區別在於,DaemonSet確保每個節點上執行一個Pod,而Deployment則確保叢集中執行指定數量的Pod副本,這些Pod副本可以分佈在不同的節點上。因此,DaemonSet的yaml檔案中不支援定義replicas。

綜上所述,DaemonSet在Kubernetes中扮演著確保叢集每個節點上執行必要守護程序或服務的重要角色,其特性使得它成為部署和管理叢集級別基礎服務的理想選擇。

相關文章