【kubernetes】--controller(DaemonSet)

Kubernetes DaemonSet 控制器詳解

它確保集群中所有(或部分)節點上都運行一個 Pod 的副本。當有新節點加入集群時,DaemonSet 會自動在新節點上創建 Pod;當節點從集群中移除時,這些 Pod 也會被垃圾回收。

DaemonSet 的核心特性

  1. 每個節點一個 Pod:確保滿足條件的每個節點上都運行一個 Pod 實例
  2. 自動擴展:隨著集群節點的增減自動調整 Pod 數量
  3. 特定節點運行:可以通過節點選擇器(nodeSelector)或節點親和性(nodeAffinity)在特定節點上運行

DaemonSet 的典型使用場景

  1. 集群存儲守護進程:如 glusterd、ceph
  2. 日志收集:如 fluentd、logstash
  3. 監控采集:如 Prometheus Node Exporter、collectd
  4. 網絡插件:如 Calico、Weave 網絡組件
  5. 安全控制:如安全審計、入侵檢測代理

DaemonSet 的工作機制

  1. 控制器模式:DaemonSet 控制器通過監聽 API 服務器獲取節點和 Pod 的變化
  2. 節點匹配:根據 .spec.template 和節點選擇條件確定應該在哪些節點上運行 Pod
  3. Pod 管理
    • 創建缺失的 Pod
    • 刪除多余的 Pod
    • 更新需要變更的 Pod

DaemonSet 的 YAML 示例

apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd-elasticsearchnamespace: kube-systemlabels:k8s-app: fluentd-logging
spec:selector:matchLabels:name: fluentd-elasticsearchtemplate:metadata:labels:name: fluentd-elasticsearchspec:tolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedulecontainers:- name: fluentd-elasticsearchimage: quay.io/fluentd_elasticsearch/fluentd:v2.5.2resources:limits:memory: 200Mirequests:cpu: 100mmemory: 200MivolumeMounts:- name: varlogmountPath: /var/log- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: trueterminationGracePeriodSeconds: 30volumes:- name: varloghostPath:path: /var/log- name: varlibdockercontainershostPath:path: /var/lib/docker/containers

DaemonSet 的關鍵配置

1. 節點選擇

  • nodeSelector:簡單選擇器,匹配節點標簽

    spec:template:spec:nodeSelector:disktype: ssd
    
  • nodeAffinity:更復雜的節點親和性規則

    spec:template:spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linux
    

2. 容忍度(Tolerations)

允許 Pod 調度到帶有污點的節點上:

spec:template:spec:tolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedule

3. 更新策略

  • RollingUpdate(默認):滾動更新 DaemonSet Pod
  • OnDelete:手動刪除舊 Pod 時才創建新 Pod

配置示例:

spec:updateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1

DaemonSet 與 Deployment 的區別

特性DaemonSetDeployment
調度目標每個匹配節點一個 Pod指定數量的 Pod,不考慮節點
擴展性隨節點數量自動擴展手動指定副本數
使用場景節點級服務(監控、日志等)應用服務
更新策略RollingUpdate 或 OnDeleteRollingUpdate 或 Recreate
節點親和性通常需要通常不需要

DaemonSet 的管理操作

創建 DaemonSet

kubectl apply -f daemonset.yaml

查看 DaemonSet 狀態

kubectl get daemonset -n kube-system
kubectl describe daemonset fluentd-elasticsearch -n kube-system

更新 DaemonSet

  1. 修改 YAML 文件后重新應用

    kubectl apply -f daemonset-updated.yaml
    
  2. 直接編輯

    kubectl edit daemonset fluentd-elasticsearch -n kube-system
    

刪除 DaemonSet

kubectl delete daemonset fluentd-elasticsearch -n kube-system

高級主題

1. 僅在某些節點上運行

通過節點標簽和選擇器控制:

# 給節點打標簽
kubectl label nodes <node-name> <label-key>=<label-value># 然后在 DaemonSet 中配置 nodeSelector

2. 使用 initContainers

可以在主容器前運行初始化容器:

spec:template:spec:initContainers:- name: init-sysctlimage: busyboxcommand: ["sysctl", "-w", "vm.max_map_count=262144"]securityContext:privileged: true

3. 資源限制

為 DaemonSet Pod 設置資源請求和限制:

resources:limits:cpu: "1"memory: 500Mirequests:cpu: "0.5"memory: 250Mi

