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控制器的步骤测试其实现。