DaemonSet 通常用于执行系统级操作的任务。一个节点一个Pod,后加入的节点也会运行这个Pod,可以指定节点选择器来指定在某些节点上运行。启动节点时这些Pod会先于其他节点运行。


创建


主要字段:selector,template

API版本:apps/v1

创建DaemonSet:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat-ds
  labels:
    app: filebeat
spec:
  selector:
    matchLabels: 
      app: filebeat
  template:
    metadata:
      labels:
        app: filebeat
    spec:
      containers:
      - name: filebeat
        image: ikubernetes/filebeat:5.6.5-alpine
        env:
        - name: REDIS_HOST
          value: 10.244.1.79
        - name: LOG_LEVEL
          value: info

上面这个Pod需要使用到redis,下面是redis statefulset。

apiVersion: apps/v1
kind: StatefulSet
metadata: 
  name: redis
  labels:
    app: redis
spec:
  serviceName: redis
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis
        imagePullPolicy: IfNotPresent
        ports:
        - name: redis-port
          containerPort: 6379
        volumeMounts:
        - name: redis-data
          mountPath: /data 
      volumes:
      - name: redis-data
        emptyDir: {}

节点选择:spec.template.spec.nodeSelector

spec:
  nodeSelector:
    disktype: ssd



更新


滚动更新:RollingUpdate

        类似ds的更新机制,只支持maxUnavailabe 最大不可用默认值为1。

删除更新:OnDelete

        删除后重建。

配置字段:spec.updateStrategy

spec:
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1
    type: RollingUpdate

更新镜像:不支持 pause 和 resume。

kubectl set image daemonsets filebeat-ds filebeat=ikubernetes/filebeat:5.6.6-alpine

查看更新过程:可以使用minReadySeconds来控制更新节奏。

kubectl describe daemonsets filebeat-ds


回滚


查看历史版本:

kubectl rollout history daemonset

回滚到指定版本:

kubectl rollout undo daemonset filebeat-ds --to-revision=3

查看更新状态:

kubectl rollout status daemonset filebeat-ds