常見問題解決

  1. Pod 無法調度

    • 檢查節點選擇器和污點/容忍度配置
    • 檢查節點資源是否充足
  2. 更新失敗

    • 檢查更新策略配置
    • 檢查新鏡像是否可用
  3. 權限問題

    • 可能需要配置 SecurityContext 或 PodSecurityPolicy

案列:部署守護進程DaenonSet

ds,yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:name: ds-test labels:app: filebeat
spec:selector:matchLabels:app: filebeattemplate:metadata:labels:app: filebeatspec:containers:- name: logsimage: nginx:1.27.5ports:- containerPort: 80volumeMounts:- name: varlogmountPath: /tmp/logvolumes:- name: varloghostPath:path: /var/log
  • 在每個node上運行一個pod,新加入的node也同
    樣運行在一個pod里面
  • 在每個node節點安裝數據采集工具
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914657.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內測分發平臺應用的異地容災和負載均衡處理和實現思路

內測分發平臺應用的異地容災和負載均衡處理和實現思路如下&#xff1a;一、異地容災1.風險評估和需求分析&#xff1a;對現有的IT基礎設施進行全面的風險評估和需求分析&#xff0c;評估潛在風險和災害的可能性&#xff0c;以及確定業務和數據的關鍵性。2.設計備份架構&#xf…

【Vue】瀏覽器緩存 sessionStorage、localStorage、Cookie

嘿&#xff0c;各位 Vue 開發者們&#xff01;今天咱們來好好聊聊瀏覽器里的三種緩存方式&#xff1a;sessionStorage、localStorage 和 Cookie。在實際開發中&#xff0c;合理運用這些緩存能讓我們的應用性能大幅提升&#xff0c;同時避免一些不必要的問題。下面就跟著我的筆記…

c#如何將不同類型的數據存儲到一起

在 C# 中&#xff0c;存儲不同類型的數據有多種方式&#xff0c;具體選擇取決于你的需求&#xff08;類型安全、性能、靈活性等&#xff09;。以下是常見的解決方案及其適用場景&#xff1a;1. 使用 object 類型&#xff08;裝箱 / 拆箱&#xff09;將所有數據轉換為基類 objec…

超唯美治愈風卡通插畫PPT模版

海洋卡通風治愈系PPT模版&#xff0c;兒童可愛治愈可愛PPT模版&#xff0c;治愈風商務通用PPT模版&#xff0c;治愈系課件PPT模版&#xff0c;治愈風插畫PPT模版&#xff0c;超唯美治愈風PPT模版&#xff0c;可愛插畫治愈系女孩PPT模版 超唯美治愈風卡通插畫PPT模版&#xff1a…

el-tooltip 快速滾動的時候出現殘影如何解決 vue3

<el-tooltip:disabled"isScrolling" <!-- 新增滾動狀態綁定 -->:popper-options"{ modifiers: [{ name: computeStyles, options: { adaptive: false }] }"effect"dark":content"label.name"placement"right-start"…

【經典面經】C++新特性 TCP完整收發數據 TLS1.2 TLS1.3

文章目錄cpp新特性C11C14C17C20tcp如何保證完整收發數據結論1. **面向連接的三次握手**2. **字節序號與確認機制**3. **校驗和&#xff08;Checksum&#xff09;**4. **超時重傳與快速重傳**5. **滑動窗口&#xff08;流量控制&#xff09;**6. **數據重組與排序**7. **四次揮手…

Spring AI 系列之十一 - RAG-進階RetrievalAugmentationAdvisor

之前做個幾個大模型的應用&#xff0c;都是使用Python語言&#xff0c;后來有一個項目使用了Java&#xff0c;并使用了Spring AI框架。隨著Spring AI不斷地完善&#xff0c;最近它發布了1.0正式版&#xff0c;意味著它已經能很好的作為企業級生產環境的使用。對于Java開發者來說…

[TOOL] ubuntu 使用 ffmpeg 操作 gif、mp4

文章目錄一、工具安裝二、gif 轉mp4三、mp4 兩倍速一、工具安裝 安裝 ffmpeg 工具&#xff1a; sudo apt install ffmpeg二、gif 轉mp4 1. 配置環境 核心指令: ffmpeg -i input.mp4 -filter_complex "[0:v]setpts0.5*PTS[v];[0:a]atempo2.0[a]" -map "[v]&q…

linux中INIT_MM_CONTEXT宏對pgd的重復賦值

在GNU C中&#xff0c;支持通過標號元素對指定結構體成員名進行初始化&#xff0c;這允許初始化值以任意順序出現。在linux內核中對init_mm初始化時有如下代碼。#define INIT_MM_CONTEXT(name) \.pgd init_pg_dir,struct mm_struct init_mm {.mm_rb RB_ROOT,.pgd swapper…

