38 k8s-16.DaemonSet:守护进程集
DaemonSet:守护进程集,缩写为ds,在所有节点或者是匹配的节点上都部署一个Pod。
使用DaemonSet的场景:
✥ 运行集群存储的daemon,比如ceph或者glusterd
✥ 节点的CNI网络插件,calico
✥ 节点日志的收集:fluentd或者是filebeat
✥ 节点的监控:node exporter
✥ 服务暴露:部署一个ingress nginx
01.实例 创建一个DaemonSet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 01. ## 创建一个ds## [root@k8s-master01 ~] # kubectl create -f nginx-ds.yaml daemonset.apps /nginx created 02. ##列出当前命名空间下的全部 node,并显示更详细的信息## [root@k8s-master01 ~] # kubectl get node -owide 03. ##master节点目前没有打污点,所以master节点上面也有pod,正常是不要把pod起到master主节点上,全放node上; ## [root@k8s-master01 ~] # kubectl get po –owide #同上[root@k8s-master01 ~]# kubectl get pod –owide 04. ##如果不想给master部署容器,可以给它指定节点并打个标签,ds=true是标签## [root@k8s-master01 ~] # kubectl label node k8s-node01 k8s-node02 ds=true node /k8s-node01 labeled node /k8s-node02 labeled [root@k8s-master01 ~] # kubectl get node --show-labels 05. ##编辑nginx-ds.yaml文件内容## [root@k8s-master01 ~] # vim nginx-ds.yaml 修改的内容对比:增加了ds: '' true '' 06. ##更新yaml文件内容看结果## [root@k8s-master01 ~] # kubectl replace -f nginx-ds.yaml #执行更新 daemonset.apps /nginx replaced ##列出当前命名空间下的Pod## [root@k8s-master01 ~] # kubectl get pod ....... 07. ##看到不符合要求的pod被自动删除## [root@k8s-master01 ~] # kubectl get pod NAME READY STATUS RESTARTS AGE busybox 1 /1 Running 1 110m nginx-8vrcz 0 /1 Terminating 0 2m36s nginx-k6dj6 0 /1 Terminating 0 2m36s nginx-mgrks 1 /1 Running 0 2m36s 08. ##删除重建的过程还做了更新## [root@k8s-master01 ~] # kubectl get po -owide (#反复执行看更新结果) …...省略…… ##更新的时候产生了两个之前的版本记录,因为之前没有使用–record 所以这里没显示消息只有数字标号## [root@k8s-master01 ~] # kubectl rollout history ds nginx #查看历史版本 09. ##实现了新的pod已经全部到node节点上面了,master主节点没有了;## 10. ##也可以直接指定master去创建pod## [root@k8s-master01 ~] # kubectl label node k8s-master03 ds=true [root@k8s-master01 ~] # kubectl get pod [root@k8s-master01 ~] # kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES busybox 1 /1 Running 1 111m 10.244.32.153 k8s-master01 <none> <none> nginx-2khfj 1 /1 Running 0 67s 10.244.58.205 k8s-node02 <none> <none> nginx-6s9cj 1 /1 Running 0 16s 10.244.195.21 k8s-master03 <none> <none> nginx-n9q4d 1 /1 Running 0 75s 10.244.85.220 k8s-node01 <none> <none> |
02.DaemonSet更新策略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #对 DaemonSet 执行滚动更新的详细请操作参考官网: https: //kubernetes .io /zh/docs/tasks/manage-daemon/update-daemon-set/ #配置文件中注意maxUnavailable的值: updatestrategy: rollingUpdate: maxUnavailable: 1 #(1设置小点,更新的影响最小) type : RollingUpdate #故障排查# ##01.出现ErrImagePull,说明镜像没有拉取成功,需要检查问题;比如更新策略,或者镜像版本是否书写正确 ##02.排查报错问题 1. #第一个检查点--镜像策略:# kubectl edit ds 2. #检查镜像策略:imagePullPolicy: IfNotPresent (#检查没问题) 3. #再次刷新#kubectl get pod –owide查看问题依旧 4. #第二个检查点--查看pod更新过程 # kubectl describe pod nginx-glj6n (#nginx名字随机的,以实际为准) 发现问题了:是版本写错了,对比之前写的错误命令;(1.15.3前漏写了nginx) ##03.重新设置 # kubectl set image ds nginx nginx=nginx:1.15.3 --record ##04.然后又是先删除后创建 ##05.更新策略建议使用OnDelete ##06. 重新设置为1.15.2 # kubectl set image ds nginx nginx=nginx:1.15.2 --record ##07.测试:比如删除master03这个节点的,我们手动删除,删除之后就触发了OnDelete策略,它就只更新这一台,更新为ngnix为1.15.2 ##08.查看更新记录 #kubectl rollout history ds nginx |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步