DaemonSet可以让全部(或者一些特定)的Node节点运行同一个pod。当节点加入到kubernetes集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从kubernetes集群中被移除,被(DaemonSet)调度的pod会被移除,若是删除DaemonSet,全部跟这个DaemonSet相关的pods都会被删除。
在使用kubernetes来运行应用时,不少时候咱们须要在一个区域(zone)或者全部Node上运行同一个守护进程(pod),例如以下场景:
每一个Node上运行一个分布式存储的守护进程,例如glusterd,ceph
每一个Node上运行日志采集器,例如fluentd,logstash
每一个Node上运行监控的采集端,例如Prometheus Node Exporter,collectd等
在简单的状况下,一个DaemonSet能够覆盖全部的Node,来实现Only-One-Pod-Per-Node这种情形;在有的状况下,咱们对不一样的计算节点进行标记,或者把kubernetes的集群节点分为多个zone,DaemonSet也能够在每一个zone上实现Only-One-Pod-Per-Node。node
apiVersion,kind,metadata.specgit
.spec.template 是.spec字段的必须字段,便是pod template. 除了当嵌套的时候不须要apiVersion 或 kind字段,其余跟pod模板彻底同样。github
同时RestartPolicy 只能设置为 Always, 不指定,默认为 Always.api
spec.selector 支持两种匹配:分布式
matchLabelside
matchExpressionsui
当两种匹配方式都配置的时候,匹配结果为交集.spa
当指定.spec.template.spec.nodeSelector, DaemonSet controller 将会在nodeSelector匹配的节点上建立pod。一样当你指定.spec.template.spec.affinity 后, DaemonSet controller 会在 node affinity匹配的节点上建立pod。若是都没有指定,DaemonSet controller 在全部node节点上建立pod..net
被DaemonSet controller建立的pod会默认指定.spec.nodeName,因此pod会被k8s的调度器忽略. 因此:日志
unschedulable 字段不会被 DaemonSet controller识别。
当k8s的调度器没有启动的时候,DaemonSet controller也能工做。
跟DaemonSet建立的pod通讯方法:
Push: DaemonSet建立的pod被配置成更新配置到其余服务,它们不须要客户端。
NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此经过node IP就能够通讯。
DNS:
Service:
若是node labels 改变, DaemonSet 会迅速添加pod到新匹配的node,删除再也不匹配节点上的pod。
你能够修改DaemonSet建立的pod. 然而,不是全部的字段均可以修改 。同时DaemonSet controller仍然使用以前的模板当新增长节点的时候。
删除 DaemonSet时,若是kubectl指定--cascade=false, 建立的pods 会保留在node节点上. 你能够用不一样的模板建立新的DaemonSet。新建立的DaemonSet经过相同的标签会识别以前的pod,DaemonSet不会修改或者删除以前建立的pod, 你能够手动删除以前的pod来使DaemonSet自动建立新的pod。
Kubernetes 1.6版本及之后, DaemonSet支持滚动升级。
静态pods不会被 kubectl 或者其余 Kubernetes API 客户端所管理. 由于静态pod不依赖于 apiserver。
本文出自于
DaemonSet可以让全部(或者一些特定)的Node节点运行同一个pod。当节点加入到kubernetes集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从kubernetes集群中被移除,被(DaemonSet)调度的pod会被移除,若是删除DaemonSet,全部跟这个DaemonSet相关的pods都会被删除。
在使用kubernetes来运行应用时,不少时候咱们须要在一个区域(zone)或者全部Node上运行同一个守护进程(pod),例如以下场景:
每一个Node上运行一个分布式存储的守护进程,例如glusterd,ceph
每一个Node上运行日志采集器,例如fluentd,logstash
每一个Node上运行监控的采集端,例如Prometheus Node Exporter,collectd等
在简单的状况下,一个DaemonSet能够覆盖全部的Node,来实现Only-One-Pod-Per-Node这种情形;在有的状况下,咱们对不一样的计算节点进行标记,或者把kubernetes的集群节点分为多个zone,DaemonSet也能够在每一个zone上实现Only-One-Pod-Per-Node。
apiVersion,kind,metadata.spec
.spec.template 是.spec字段的必须字段,便是pod template. 除了当嵌套的时候不须要apiVersion 或 kind字段,其余跟pod模板彻底同样。
同时RestartPolicy 只能设置为 Always, 不指定,默认为 Always.
spec.selector 支持两种匹配:
matchLabels
matchExpressions
当两种匹配方式都配置的时候,匹配结果为交集.
当指定.spec.template.spec.nodeSelector, DaemonSet controller 将会在nodeSelector匹配的节点上建立pod。一样当你指定.spec.template.spec.affinity 后, DaemonSet controller 会在 node affinity匹配的节点上建立pod。若是都没有指定,DaemonSet controller 在全部node节点上建立pod.
被DaemonSet controller建立的pod会默认指定.spec.nodeName,因此pod会被k8s的调度器忽略. 因此:
unschedulable 字段不会被 DaemonSet controller识别。
当k8s的调度器没有启动的时候,DaemonSet controller也能工做。
跟DaemonSet建立的pod通讯方法:
Push: DaemonSet建立的pod被配置成更新配置到其余服务,它们不须要客户端。
NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此经过node IP就能够通讯。
DNS:
Service:
若是node labels 改变, DaemonSet 会迅速添加pod到新匹配的node,删除再也不匹配节点上的pod。
你能够修改DaemonSet建立的pod. 然而,不是全部的字段均可以修改 。同时DaemonSet controller仍然使用以前的模板当新增长节点的时候。
删除 DaemonSet时,若是kubectl指定--cascade=false, 建立的pods 会保留在node节点上. 你能够用不一样的模板建立新的DaemonSet。新建立的DaemonSet经过相同的标签会识别以前的pod,DaemonSet不会修改或者删除以前建立的pod, 你能够手动删除以前的pod来使DaemonSet自动建立新的pod。
Kubernetes 1.6版本及之后, DaemonSet支持滚动升级。
静态pods不会被 kubectl 或者其余 Kubernetes API 客户端所管理. 由于静态pod不依赖于 apiserver。
本文出自于
DaemonSet可以让全部(或者一些特定)的Node节点运行同一个pod。当节点加入到kubernetes集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从kubernetes集群中被移除,被(DaemonSet)调度的pod会被移除,若是删除DaemonSet,全部跟这个DaemonSet相关的pods都会被删除。
在使用kubernetes来运行应用时,不少时候咱们须要在一个区域(zone)或者全部Node上运行同一个守护进程(pod),例如以下场景:
每一个Node上运行一个分布式存储的守护进程,例如glusterd,ceph
每一个Node上运行日志采集器,例如fluentd,logstash
每一个Node上运行监控的采集端,例如Prometheus Node Exporter,collectd等
在简单的状况下,一个DaemonSet能够覆盖全部的Node,来实现Only-One-Pod-Per-Node这种情形;在有的状况下,咱们对不一样的计算节点进行标记,或者把kubernetes的集群节点分为多个zone,DaemonSet也能够在每一个zone上实现Only-One-Pod-Per-Node。
apiVersion,kind,metadata.spec
.spec.template 是.spec字段的必须字段,便是pod template. 除了当嵌套的时候不须要apiVersion 或 kind字段,其余跟pod模板彻底同样。
同时RestartPolicy 只能设置为 Always, 不指定,默认为 Always.
spec.selector 支持两种匹配:
matchLabels
matchExpressions
当两种匹配方式都配置的时候,匹配结果为交集.
当指定.spec.template.spec.nodeSelector, DaemonSet controller 将会在nodeSelector匹配的节点上建立pod。一样当你指定.spec.template.spec.affinity 后, DaemonSet controller 会在 node affinity匹配的节点上建立pod。若是都没有指定,DaemonSet controller 在全部node节点上建立pod.
被DaemonSet controller建立的pod会默认指定.spec.nodeName,因此pod会被k8s的调度器忽略. 因此:
unschedulable 字段不会被 DaemonSet controller识别。
当k8s的调度器没有启动的时候,DaemonSet controller也能工做。
跟DaemonSet建立的pod通讯方法:
Push: DaemonSet建立的pod被配置成更新配置到其余服务,它们不须要客户端。
NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此经过node IP就能够通讯。
DNS:
Service:
若是node labels 改变, DaemonSet 会迅速添加pod到新匹配的node,删除再也不匹配节点上的pod。
你能够修改DaemonSet建立的pod. 然而,不是全部的字段均可以修改 。同时DaemonSet controller仍然使用以前的模板当新增长节点的时候。
删除 DaemonSet时,若是kubectl指定--cascade=false, 建立的pods 会保留在node节点上. 你能够用不一样的模板建立新的DaemonSet。新建立的DaemonSet经过相同的标签会识别以前的pod,DaemonSet不会修改或者删除以前建立的pod, 你能够手动删除以前的pod来使DaemonSet自动建立新的pod。
Kubernetes 1.6版本及之后, DaemonSet支持滚动升级。
静态pods不会被 kubectl 或者其余 Kubernetes API 客户端所管理. 由于静态pod不依赖于 apiserver。
本文出自于https://blog.csdn.net/ptmozhu/article/details/71101950