今天继续给大家介绍Linux运维相关知识,本文主要内容是DaemonSet控制器。
一、DaemonSet控制器概述
在前面的文章中,我们学习了ReplicaSet控制器和Deployment控制器,今天,我们来讲解一下DaemonSet控制器。与之前的两款控制器不同的是,DaemonSet控制器会在集群的全部节点上同时创建一个Pod资源对象,或者是使用节点选择器,只在指定节点上创建Pod对象。DaemonSet控制器不需要也不支持replicas参数,因为DaemonSet控制器的Pod数量完全是由Node节点的数量决定的。注意,在DaemonSet控制器建立后,后续有新的节点加入Kubernetes集群,那么新加入的节点也需要创建一个DaemonSet控制器所控制的Pod对象;同样的,在Node节点移除Kubernetes集群后DaemonSet控制器也不需要重建Pod对象。
DaemonSet控制器适合于以下场景:
1、运行集群存储的守护进程,例如glusterd或ceph
2、在各个Node节点上运行日志收集守护进程,如fluentd和logstash
3、在各个节点上运行监控系统的代理守护进程,如Prometheus Node Exporter、collectd、Datadog agent、New Relic agent和Ganlia gmond等。
二、DaemonSet控制器创建
接下来,我们就通过资源清单的方式,来尝试创建DaemonSet控制器。我们创建DaemonSet.yaml文件,并写入如下内容:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-demo
namespace: default
labels:
daemon: test
pod: nginx
spec:
selector:
matchLabels:
daemon: test
pod: nginx
template:
metadata:
labels:
daemon: test
pod: nginx
spec:
containers:
- name: nginx
image: nginx:1.12
ports:
- name: http
containerPort: 80
配置好的文件如下所示:
上述配置文件中的各项参数在前面的文章中都已经介绍过了,在这里就不过多赘述了。接下来,我们直接执行命令:
kubectl apply -f DaemonSet.yaml
尝试创建DaemonSet控制器,该命令执行结果如下:
接下来,我们来查看一下我们创建的DaemonSet控制器,执行命令:
kubectl describe daemonset daemonset-demo
结果如下所示:
然后,我们查看一下Kubernetes集群中的pod,执行命令:
kubectl get pods -o wide
执行结果如下:
从以上可以看出,DaemonSet控制器的Pod资源一共创建了2个,并且是每个结点上各运行了1个。
三、DeamonSet对象更新
DaemonSet在Kubernetes1.6版本之后开始支持更新机制,并且支持滚动更新(RollingUpdate)和删除时更新(OnDeleteUpdate)两种更新策略。DaemonSet的更新策略默认是滚动更新,并且可以通过spec.updateStrategy参数来设置修改。
DaemonSet控制器的更新命令如下:
kubectl set image daemonset daemonset-demo nginx=nginx:1.14
在上述命令中,我们使用了set image的方式来更新daemonset控制器的版本,nginx为我们的DaemonSet的资源配置清单中定义的Pod中Container的名称。该命令执行结果如下:
我们可以查看DaemonSet控制器更新结果,如下所示:
从上图中可以看出,DaemonSet控制器已经完成更新,并且更新策略是滚动更新。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200