什么是 DaemonSet?
DaemonSet 是 Kubernetes 中的一种控制器,用于确保集群中的每个节点(或满足特定条件的节点)上都运行一个指定的 Pod 副本。
特点
1. 每个节点一个 Pod:
DaemonSet 会在每个节点上部署一个 Pod 副本。如果新节点加入集群,DaemonSet 会自动在新节点上创建 Pod;如果节点被移除,Pod 也会被清理。
2. 适合系统级任务:
DaemonSet 通常用于运行集群级别的守护进程,例如:
- 日志收集(如 Fluentd、Logstash)。
- 监控代理(如 Prometheus Node Exporter)。
- 网络插件(如 Calico、Weave)。
3. 与 Deployment 的区别:
- Deployment 用于管理无状态应用,可以指定副本数,Pod 可以调度到任意节点。
- DaemonSet 则确保每个节点上都运行一个 Pod,适合节点级别的任务。
使用场景
在每个节点上运行存储守护进程(如 GlusterFS、Ceph)。
在每个节点上运行日志收集器(如 Fluentd、Filebeat)。
在每个节点上运行网络插件或安全代理。
创建流程
编写一个Daemonset的yaml文件:
yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:name: test-demonsetlabels:daemonset: test
spec:selector:matchLabels:name: testpodtemplate:metadata:labels:name: testpodspec:containers:- name: helloimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh', '-c', 'sleep 3600']
DaemonSet 名称:test-demonset 。使用 busybox镜像,容器启动后执行 sleep 3600,即休眠 1 小时。 DaemonSet 会在每个节点上创建一个 Pod,Pod 的标签为 name: testpod。imagePullPolicy镜像拉取策略为 IfNotPresent(如果本地已存在镜像,则不拉取)。
1. 创建 DaemonSet
kubectl create -f daemonset.yml
通过 daemonset.yml 文件创建 DaemonSet 资源。
2. 查看 DaemonSet 状态
kubectl get daemonsets.apps
列出集群中所有的 DaemonSet,确认 test-demonset是否创建成功。
DaemonSet 是 Kubernetes 中用于确保每个节点运行指定 Pod 的控制器,适合运行节点级别的守护进程。通过 YAML 文件定义 DaemonSet,可以轻松管理集群中的系统级任务。