什么是 DaemonSet?

DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时,也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

如何调度 Daemon Pod?

正常情况下,Pod 运行在哪个机器上是由 Kubernetes 调度器来选择的。然而,由 Daemon Controller 创建的 Pod 已经确定了在哪个机器上(Pod 创建时指定了 .spec.nodeName),因此:

1.DaemonSet Controller 并不关心一个节点的 unschedulable 字段。

2.DaemonSet Controller 可以创建 Pod,即使调度器还没有启动,这对集群启动是非常有帮助的。

与 Daemon Pod 通信

与 DaemonSet 中的 Pod 进行通信,几种可能的模式如下:

1.Push:配置 DaemonSet 中的 Pod 向其它 Service 发送更新,例如统计数据库。它们没有客户端。

2.NodeIP 和已知端口:DaemonSet 中的 Pod 可以使用 hostPort,从而可以通过节点 IP 访问到 Pod。客户端能通过某种方法知道节点 IP 列表,并且基于此也可以知道端口。

3.DNS:创建具有相同 Pod Selector 的 Headless Service,然后通过使用 endpoints 资源或从 DNS 检索到多个 A 记录来发现 DaemonSet。

3.Service:创建具有相同 Pod Selector 的 Service,并使用该 Service 随机访问到某个节点上的 daemon(没有办法访问到特定节点)。

DaemonSet的一些典型用法是:

在每个节点上运行集群存储守护程序,例如glusterd,ceph。

在每个节点上运行日志收集守护程序,例如fluentd或logstash。

在每个节点上运行节点监视守护程序,例如Prometheus Node Exporter,Flowmill,Sysdig Agent,collected,Dynatrace OneAgent,AppDynamics Agent,Datadog代理,New Relic代理,Ganglia gmond或Instana代理。

示例

---
apiVersion: apps/v1
kind: DaemonSet
metadata:
   name: fluentd-elasticsearch
   namespace: kube-system
   labels:
     k8s-app: fluentd-logging
spec:
   selector:
     matchLabels:
       name: fluentd
   template:
     metadata:
       labels:
         name: fluentd
     spec:
       tolerations:
       - key: node-role.kubernetes.io/master
         effect: NoSchedule
       containers:
       - name: fluentd-elasticsearch
         image: fluentd:latest
         imagePullPolicy: IfNotPresent
         resources:
           limits:
             memory: 200Mi
           requests:
             cpu: 100m
             memory: 200Mi
         volumeMounts:
         - name: varlog
           mountPath: /var/log
         - name: varlibdockercontainers
           mountPath: /var/lib/docker/containers
           readOnly: true
       terminationGracePeriodSeconds: 30
       volumes:
       - name: varlog
         hostPath:
           path: /var/log
       - name: varlibdockercontainers
         hostPath:
           path: /var/lib/docker/containers

将清单提交给kubernetes集群,将创建定义的DaemonSet及其管理的pod

[root@master kubernetes]# kubectl apply -f DaemonSet.yaml

验证

[root@master kubernetes]# kubectl get pod -n kube-system -l name=fluentd --show-labels
NAME                          READY   STATUS    RESTARTS   AGE   LABELS
fluentd-elasticsearch-dzhxx   1/1     Running   0          11m   controller-revision-hash=758f794ffb,name=fluentd,pod-template-generation=1
fluentd-elasticsearch-npmtr   1/1     Running   0          11m   controller-revision-hash=758f794ffb,name=fluentd,pod-template-generation=1
fluentd-elasticsearch-s782s   1/1     Running   0          11m   controller-revision-hash=758f794ffb,name=fluentd,pod-template-generation=1
[root@master kubernetes]# kubectl get ds -n kube-system -l k8s-app=fluentd-logging --show-labels
NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   LABELS
fluentd-elasticsearch   3         3         3       3            3           <none>          11m   k8s-app=fluentd-logging
[root@master kubernetes]# kubectl get pod -n kube-system -l name=fluentd -o wide
NAME                          READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
fluentd-elasticsearch-dzhxx   1/1     Running   0          12m   10.244.0.5    master   <none>           <none>
fluentd-elasticsearch-npmtr   1/1     Running   0          12m   10.244.1.66   node01   <none>           <none>
fluentd-elasticsearch-s782s   1/1     Running   0          12m   10.244.2.61   node02   <none>           <none>

