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 ...
随机推荐
- Java设计模式の观察者模式(推拉模型)
目录: 一.观察者定义 二.观察者模式的结构(推模式实现) 三.推模型和拉模型(拉模式实现) 四.JAVA提供的对观察者模式的支持 五.使用JAVA对观察者模式的支持(自带推模式实现实例) 一.观察者 ...
- Mybatis 使用技巧总结
9月 11, 2014 | Nix.Huang 目录: 1.区分 #{} 和 ${}的不同应用场景 2.spring环境用mybatis-spring 的接口而不是Mybatis的原生接口 3.返回M ...
- 文件字节大小显示成M,G和K
//字节大小,K,M,G public static final long KB = 1024; public static final long MB = KB * 1024; public sta ...
- java将文件转为UTF8工具类
package hiveTest; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File ...
- Response.Redirect在新窗口打开(转载)
Response.Rederect在默认情况下是在本页跳转,所以除了在js中用window.open或是给A标签添加target属性之外,在后台似乎不能来打开新的页面,其实不然,通过设置form的ta ...
- A题 hdu 1235 统计同成绩学生人数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1235 统计同成绩学生人数 Time Limit: 2000/1000 MS (Java/Others) ...
- CPU架构及并发编程基础(一)
一.intel cpu发展计划tick-tock Tick-Tock是Intel发展微处理器芯片设计制造业务的一种战略模式.Intel指出,每一次处理器微架构的更新和每一次芯片制程的更新遵循“Tick ...
- Java中class的初始化顺序
由于Java 中的一切东西都是对象,所以许多活动 变得更加简单,这个问题便是其中的一例. 除非真的需要代码,否则那个文件是不会载入的.通常,我们可认为除非那个类的一个对象构造完毕, 否则代码不会真 ...
- YUV颜色编码解析(转)
原文转自 https://www.jianshu.com/p/a91502c00fb0
- Python阶段复习 - part 3 - Python函数
利用函数打印9*9乘法表 def cheng(num): for i in range(1,num+1): for j in range(1,i+1): print('{0} * {1} = {2}' ...