zoukankan      html  css  js  c++  java
  • 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支持滚动升级。

  • 相关阅读:
    并发编程学习笔记(15)----Executor框架的使用
    并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理
    并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
    并发编程学习笔记(12)----Fork/Join框架
    并发编程学习笔记(11)----FutureTask的使用及实现
    并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理
    设计模式:代理模式
    设计模式:装饰模式
    设计模式:几大原则
    设计模式:策略模式(Strategy)
  • 原文地址:https://www.cnblogs.com/MUMO/p/8033178.html
Copyright © 2011-2022 走看看