38 k8s-16.DaemonSet:守护进程集
DaemonSet:守护进程集,缩写为ds,在所有节点或者是匹配的节点上都部署一个Pod。
使用DaemonSet的场景:
✥ 运行集群存储的daemon,比如ceph或者glusterd
✥ 节点的CNI网络插件,calico
✥ 节点日志的收集:fluentd或者是filebeat
✥ 节点的监控:node exporter
✥ 服务暴露:部署一个ingress nginx
01.实例 创建一个DaemonSet
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更新策略
#对 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
浙公网安备 33010602011771号