第十五章 STL(stack、queue、list、set、map容器使用)

棧stack使用&#xff1a;隊列queue雙向循環鏈表listlist構造函數list 賦值和交換list 大小操作list 插入和刪除list 數據存取list 反轉和排序排序算法sort降序操作排序案例#include<iostream> using namespace std; #include<list>class Person { private:string n…

【論文閱讀】HCCF:Hypergraph Contrastive Collaborative Filtering

論文出處&#xff1a;SIGIR 2022 CCF-A 論文地址&#xff1a;Hypergraph Contrastive Collaborative Filtering 論文代碼&#xff1a;akaxlh/HCCF: HCCF, SIGIR 2022 目錄 摘要 介紹 研究背景與核心問題 現有方法局限性 HCCF的創新解決方案 技術優勢 定義與相關工作 …

Retrofit+RxJava:打造聲明式REST客戶端的藝術 —— 像點咖啡一樣調用API

目錄一、告別Callback地獄&#xff1a;聲明式編程的魅力1.1 傳統網絡請求的痛點1.2 Retrofit的聲明式革命二、Retrofit核心配置工廠2.1 構建Retrofit實例2.2 常用注解速查表三、RxJava響應式魔法3.1 鏈式調用優雅變身3.2 超能力操作符盤點四、實戰演練&#xff1a;構建天氣查詢…

【離線數倉項目】——任務調度與數據可視化實戰

摘要 本文主要圍繞離線數倉項目中的任務調度與數據可視化實戰展開&#xff0c;介紹了業務流程虛擬節點、離線數倉任務調度、數據可視化等方面的內容&#xff0c;涉及DataWorks和QuickBI等工具的使用&#xff0c;并提供了相關的博文參考和項目實戰域信息。 1. 任務調度管理實戰…

【視頻格式轉換】.264格式轉為mp4格式

背景 視頻格式轉換是多媒體處理中的常見需求&#xff0c;尤其在視頻編輯、存儲或跨平臺播放時。H.264&#xff08;即AVC&#xff09;是一種廣泛使用的視頻編碼標準&#xff0c;以其高壓縮率和良好兼容性著稱&#xff0c;但通常以容器格式&#xff08;如.264裸流文件&#xff0…

JAVA學習筆記 使用notepad++開發JAVA-003

目錄 1 前言 2 部署notepad的java開發環境 2.1 下載并安裝notepad 2.2 設置新建文件的語言 2.3 安裝NppExec插件 2.4 編寫JAVA腳本 2.5 設置腳本執行快捷鍵 2.6 效果測試 3 小結 1 前言 JAVA可以使用記事本來編寫代碼&#xff0c;但是這種方式效率十分低下。我們可以使…

Vue Router 完全指南:從入門到實戰,高效管理前端路由

前言在現代化的前端開發中&#xff0c;路由管理是構建單頁應用&#xff08;SPA&#xff09;的核心功能之一。Vue.js 作為主流的前端框架之一&#xff0c;提供了強大的官方路由庫Vue Router&#xff0c;幫助開發者高效管理頁面跳轉、動態加載、權限控制等關鍵需求。無論是構建企…

Sentinel熱點參數限流完整示例實現

Sentinel熱點參數限流完整示例實現 1. 添加Maven依賴 (pom.xml) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.7.RELEASE</version> </depend…

正則表達式深度解析:從LeetCode 3136題說起

正則表達式深度解析&#xff1a;從LeetCode 3136題說起 引言 正則表達式&#xff08;Regular Expression&#xff0c;簡稱RegEx&#xff09;是一種強大的字符串匹配工具&#xff0c;在字符串處理、數據驗證、文本搜索等場景中有著廣泛的應用。本文將以LeetCode 3136題"有效…

映美打印機-URL頁面打印

<?php /** 打印 - 映美云 https://open.jolimark.com/doc/ */ namespace Home\Controller; use Admin\Logic\OrderLogic;class PrintController extends BaseController {private $appid "";private $appkey "";//打印機編號private $deviceIds &qu…

機器學習算法 ——XGBoost 的介紹和使用

前言&#xff1a; 最近在工作中遇到一個結構化數據回歸預測的問題&#xff0c;用到了很多回歸算法&#xff08;如多元線性回歸等&#xff09;都沒有很好的效果&#xff0c;于是使用了XGBoost&#xff0c;自己也沖三個特征參數人為的增加來幾個&#xff0c;訓練出來的效果還是很…