DaemonSet 是 Kubernetes 中的一种控制器,它确保集群中的每个 Node 上都运行一个容器副本。这种控制器常用于在集群中运行日志收集器、监控等守护进程。
DaemonSet 的主要特征是:
- 每个 Node 上运行一个 Pod 副本。
- 当有 Node 加入集群时,会在该 Node 上启动一个 Pod。
- 当有 Node 离开集群时,会终止该 Node 上的 Pod。
使用 DaemonSet 的主要优点是:
- 运行守护进程:如日志采集、监控等。这类进程需要在每个 Node 上运行。
- 新节点自动运行:当新增 Node 加入集群时,DaemonSet 会自动在该 Node 上运行一个 Pod。
- 节点失效自动恢复:当其上的 Node 失效时,DaemonSet 会重新在其他 Node 上启动新的 Pod。
- 确保节点上运行指定数量的副本:根据 .spec.template.spec.replicas 设置的数量。
DaemonSet 的定义包含以下主要字段:
- .spec.template:Pod 模板,指定要在每个节点上运行的容器详细配置信息。
- .spec.selector:选择器,用于过滤目标节点。支持按节点名 spec.nodeName、节点标签
spec.nodeSelector
选择。 - .spec.updateStrategy:更新策略,如 RollingUpdate、
OnDelete
。 - .spec.template.spec.hostNetwork:是否使用主机网络模式,默认为 false。
- .spec.template.spec.nodeSelector:节点选择器,选择 Ziel 节点。
- .spec.template.spec.tolerations:容忍度设置,以针对特定节点。
例如,我们可以创建一个在每个节点上运行 fluentd 容器的 DaemonSet:
yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
这个 DaemonSet 会在每个节点部署一个 fluentd 容器,用于日志收集。主要特点是:
- 根据节点选择器(未设置)选择所有节点。
- spec.template 定义在每个节点上运行的 fluentd 容器。
- 挂载 /var/log 和 /var/lib/docker/containers 目录用于日志采集。
- 新节点加入会自动在上启动一个副本。
- 失效节点上的容器会自动终止并在其他节点重启。
所以总结来说,DaemonSet 的主要用途是:
- 在每个节点上运行一个副本,常用于运行日志收集、监控等守护进程。
- 新节点会自动运行,失效节点会自动恢复。
- 可以确保指定数量的 Pod 在每个节点上运行。
它的定义包括:
- Pod 模板:在每个节点上要运行的容器配置。
- 选择器:用于过滤目标节点。
- 更新策略:如 RollingUpdate、OnDelete。
- 节点选择器、容忍度:选择目标节点。