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;训练出来的效果还是很…