DaemonSet 有两种更新策略 :
OnDelete: 默认的向后兼容更新策略. 只有当你手动删除老的DaemonSet pods时,新的DaemonSet pods 才会被自动创建。跟k8s 1.5版本及以前的行为类似。
RollingUpdate: 老的DaemonSet pods会被自动杀死,新的DaemonSet pods会自动创建。
DaemonSet rollout历史目前还不支持.
DaemonSet 回滚 目前 kubectl还不支持. 你可以修改到DaemonSet 模板到以前版本来实现rollback.
当你第一次设置RollingUpdate 滚动更新策略时,rollout 会被触发, 即使DaemonSet 模板没有修改. 所有的DaemonSet pods 会重启.
要避免重启, 首先获取DaemonSet .spec.templateGeneration:的当前值。
kubectl get ds/
输出应为数字N. 如果没有输出数字,则 N = 0.
然后在设置DaemonSet的滚动更新策略.spec.updateStrategy 为RollingUpdate时
给DaemonSet pods 打上标签 pod-template-generation=
kubectl label pods -l
这步主要是告诉DaemonSet刚刚打标签的 DaemonSet pods 是被当前模板创建的.
你同时也想设置 .spec.updateStrategy.rollingUpdate.maxUnavailable (默认为 1) 跟 .spec.minReadySeconds (默认为 0) 两个参数.
kubectl get ds/
如果你还没有创建DaemonSet, 使用以下命令:
kubectl create -f ds.yaml --dry-run -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}'
输出应该是:
RollingUpdate
如果输出不是 RollingUpdate, 修改 DaemonSet 资源对象的相关字段。
kubectl create -f ds.yaml
如果使用kubectl apply部署 DaemonSet ,使用以下命令
kubectl apply -f ds.yaml
以下三个命令都可以修改DaemonSet 模板
kubectl apply -f ds-v2.yaml
kubectl edit ds/
kubectl patch ds/
如果只更新镜像,可以使用以下命令:
kubectl set image ds/
kubectl rollout status ds/
当滚地更新完成,输出如下:
daemon set "
可能有以下原因:
一些节点资源用尽
可以使用以下命令查看那个节点资源用尽:
kubectl get pods -l
当容器镜像不存在时,就会发生滚动中断。