Skip to content

1.DaemonSet基本概述

1.1 什么是DaemonSet

Kubernetes 中的 DaemonSet 是一种控制器,用于确保集群中的每个节点都运行一个 Pod 的副本。与 ReplicaSet 或 Deployment 不同,DaemonSet 中的 Pod 在每个节点上运行一个副本,而不是在整个集群中维护特定数量的副本。

当有节点加⼊集群时, 也会为他们新增⼀个 Pod。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

image-20240513180816181

1.2 DaemonSet典型⽤法

  • 在每个节点上运行集群存储守护进程,如:GLuster、Ceph
  • 在每个节点上运行日志收集守护进程,如:fluentd、Filebeat、Logstash
  • 在每个节点上运行监控守护进程,如:PrometheusNodeExporter
  • 在每个节点上运行网络插件为Pod提供网络服务,如:fLannel、calico

1.3 DaemonSet常用参数

DaemonSet是标准的API资源类型,它在spec字段中嵌套字段有selector、tempalte,与Deployment用法基本相同,但DaemonSet 不管理Replicas,因为DaemonSet不是基于期望的副本数,而是基于节点数量来控制Pod数量

yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: <string>      #资源名称
  namespace: <string> #名称空间:DaemonSet资源⾪属于名称空间级别
spec:
  minReadySeconds: <integer>  #Pod就绪后多少秒内任一容器无崩溃方视为“就绪”
  selector:                   #标签选择器,必须匹配tempLate字段中Pod模板的标签
    matchLabels:
      name: <string>                #选择器标签,DaemonSet控制器⾃动选择符合标签的Pod作为目标
  revisionHistoryLimit: <integer>   #历史版本数量限制,超过限制的历史版本会被清理掉
  updateStrategy:
    type: <string>                  #更新策略,支持OnDelete、RollingUpdate两种类型
    rollingUpdate: <Object>         #滚动更新参数,专用于RolLingUpdate类型
      maxSurge: <string>             #最大超载,可以是绝对值(例如50%)或百分比(例如25%)
      maxUnavailable: <string>       #最大不可用,可以是绝对值(例如50%)或百分比(例如25%)
  template:                     #Pod模板
    metadata:                   #Pod元数据(Pod名称)
    spec:                       #Pod规格(Pod详情)
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: <string>      #资源名称
  namespace: <string> #名称空间:DaemonSet资源⾪属于名称空间级别
spec:
  minReadySeconds: <integer>  #Pod就绪后多少秒内任一容器无崩溃方视为“就绪”
  selector:                   #标签选择器,必须匹配tempLate字段中Pod模板的标签
    matchLabels:
      name: <string>                #选择器标签,DaemonSet控制器⾃动选择符合标签的Pod作为目标
  revisionHistoryLimit: <integer>   #历史版本数量限制,超过限制的历史版本会被清理掉
  updateStrategy:
    type: <string>                  #更新策略,支持OnDelete、RollingUpdate两种类型
    rollingUpdate: <Object>         #滚动更新参数,专用于RolLingUpdate类型
      maxSurge: <string>             #最大超载,可以是绝对值(例如50%)或百分比(例如25%)
      maxUnavailable: <string>       #最大不可用,可以是绝对值(例如50%)或百分比(例如25%)
  template:                     #Pod模板
    metadata:                   #Pod元数据(Pod名称)
    spec:                       #Pod规格(Pod详情)

2.DaemonSet部署实践

yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
spec:
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - name: http
          containerPort: 80
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 3
        readinessProbe:
          httpGet:
            path: "/"
            port: 80
            scheme: HTTP
          initialDelaySeconds: 3
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
spec:
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - name: http
          containerPort: 80
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 3
        readinessProbe:
          httpGet:
            path: "/"
            port: 80
            scheme: HTTP
          initialDelaySeconds: 3

3.DaemonSet更新策略

DaemonSet也⽀持更新策略,它⽀持 OnDeleteRollingUpdate两种

  • OnDelete:是在相应节点的Pod资源被删除后重建为新版本,从而允许用户手动编排更新过程
  • RollingUpdate:滚动更新,工作逻辑和DepLoyment滚动更新类似