kubernetes DaemonSet资源对象

What is a DaemonSet?

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

Writing a DaemonSet Spec

Required Fields(必须字段)

apiVersion,kind,metadata.specgit

Pod Template

.spec.template.spec字段的必须字段,便是pod template. 除了当嵌套的时候不须要apiVersionkind字段,其余跟pod模板彻底同样。github

同时RestartPolicy 只能设置为 Always, 不指定,默认为 Always.api

Pod Selector

spec.selector 支持两种匹配:分布式

  • matchLabelside

  • matchExpressionsui

当两种匹配方式都配置的时候,匹配结果为交集.spa

Running Pods on Only Some Nodes

当指定.spec.template.spec.nodeSelector, DaemonSet controller 将会在nodeSelector匹配的节点上建立pod。一样当你指定.spec.template.spec.affinity 后, DaemonSet controller 会在 node affinity匹配的节点上建立pod。若是都没有指定,DaemonSet controller 在全部node节点上建立pod..net

How Daemon Pods are Scheduled

被DaemonSet controller建立的pod会默认指定.spec.nodeName,因此pod会被k8s的调度器忽略. 因此:日志

  • unschedulable 字段不会被 DaemonSet controller识别。

  • 当k8s的调度器没有启动的时候,DaemonSet controller也能工做。

Communicating with Daemon Pods

跟DaemonSet建立的pod通讯方法:

  • Push: DaemonSet建立的pod被配置成更新配置到其余服务,它们不须要客户端。

  • NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此经过node IP就能够通讯。

  • DNS:

  • Service:

Updating a DaemonSet

若是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支持滚动升级。

Alternatives to DaemonSet

Init Scripts

Bare Pods

Static Pods

静态pods不会被 kubectl 或者其余 Kubernetes API 客户端所管理. 由于静态pod不依赖于 apiserver。

本文出自于

What is a DaemonSet?

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。

Writing a DaemonSet Spec

Required Fields(必须字段)

apiVersion,kind,metadata.spec

Pod Template

.spec.template.spec字段的必须字段,便是pod template. 除了当嵌套的时候不须要apiVersionkind字段,其余跟pod模板彻底同样。

同时RestartPolicy 只能设置为 Always, 不指定,默认为 Always.

Pod Selector

spec.selector 支持两种匹配:

  • matchLabels

  • matchExpressions

当两种匹配方式都配置的时候,匹配结果为交集.

Running Pods on Only Some Nodes

当指定.spec.template.spec.nodeSelector, DaemonSet controller 将会在nodeSelector匹配的节点上建立pod。一样当你指定.spec.template.spec.affinity 后, DaemonSet controller 会在 node affinity匹配的节点上建立pod。若是都没有指定,DaemonSet controller 在全部node节点上建立pod.

How Daemon Pods are Scheduled

被DaemonSet controller建立的pod会默认指定.spec.nodeName,因此pod会被k8s的调度器忽略. 因此:

  • unschedulable 字段不会被 DaemonSet controller识别。

  • 当k8s的调度器没有启动的时候,DaemonSet controller也能工做。

Communicating with Daemon Pods

跟DaemonSet建立的pod通讯方法:

  • Push: DaemonSet建立的pod被配置成更新配置到其余服务,它们不须要客户端。

  • NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此经过node IP就能够通讯。

  • DNS:

  • Service:

Updating a DaemonSet

若是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支持滚动升级。

Alternatives to DaemonSet

Init Scripts

Bare Pods

Static Pods

静态pods不会被 kubectl 或者其余 Kubernetes API 客户端所管理. 由于静态pod不依赖于 apiserver。

本文出自于

What is a DaemonSet?

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。

Writing a DaemonSet Spec

Required Fields(必须字段)

apiVersion,kind,metadata.spec

Pod Template

.spec.template.spec字段的必须字段,便是pod template. 除了当嵌套的时候不须要apiVersionkind字段,其余跟pod模板彻底同样。

同时RestartPolicy 只能设置为 Always, 不指定,默认为 Always.

Pod Selector

spec.selector 支持两种匹配:

  • matchLabels

  • matchExpressions

当两种匹配方式都配置的时候,匹配结果为交集.

Running Pods on Only Some Nodes

当指定.spec.template.spec.nodeSelector, DaemonSet controller 将会在nodeSelector匹配的节点上建立pod。一样当你指定.spec.template.spec.affinity 后, DaemonSet controller 会在 node affinity匹配的节点上建立pod。若是都没有指定,DaemonSet controller 在全部node节点上建立pod.

How Daemon Pods are Scheduled

被DaemonSet controller建立的pod会默认指定.spec.nodeName,因此pod会被k8s的调度器忽略. 因此:

  • unschedulable 字段不会被 DaemonSet controller识别。

  • 当k8s的调度器没有启动的时候,DaemonSet controller也能工做。

Communicating with Daemon Pods

跟DaemonSet建立的pod通讯方法:

  • Push: DaemonSet建立的pod被配置成更新配置到其余服务,它们不须要客户端。

  • NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此经过node IP就能够通讯。

  • DNS:

  • Service:

Updating a DaemonSet

若是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支持滚动升级。

Alternatives to DaemonSet

Init Scripts

Bare Pods

Static Pods

静态pods不会被 kubectl 或者其余 Kubernetes API 客户端所管理. 由于静态pod不依赖于 apiserver。

本文出自于https://blog.csdn.net/ptmozhu/article/details/71101950

相关文章
相关标签/搜索