1. DaemonSet 概述
DaemonSet 主要用于管理在集群中的每个Node(或者满足条件的某些 Node)上仅运行一个 Pod 副本,在新增 Node 时,系统将自动在新的 Node 上启动 Pod ,而在删除 Node 时,系统也会自动删除其上运行的 Pod。
DaemonSet 的一些常见应用场景介绍:
- 在每个 Node 上都运行一个共享存储驱动守护进程,例如 ceph driver。
- 在每个 Node 上都运行一个日志采集程序,采集 Node 上全部容器的日志,例如 fluentd。
- 在每个 Node 上都运行一个性能监控程序,采集 Node 上容器和操作系统的运行性能数据,例如 Prometheus Node Exporter。
2. DaemonSet 配置示例
DaemonSet 示例:
# fluentd-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
labels:
k8s-app: fluentd
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
namespace: kube-system
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluentd
resources:
limits:
cpu: 100m
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
hostPath:
path: /var/log
ShellScriptDaemonSet 资源 yaml 配置中 spec 部分的核心配置字段:
- selector:标签选择器,用于关联具有指定标签的 Pod 列表。
- template:Pod 模板,其中的配置项就是 Pod 的定义,无须再设置 apiVersion 和kind 这两个元数据。
- updateStrategy:更新策略,可选项包括 OnDelete 和 RolingUpdate。
- minReadySeconds:Pod 最短就绪时间,至少要达到这个时间,系统才会设置 Pod 为 Ready 状态,默认值为 0。
- revisionHistoryLimit:修订历史最大数量,默认值为 10。
3. DaemonSet 更新策略
DaemonSet 的更新策略(updateStrategy)包括两种:OnDelete 和 RollingUpdate 默认值为 RollingUpdate。
- OnDelete:这是 Kubernetes v1.5 及之前版本的策略,使用 OnDelete 作为更新策略时,在修改了 DaemonSet 配置之后,新的 Pod 并不会被自动创建,需要用户手动删除旧版本的 Pod,才会触发新建 Pod 的操作。
- RollingUpdate:从 Kubernetes v1.6 版本开始引入该策略。当使用 RollingUpdate更新策略对 DaemonSet 进行更新时,旧版本的 Pod 将自动被“杀掉”,然后自动创建新版本的 DaemonSet Pod。该策略包含两个参数(maxUnavailable 和 maxSurge)含义同 Deployment 的滚动更新参数一致。
k8s 系统 DaemonSet 控制器默认的更新策略数值:
updateStrategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
type: RollingUpdate
YAML更新命令同 Deployment ,详见 Deployment 的更新机制。
4. DaemonSet 的回滚
DaemonSet 的回滚操作与 Deployment 的回滚操作类似,详见 Deployment 的回滚。