|NO.Z.00148|——————————|CloudNative|——|KuberNetes&资源调度.V18|——|daemonset.v03|更新|回滚|
一、daemonset更新和回滚
### --- daemonset的更新
~~~ 使用RollingUpdate更新DaemonSet
~~~ daemonset滚动更新是先删除然后再创建一个新的。
~~~ 默认的更新策略是RollingUpdate;多了一个update字符串,maxUnavailable:最大不可用是1,
~~~ 建议滚动更新的配置是1,写的很大的话,可能影响范围就比较大,写的小的话,影响可能就不会这么大。
[root@k8s-master01 ~]# kubectl get ds -oyaml
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
### --- 查看更新后pod的状态
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6dxm6 1/1 Running 0 6s 172.18.195.9 k8s-master03 <none> <none>
nginx-pnl8k 1/1 Running 0 49s 172.27.14.195 k8s-node02 <none> <none>
nginx-t26ct 1/1 Running 0 2m19s 172.17.125.3 k8s-node01 <none> <none>
二、daemonset更新过程
### --- daemonset更新过程
[root@k8s-master01 ~]# kubectl get po -l app=nginx -w
NAME READY STATUS RESTARTS AGE
nginx-n47b7 1/1 Running 0 12m
nginx-tsxcp 1/1 Running 0 13m
nginx-wfrpz 1/1 Running 0 8m36s
~~~ 第一阶段:初始状态
nginx-n47b7 1/1 Terminating 0 16m
nginx-t26ct 0/1 Pending 0 0s
nginx-t26ct 0/1 ContainerCreating 0 1s
nginx-t26ct 1/1 Running 0 35s
~~~ 第二阶段:删除第一个再去更新创建第一个Pod
nginx-tsxcp 1/1 Terminating 0 18m
nginx-pnl8k 0/1 Pending 0 0s
nginx-pnl8k 0/1 ContainerCreating 0 0s
nginx-pnl8k 1/1 Running 0 39s
~~~ 第三阶段:删除第二个再去更新创建第二个Pod
nginx-wfrpz 1/1 Terminating 0 15m
nginx-6dxm6 0/1 Pending 0 0s
nginx-6dxm6 0/1 ContainerCreating 0 0s
nginx-6dxm6 1/1 Running 0 2s
~~~ 第四阶段:删除第三个再去更新创建第三个Pod
~~~ 不建议把maxUnavailable的值设置很大,一般设置为1即可。设置很大,影响会很大
~~~ 且不建议使用RollingUpdate更新,而是使用OnDelete,建议使用OnDelete更新DaemonSet
三、使用OnDelete更新daemonset
### --- 使用OnDelete更新DaemonSet
[root@k8s-master01 ~]# kubectl set image ds nginx nginx=nginx:1.15.2 --record
daemonset.apps/nginx image updated
### --- 查看更新模式
[root@k8s-master01 ~]# kubectl edit ds
updateStrategy:
type: OnDelete
### --- 查看pod的状态
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-76llf 1/1 Running 0 6m34s 172.27.14.196 k8s-node02 <none> <none>
nginx-ts5x4 1/1 Running 0 6m21s 172.18.195.10 k8s-master03 <none> <none>
nginx-v245j 1/1 Running 0 5m34s 172.17.125.4 k8s-node01 <none> <none>
### --- 触发更新pod
[root@k8s-master01 ~]# kubectl delete po nginx-76llf //删掉这一台容器,删掉完之后它就会触发更新
pod "nginx-76llf" deleted
### --- pod历史版本
~~~ 部署守护进程的时候会使用到这种方式。
[root@k8s-master01 ~]# kubectl rollout history ds nginx
daemonset.apps/nginx
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image ds nginx nginx=nginx:1.15.3 --record=true
4 <none>
### --- 为什么建议使用OnDelete呢?
~~~ 就是在k8s集群中,肯定有很多的节点的,DaemonSet也是部署在这些节点上。
~~~ 肯定有些节点是用来当做测试环境的,而我们可以从不重要的节点中测试,
~~~ 测试没有问题,再去部署其它的节点。
~~~ 若是这个镜像由问题的话,就只影响这一台容器。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)