当前位置: 首页 > news >正文

【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.dtcms.com/a/275281.html

相关文章:

  • Git入门教程
  • 【离线数仓项目】——电商域DIM层开发实战
  • 【一起来学AI大模型】RAG系统流程:查询→向量化→检索→生成
  • 医疗AI前端开发中的常见问题分析和解决方法
  • OpenCL study - code02
  • 箭头函数(Arrow Functions)和普通函数(Regular Functions)
  • 7. 负载均衡:流量调度引擎
  • 8-day06预训练模型
  • 一个中层管理者应该看什么书籍?
  • 从就绪到终止:操作系统进程状态转换指南
  • 智能文本抽取在合同管理实战应用
  • 人事系统选型与应用全攻略:从痛点解决到效率跃升的实战指南
  • Datawhale AI夏令营:基于带货视频评论的用户洞察挑战赛上分全攻略
  • 自动驾驶线控系统与动力电池系统
  • 【天坑记录】cursor jsx文件保存时错误格式化了
  • K230摄像头配置与显示配置误解:而这根本没关系
  • 【驱动】移植CH340驱动,设置 udev 规则,解决和 BRLTTY 的冲突
  • 软件测试面试200问(附30W字面试文档)
  • 跟着Carl学算法--二叉树【3】
  • 静态路由技术
  • DeepSeek模型分析及其在AI辅助蛋白质工程中的应用-文献精读148
  • [electron]升级功能
  • CSS Grid布局和Flexbox有什么区别?
  • C语言文件读写操作详解:fgetc与feof函数的应用
  • 经典同步问题详解
  • 使用 lstrip() 和 rstrip() 方法
  • java集合类
  • 【牛客刷题】吃糖果----糖果甜度问题(贪心策略详解)
  • 机器学习详解
  • Windows删除文件或者拔出U盘显示正在使用/占用解决办法