每个主机上都运行有flentd。并且留意labels和name对应的关系。

kubernetes资源清单之DaemonSet的更多相关文章

  1. kubernetes系列06—kubernetes资源清单定义入门

    本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...

  2. (四)Kubernetes 资源清单定义

    Kubernetes常用资源对象 依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为五个类别,如下: 类型 名称 工作负载(Workload) Pod.ReplicaSet.D ...

  3. Kubernetes 学习5 kubernetes资源清单定义入门

    一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...

  4. kubernetes 资源清单定义入门

    k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...

  5. 4、kubernetes资源清单快速入门190625

    一.资源清单概念 资源/对象的类型 工作负载型资源:Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob, ... 服务发 ...

  6. kubernetes资源清单之pod

    什么是pod? Pod是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行这些容器的规范. Pod的内容始终位于同一地点,并在同一时间安排,并在共享上下文中运行. Po ...

  7. 5、kubernetes资源清单定义入门

    使用配置清单创建资源 定义pod时使用yaml格式 master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE client / Error 1 ...

  8. 7、kubernetes资源清单之Service资源190714

    一.Service简介 Service为Pod提供固定服务端点 Service的本质是一条iptables或者ipvs的转发规则 userspace:1.1- iptables:1.1+ ipvs:1 ...

  9. 6、kubernetes资源清单之Pod控制器190714

    一.Pod控制器的类别 ReplicationController:早期唯一的控制器,已废弃 ReplicaSet:控制Pod满足用户期望副本:标签选择器选择由自己管理的Pod副本:Pod资源模板完成 ...

随机推荐

  1. [Hadoop] Yarn & k8s

    写在前面 一.大数据全栈 头两节讲完HDFS & MapReduce,这一部分聊一聊它们之间的“人物关系”. 其中也讨论下k8s的学习必要性. Ref: [Distributed ML] Yi ...

  2. Delphi编写的等长加密与解密

    最近在看一本关于网络游戏服务端开发的书,虽然该书是个空架子,里面没有多少实际的内容(此书评价不好),但其中关于等长加密与解密的代码还是有一定的借鉴作用的.他山之石,可以攻玉.因为书中是C++的代码,所 ...

  3. redis 3.2.5单机版安装、使用、systemctl管理Redis启动、停止、开机启动

    参照地址 http://www.mamicode.com/info-detail-1488639.html 前提:防火墙安装,然后打开端口,设置开机启动 一.redis源码安装 [root@host- ...

  4. 【ABAP系列】SAP ABAP 为表维护生成器创建事务代码

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 为表维护生成器 ...

  5. itchat相关资料

    https://itchat.readthedocs.io/zh/latest/ https://www.v2ex.com/t/306804 http://blog.csdn.net/th_num/a ...

  6. C#_初识之HelloWorld

    C#————是一个我很不愿意去碰的语言,但是还是得低头,巨硬还是巨硬....... ———————————————————————————————————————————————— 前几天在Githu ...

  7. BiLSTM-CRF模型理解

    适用任务 中文分词.词性标注.命名实体识别是自然语言理解中,基础性的工作,同时也是非常重要的工作. 在很多NLP的项目中,工作开始之前都要经过这三者中的一到多项工作的处理. 在深度学习中,有一种模型可 ...

  8. krpano下全屏后弹窗失效问题解决方法

    原因 krpano 自身的全屏仅全屏自身,以外的html效果将无法显示 解决方法 把全屏按钮换成浏览器自身的全屏效果 解决步骤 vtourskin.xml <layer name="n ...

  9. python中的FQA (python 学习篇 1)

    Q:1.  "  if __name__=='__main__'   "  这句是什么意思,可以不加吗? A:   如果单独运行该文件,则该模块的内容会被执行: 若运行的文件引用该 ...

  10. 常用小功能js函数-函数防抖

    函数防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时.这个我经常用到/** * 函数防抖 * fun 需要延时执行的函数 * delayTime 延时时间 * **/export ...