K8S-daemonset控制器

一、 DaemonSet 概述

DaemonSet 控制器能够确保 k8s 集群所有的节点都运行一个相同的 pod 副本,当向 k8s 集群中增加 node 节点时,这个 node 节点也会自动创建一个 pod 副本,当 node 节点从 集群移除,这些 pod 也会自动删除;删除 Daemonset 也会删除它们创建的 pod

DaemonSet 工作原理

daemonset 的控制器会监听 kuberntes 的 daemonset 对象、pod 对象、node 对象,这些被监听的对象之变动,就会触发 syncLoop 循环让 kubernetes 集群朝着 daemonset 对象描述的状态进行演进。

Daemonset 典型的应用场景

在集群的每个节点上运行存储,比如:glusterd 或 ceph。 在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat 等。 在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd 等。

DaemonSet 与 Deployment 的区别

Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。

DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。

二、DaemonSet 资源清单文件编写技巧

复制代码
[root@k8s-master01 ~]# kubectl explain ds 
字段 作用
apiVersion 当前资源使用的 api 版本,跟 VERSION: apps/v1 保持 一致
kind 资源类型,跟 KIND: DaemonSet 保持一致
metadata 元数据,定义 DaemonSet 名字的
spec 定义容器的
status 状态信息,不能改
复制代码
[root@k8s-master01 ~]# kubectl  explain ds.spec
字段 作用
minReadySeconds 当新的 pod 启动几秒种后,再 kill 掉旧的 pod。
revisionHistoryLimit 历史版本
selector -required- 用于匹配 pod 的标签选择器
template -required- 定义 Pod 的模板,基于这个模板定义的所有 pod 是一样的
updateStrategy daemonset 的升级策略
复制代码
[root@k8s-master01 ~]# kubectl  explain ds.spec.template
字段 作用
containers 容器配置列表。每个元素都描述了一个要运行在Pod内的容器。
initContainers 化容器配置列表。这些容器在主容器之前运行,用于设置环境或执行预备工作。
ephemeralContainers 临时容器配置列表。这些容器是临时的,仅在Pod运行时存在。
restartPolicy Pod的重启策略。可以是Always、OnFailure或Never。
terminationGracePeriodSeconds 优雅终止周期,以秒为单位。在强制终止Pod前,系统将等待此周期内的终止。
activeDeadlineSeconds Pod活动的截止时间,超过此时间系统将杀死Pod。
dnsPolicy Pod的DNS策略,可以是ClusterFirst、ClusterFirstWithHostNet、Default或None。
Context Pod的安全上下文,用于设置Pod的安全相关属性,如RBAC规则、SELinux标签等。
schedulerName 调度器名称,用于指定用于调度Pod的特定调度器。
tolerations Pod容忍的污点,用于允许Pod调度到有特定污点的节点上。
affinity Pod的亲和性设置,用于指定Pod偏好或必须运行的节点属性。
hostNetwork 如果设置为true,P将使用主机的网络命名空间。
imagePullSecrets 用于获取镜像的密钥,这些密钥会被注入到Pod中。
configMap ConfigMap的名称和键值对列表,用于注入配置数据到Pod
secret Secret的名称和键值对列表,用于注入敏感数据到Pod。
volumeMounts 卷挂载配置列表,用于指定Pod中容器如何挂载卷。
volumes 卷配置列表,为Pod中的容器存储卷。

三、DaemonSet 使用案例

root@k8s-master01 \~# cat pod-controller.yaml

apiVersion: apps/v1

kind: DaemonSet

metadata:

name: pod-controller

labels:

controller: daemonset

spec:

selector:

matchLabels:

app: nginx-pod

template:

metadata:

labels:

app: nginx-pod

spec:

containers:

  • name: nginx

image: nginx:latest

ports:

  • name: nginx-port

containerPort: 80

protocol: TCP

##查看

root@k8s-master01 \~# kubectl apply -f pod-controller.yaml

daemonset.apps/pod-controller created

相关推荐
鹤落晴春13 小时前
【K8s】Pod调度、configMaps
云原生·容器·kubernetes
张忠琳13 小时前
【runc 1.4.2】(Part 2)runc 1.4.2 超深度分析 — CLI层:main.go、命令文件、runner、信号处理、TTY
云原生·kubernetes·runc
极客先躯15 小时前
高级java每日一道面试题-2026年02月02日-实战篇[Docker]-如何实现容器的持久化存储?
docker·容器·面试宝典·持久化·存储·韵味·java高级面试题
阿里云云原生16 小时前
AI 提效是“假象”还是“红利”?用 LoongSuite + SLS 构建组织级 AI 编码度量看板
云原生
极客先躯16 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
Java识堂17 小时前
如何对微服务进行拆分?
微服务·云原生·架构
某林21218 小时前
Isaac Sim 5.1.0 无头服务器部署与 RTX 显存段错误排障全记录
运维·服务器·docker·容器·isaac
m0_7381207218 小时前
Docker 环境下 Vulfocus 靶场搭建全流程(附镜像源问题解决方案)
运维·服务器·网络·安全·docker·容器
Plastic garden19 小时前
K8s知识(3) Pod亲和性,调度
云原生·容器·kubernetes