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。
Writing a DaemonSet Spec
Required Fields(必须字段)
apiVersion,
kind,
metadata
.spec
Pod Template
.spec.template
是.spec字段的必须字段,即是pod
template. 除了当嵌套的时候不需要
apiVersion
或 kind字段,其他跟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支持滚动升级。
DaemonSet的更多相关文章
- 【云计算】K8S DaemonSet 每个node上都运行一个pod
Kubernetes容器集群中的日志系统集成实践 Kubernetes是原生的容器编排管理系统,对于负载均衡.服务发现.高可用.滚动升级.自动伸缩等容器云平台的功能要求有原生支持.今天我分享一下我们在 ...
- DaemonSet 典型应用场景 - 每天5分钟玩转 Docker 容器技术(129)
Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. DaemonS ...
- DaemonSet 案例分析 - 每天5分钟玩转 Docker 容器技术(130)
本节详细分析两个 k8s 自己的 DaemonSet:kube-flannel-ds 和 kube-proxy . kube-flannel-ds 下面我们通过分析 kube-flannel-ds 来 ...
- 运行自己的 DaemonSet - 每天5分钟玩转 Docker 容器技术(131)
本节以 Prometheus Node Exporter 为例演示如何运行自己的 DaemonSet. Prometheus 是流行的系统监控方案,Node Exporter 是 Prometheus ...
- Kubernetes的DaemonSet(下篇)
用Daemon Pod来进行通信 使用Pod来再DaemonSet中通信的手段有: 推的方式:在DaemonSet中的Pod会被配置成发送更新到如状态数据库这样的服务.这些都没有客户端. IP+端口方 ...
- Kubernetes 笔记 09 DaemonSet 我是一只看门狗
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...
- Kubernetes的DaemonSet(上篇)
背景 静儿作为美团容器化团队HULK的一员,经常需要和Kubernetes(k8s)打交道.第一次登陆node(宿主机)的时候,发现连续登陆几台都看到了Prometheus-Node-Exporter ...
- kubernetes进阶之六:StatefulSet & DaemonSet
StatefulSet(有状态): StatefulSet适合持久性的应用程序,有唯一的网络标识符(IP),持久存储,有序的部署,拓展,删除和滚动更新. 在Kubernetes系统中,Pod的管理对象 ...
- Kubernetes之DaemonSet控制器
DaemonSet 简介 DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本.当有 Node 加入集群时,也会为他们新增一个 Pod .当有 Node 从集群移除时,这些 P ...
- kubernetes 每个node上只能运行一个副本DaemonSet
每个node上只能运行一个副本: apiVersion: extensions/v1beta1 kind: DaemonSet #使用DaemonSet的方式运行 metadata: name: ku ...
随机推荐
- sql获取当前时间
sql读取系统日期和时间的方法如下:--获取当前日期(如:yyyymmdd) select CONVERT (nvarchar(12),GETDATE(),112) --获取当前日期(如:yyyymm ...
- [技巧篇]19.InputStream与String,Byte之间互转[转载]
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- js的alert抛出之后怎么让页面停止执行?
方法: 1.如果是form的submit提交,如果要停止,则返回false:如果提交,则返回true就行了. 2.如果是手工跳转的方式,则如果要停止,则不执行跳转代码:如果要提交,则执行跳转代码 示例 ...
- 转【jenkins插件】
开源版本的Jenkins 具有三大能力:Master-Slave的分布式构建调度能力.Pipeline编排能力.强大的开源生态(插件)能力. 2017年4月,Jenkins创始人KK(Kohsuke ...
- 【vijos】P1066 弱弱的战壕
[算法]线段树 [题解]将所有坐标按x(第一)和y(第二)从小到大排序,再按顺序插入线段树,即在线段树中将y坐标位置+1,这样就能保证每个坐标能包含的点一定先被处理了,每次询问查询1...a[i].y ...
- oracle scott用户不存在
scott用户拥有一些基础的数据表,可以供我们练习sql.先执行 alter user scott account unlock; 查看scott用户是否存在 当scott用户不存在,我们就需要在$O ...
- CMD命令行下载文件
远程执行sct的另一种姿势 cscript /b C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs 127.0.0.1 scrip ...
- 基于Android的简单聊天工具-服务器端
1.数据库用的mysql,一共有3张表,一张用户表user.一张朋友列表friend和一张消息表message. 1 User table 用户表 uid 主键自动生成 userName 昵称 use ...
- 【Matlab】使用Matlab运行Windows命令
可以使用Matlab的一些命令来帮助程序运行.比如说 ! calc % 打开计算器 ! mspaint % 打开画图 dos calc % 打开计算器 比如一个程序要运行很长时间,而我们又不能一直守在 ...
- Vuex 基本概念
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 每一个 Vuex 应用的核心就是 stor ...