系统相关
首页 > 系统相关> > 38 k8s-16DaemonSet:守护进程集

38 k8s-16DaemonSet:守护进程集

作者:互联网

DaemonSet:守护进程集,缩写为ds,在所有节点或者是匹配的节点上都部署一个Pod。
使用DaemonSet的场景:
✥ 运行集群存储的daemon,比如ceph或者glusterd
✥ 节点的CNI网络插件,calico
✥ 节点日志的收集:fluentd或者是filebeat
✥ 节点的监控:node exporter
✥ 服务暴露:部署一个ingress nginx

01.实例 创建一个DaemonSet

 1 01.## 创建一个ds##
 2 [root@k8s-master01 ~]# kubectl create -f nginx-ds.yaml 
 3 daemonset.apps/nginx created
 4 02.##列出当前命名空间下的全部 node,并显示更详细的信息##
 5     [root@k8s-master01 ~]# kubectl get node -owide
 6 03.##master节点目前没有打污点,所以master节点上面也有pod,正常是不要把pod起到master主节点上,全放node上; ##
 7 [root@k8s-master01 ~]# kubectl get po –owide
 8 #同上[root@k8s-master01 ~]# kubectl get pod –owide
 9 04.##如果不想给master部署容器,可以给它指定节点并打个标签,ds=true是标签##
10 [root@k8s-master01 ~]# kubectl label node k8s-node01 k8s-node02 ds=true
11 node/k8s-node01 labeled
12 node/k8s-node02 labeled
13 [root@k8s-master01 ~]# kubectl get node --show-labels
14 05.##编辑nginx-ds.yaml文件内容##
15 [root@k8s-master01 ~]# vim nginx-ds.yaml 
16 修改的内容对比:增加了ds:''true''
17 06.##更新yaml文件内容看结果##
18 [root@k8s-master01 ~]# kubectl replace -f nginx-ds.yaml   #执行更新
19 daemonset.apps/nginx replaced
20 ##列出当前命名空间下的Pod##
21 [root@k8s-master01 ~]# kubectl get pod
22 .......
23 07.##看到不符合要求的pod被自动删除##
24 [root@k8s-master01 ~]# kubectl get pod
25 NAME          READY   STATUS        RESTARTS   AGE
26 busybox       1/1     Running       1          110m
27 nginx-8vrcz   0/1     Terminating   0          2m36s
28 nginx-k6dj6   0/1     Terminating   0          2m36s
29 nginx-mgrks   1/1     Running       0          2m36s
30 08.##删除重建的过程还做了更新##
31 [root@k8s-master01 ~]# kubectl get po -owide  (#反复执行看更新结果)
32 …...省略……
33 ##更新的时候产生了两个之前的版本记录,因为没有加record,所以没有改变记录##
34 [root@k8s-master01 ~]# kubectl rollout history ds nginx   #查看历史版本
35 09.##实现了新的pod已经全部到node节点上面了,master主节点没有了;##
36 
37 10.##也可以直接指定master去创建pod## 
38 [root@k8s-master01 ~]# kubectl label node k8s-master03 ds=true
39 [root@k8s-master01 ~]# kubectl get pod
40 [root@k8s-master01 ~]# kubectl get pod -owide
41 NAME          READY   STATUS    RESTARTS   AGE    IP              NODE           NOMINATED NODE   READINESS GATES
42 busybox       1/1     Running   1          111m   10.244.32.153   k8s-master01   <none>           <none>
43 nginx-2khfj   1/1     Running   0          67s    10.244.58.205   k8s-node02     <none>           <none>
44 nginx-6s9cj   1/1     Running   0          16s    10.244.195.21   k8s-master03   <none>           <none>
45 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

  

搜索

复制

标签:kubectl,38,##,master01,nginx,k8s,16DaemonSet,ds
来源: https://www.cnblogs.com/kevin306/p/16227188.html