博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kubernetes DaemonSet资源对象
阅读量:7217 次
发布时间:2019-06-29

本文共 1954 字,大约阅读时间需要 6 分钟。

hot3.png

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上运行监控的采集端,例如, 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 

Pod Template

.spec.template 是.spec字段的必须字段,即是. 除了当嵌套的时候不需要 apiVersion 或 kind字段,其他跟pod模板完全一样。

同时 只能设置为 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 会在 匹配的节点上创建pod。如果都没有指定,DaemonSet controller 在所有node节点上创建pod.

How Daemon Pods are Scheduled

被DaemonSet controller创建的pod会默认指定.spec.nodeName,所以pod会被k8s的调度器忽略. 所以:

  •  字段不会被 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://my.oschina.net/xiaominmin/blog/2049600

你可能感兴趣的文章
20131108
查看>>
django.http.request中HttpRequest对象的一些属性与方法
查看>>
英文对应解释
查看>>
Robotics ToolBox机械臂仿真
查看>>
linux添加环境变量
查看>>
【uva 1312】Cricket Field(算法效率--技巧枚举)
查看>>
VS2017 MVC项目,新建控制器提示未能加载文件或程序集“Dapper.Contrib解决方法
查看>>
【ora-err】ORA-03113: end-of-file on communication channel
查看>>
00.索引-综述
查看>>
strcpy
查看>>
AC3 Rematrix
查看>>
C#之Windows Form Application与attribute
查看>>
函数与指针分析实例
查看>>
爬虫:pycurl模块的使用说明
查看>>
Halcon算子翻译——try
查看>>
Win732位安装PostgreSQL9
查看>>
Ext JS4学习笔记1——环境的搭建
查看>>
.net MVC3实现不同的角色用不同的登录页面
查看>>
Scala学习笔记-12
查看>>
eq与gt的妙用
查看>>