DaemonSet 确保所有(或某些)节点都运行Pod的副本。Daemon 在计算机中领域的意思是守护程序。
当一个新的节点被添加集群时,DaemonSet 会在该节点上创建一个新的Pod。当一个节点从集群中删除时,这些Pod会被回收。删除DaemonSet将清除其创建的Pod。
简单的示例
在每一个Node上都运行一个nginx:1.16
的Pod。Github 链接:https://raw.githubusercontent.com/chengqing-su/kubernetes-learning/master/daemon-set/nginx-daemon-set.yaml。
1 | apiVersion: apps/v1 |
创建/更新/删除
在此之前,我已经创建了一个3个master节点,3个worker节点的Kubernetes集群。
创建
执行命令:
1 | kubectl apply -f https://raw.githubusercontent.com/chengqing-su/kubernetes-learning/master/daemon-set/nginx-daemon-set.yaml |
结果:
DaemonSet 也是直接去管理Pod的,下面展示的是nginx-daemon-set-d6c6l
的metadata
.其metadata.ownerReferences
指向的是上面创建的名为nginx-daemon-set
的DaemonSet。
1 | metadata: |
更新
升级nginx容器的版本到1.17
。创建了一个新的manifest,其地址是:https://raw.githubusercontent.com/chengqing-su/kubernetes-learning/master/daemon-set/nginx-daemon-set-update.yaml
执行命令:
1 | kubectl apply -f https://raw.githubusercontent.com/chengqing-su/kubernetes-learning/master/daemon-set/nginx-daemon-set-update.yaml |
结果:
DeamonSet 更新PodTemplate之后,会自动删除旧的Pod,然后再根据新的PodTemplate创建新的Pod。
删除
从DaemonSet中删除一个Pod
从上述DaemonSet中删除名为nginx-daemon-set-cpqqd
的Pod
执行命令:
1 | kubectl delete pod nginx-daemon-set-cpqqd |
结果:
当该Pod被删除之后,DaemonSet会再旧Pod运行的节点上启动一个新的Pod。
删除 DaemonSet
执行命令:
1 | kubectl delete daemonset nginx-daemon-set |
结果:
什么时候使用
DaemonSet的一些典型用法是:
在每个节点上运行集群存储守护程序,例如glusterd,ceph。
在每个节点上运行日志收集守护程序,例如fluentd或filebeat。
在每个节点(例如Prometheus Node Exporter,Flowmill,Sysdig Agent,collected,Dynatrace OneAgent,AppDynamics Agent,Datadog代理,New Relic代理,Ganglia gmond,Instana代理或Elastic Metricbeat)上运行节点监视守护程序。