5.4.2 更新DaemonSet对象

DaemonSet 自 Kubernets 1.6 版本起也开始支持更新机制,相关配置定义在spec.update-Strategy嵌套字段中。目前,它支持 RollingUpdate(滚动更新)和OnDelete(删除时更新)两种更新策略,滚动更新为默认更新的更新策略,工作逻辑类似于Deployment控制,不过仅支持使用maxUnavailabe属性定义最大不可用Pod资源副本数(默认值为1),而删除时更新的方式则是在删除相应节点的Pod资源后重建并更新为新版本。

例如,将此前创建的filebeat-ds中的Pod模板中的容器镜像升级为“ikubernetest/filebrat:5.6.6-alpine”,使用“kubectl set image”命令即可实现:

**[terminal]
**[delimiter $ ]**[command kubectl set image daemonsets filebeat-ds filebeat=ikubernetes/filebeat:5.6.6-alpine]
daemonset.apps/filebeat-ds image updated

从下面命令的返回结果可以看出,filebeat-ds控制器Pod模板中的容器镜像文件已经完成更新,对滚动更新策略来说,它会自动触发更新操作。用户也可以通过filebeat-ds控制器的详细信息中的Events字段等来了解滚动更新的操作过程。从下面的命令结果可以看出,默认的滚动更新策略是一次删除一个工作节点上的Pod资源,待其新版本Pod资源重建完成后再开始操作另一个工作节点上的Pod资源:

**[terminal]
**[delimiter $ ]**[command kubectl describe daemonsets.apps filebeat-ds]
Name:           filebeat-ds
Selector:       app=filebeat
Node-Selector:  <none>
Labels:         app=filebeat
Annotations:    deprecated.daemonset.template.generation: 2
Desired Number of Nodes Scheduled: 5
Current Number of Nodes Scheduled: 5
Number of Nodes Scheduled with Up-to-date Pods: 5
Number of Nodes Scheduled with Available Pods: 5
Number of Nodes Misscheduled: 0
Pods Status:  5 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=filebeat
  Containers:
   filebeat:
    Image:      ikubernetes/filebeat:5.6.6-alpine
    Port:       <none>
    Host Port:  <none>
    Environment:
      REDIS_HOST:  db.ilinux.io:6379
      LOG_LEVEL:   info
    Mounts:        <none>
  Volumes:         <none>
Events:
  Type    Reason            Age   From                  Message
  ----    ------            ----  ----                  -------
  Normal  SuccessfulCreate  42m   daemonset-controller  Created pod: filebeat-ds-n7g9k
  Normal  SuccessfulCreate  42m   daemonset-controller  Created pod: filebeat-ds-pprv2
  Normal  SuccessfulCreate  42m   daemonset-controller  Created pod: filebeat-ds-jb4wz
  Normal  SuccessfulCreate  42m   daemonset-controller  Created pod: filebeat-ds-txj4b
  Normal  SuccessfulCreate  42m   daemonset-controller  Created pod: filebeat-ds-9tjl5
  Normal  SuccessfulDelete  40m   daemonset-controller  Deleted pod: filebeat-ds-n7g9k
  Normal  SuccessfulCreate  40m   daemonset-controller  Created pod: filebeat-ds-skq7d
  Normal  SuccessfulDelete  40m   daemonset-controller  Deleted pod: filebeat-ds-9tjl5
  Normal  SuccessfulCreate  40m   daemonset-controller  Created pod: filebeat-ds-cqwjd
  Normal  SuccessfulDelete  39m   daemonset-controller  Deleted pod: filebeat-ds-pprv2
  Normal  SuccessfulCreate  39m   daemonset-controller  Created pod: filebeat-ds-98hcp
  Normal  SuccessfulDelete  39m   daemonset-controller  Deleted pod: filebeat-ds-txj4b
  Normal  SuccessfulCreate  39m   daemonset-controller  Created pod: filebeat-ds-sr8z2
  Normal  SuccessfulDelete  39m   daemonset-controller  Deleted pod: filebeat-ds-jb4wz
  Normal  SuccessfulCreate  39m   daemonset-controller  (combined from similar events): Created pod: filebeat-ds-whfc2

DaemonSet 控制器的滚动更新机制也可以借助于minReadySeconds字段控制滚动节奏,必要时可以执行暂停和继续操作,因此它也能够设计为金丝雀发布机制。另外,故障的更新操作也可以进行回滚,包括回滚至revision历史记录中的任何一个指定的版本。鉴于篇幅,这里不再给出其详细过程,感兴趣的读者可参考Deployment控制器的步骤测试其实现。

results matching ""

    No results matching ""