k8s概念-DaemonSet

这篇具有很好参考价值的文章主要介绍了k8s概念-DaemonSet。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 回到目录

 参考链接https://v1-23.docs.kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/

  • DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本

  • 当节点加入到K8S集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从K8S集群中被移除,被DaemonSet调度的pod会被移除

  • 如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删除。

  • 如果一个DaemonSet的Pod被杀死、停止、或者崩溃,那么DaemonSet将会重新创建一个新的副本在这台计算节点上。

  • DaemonSet一般应用于日志收集、监控采集、分布式存储守护进程等

 通俗的讲:DaemonSet在一个节点上只有一个pod,且集群内所有节点都部署【结合污点和容忍】

yaml文件

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
	selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        app: logging
        id: fluentd
      name: fluentd
    spec:
    	tolerations:
      # 这些容忍度设置是为了让该守护进程集在控制平面节点上运行
      # 如果你不希望自己的控制平面节点运行 Pod,可以删除它们
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: fluentd-es
        image: agilestacks/fluentd-elasticsearch:v1.3.0
        env:
         - name: FLUENTD_ARGS
           value: -qq
        volumeMounts:
         - name: containers
           mountPath: /var/lib/docker/containers
         - name: varlog
           mountPath: /varlog
      volumes:
         - hostPath:
             path: /var/lib/docker/containers
           name: containers
         - hostPath:
             path: /var/log
           name: varlog

查看

kubectl get daemonset				# daemonset可简写为ds
NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset-nginx   4         4         4       4            4           <none>          114s

再查看pod,发现每个node上都运行了一个守护进程

kubectl get pods -o wide # 每个node上都运行了一个守护进程
NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
daemonset-nginx-94z6d   1/1     Running   0          6s    10.244.194.104   k8s-worker1   <none>           <none>
daemonset-nginx-hs9mk   1/1     Running   0          6s    10.244.135.206   k8s-master3   <none>           <none>
daemonset-nginx-jrcf5   1/1     Running   0          6s    10.244.159.167   k8s-master1   <none>           <none>
daemonset-nginx-sslpl   1/1     Running   0          6s    10.244.224.22    k8s-master2   <none>    

指定node部署

这里使用亲和性和反亲和性

参考文档:将 Pod 指派给节点 | Kubernetes

DaemonSet 会忽略 Node 的 unschedulable 状态,有三种方式来指定 Pod 只运行在指定的 Node 节点上

  • nodeSelector:只调度到匹配指定 label 的 Node 上

  • nodeAffinity:功能更丰富的 Node 选择器,比如支持集合操作

  • podAffinity:调度到满足条件的 Pod 所在的 Node 上

NodeSelector
#先为 Node 打上标签
kubectl label nodes k8s-node1 svc_type=microsvc

#然后再 daemonset 配置中pod模板期望中设置 nodeSelector
spec:
  template:
    spec:
      nodeSelector:
        svc_type: microsvc
NodeAffinity

nodeAffinity 目前支持两种:requiredDuringSchedulingIgnoredDuringExecution 和 preferredDuringSchedulingIgnoredDuringExecution,分别代表亲和性和反亲和性。

下面例子是选择Daemonset的metadata.name属性必须包含target-host-name属性

spec:
  template:
    spec:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchFields:
            - key: metadata.name
              operator: In
              values:
              - target-host-name
PodAffinity

podAffinity 基于 Pod 的标签来选择 Node,仅调度到满足条件Pod 所在的 Node 上,支持 podAffinity 和 podAntiAffinity。这个功能比较绕,以下面的例子为例:

  • 如果一个 “Node 所在空间中包含至少一个带有 auth=oauth2 标签且运行中的 Pod”,那么可以调度到该 Node

  • 不调度到 “包含至少一个带有 auth=jwt 标签且运行中 Pod”的 Node 上

apiVersion: v1
kind: Pod
metadata:
  name: with-pod-affinity
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: auth
            operator: In
            values:
            - oauth2
        topologyKey: failure-domain.beta.kubernetes.io/zone
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: auth
              operator: In
              values:
              - jwt
          topologyKey: kubernetes.io/hostname
  containers:
  - name: with-pod-affinity
    image: pauseyyf/pause

 更新

不建议使用 RollingUpdate,建议使用 OnDelete 模式,这样避免频繁更新 ds,浪费资源文章来源地址https://www.toymoban.com/news/detail-622943.html

到了这里,关于k8s概念-DaemonSet的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s控制器之DaemonSet--第五弹更新 DaemonSet

    DaemonSet 有两种更新策略: OnDelete : 使用 OnDelete 更新策略时,在更新 DaemonSet 模板后,只有当你手动删除老的 DaemonSet pods 之后,新的 DaemonSet Pod 才会 被自动创建。跟 Kubernetes 1.6 以前的版本类似。 RollingUpdate : 这是默认的更新策略。使用 RollingUpdate 更新策略时,在更新 DaemonSe

    2024年02月11日
    浏览(40)
  • 持续集成部署-k8s-资源调度:DaemonSet

    在 Kubernetes 中, DaemonSet 是一种用于在集群中运行一个 Pod 副本的控制器对象。它可以保证在每个节点上都运行一个 Pod 副本,并且在节点加入或退出集群时自动地更新。 DaemonSet 通常用于在集群中部署一些系统级别的服务,例如日志收集、监控、网络代理等。它们需要在每个

    2024年02月08日
    浏览(42)
  • 在K8S中,DaemonSet类型资源特性?

    在Kubernetes(简称K8S)中,DaemonSet是一种控制器资源对象,它的主要特性包括: 每个节点运行一个实例 : DaemonSet确保集群中的每个工作节点上都运行着一个指定的Pod副本。这意味着当DaemonSet被创建时,系统会自动调度Pod到所有符合条件的节点上,确保每个节点上都有且仅有一

    2024年02月19日
    浏览(40)
  • k8s控制器之DaemonSet--第三弹DaemonSet 是如何调度的

    v1.12以后默认禁用 通常,Kubernetes Scheduler(调度器)决定了 Pod 在哪个节点上运行。然而 DaemonSet Controller 创建的 Pod 已经指定了 .spec.nodeName 字段,因此: Node 节点的 unschedulable (opens new window)字段将被 DaemonSet Controller 忽略 DaemonSet Controller 可以在 kubernetes scheduler 启动之前创建

    2024年02月10日
    浏览(47)
  • 飞天使-k8s知识点21-kubernetes实操6-daemonset

    daemonset service endpoint pod 之间的关系 service 基于Service访问外部服务

    2024年02月22日
    浏览(48)
  • 学习笔记二十八:K8S控制器Daemonset入门到企业实战应用

    DaemonSet控制器能够确保k8s集群所有的节点都运行一个相同的pod副本,当向k8s集群中增加node节点时,这个node节点也会自动创建一个pod副本,当node节点从集群移除,这些pod也会自动删除;删除Daemonset也会删除它们创建的pod daemonset的控制器会监听kuberntes的daemonset对象、pod对象、

    2024年02月05日
    浏览(45)
  • k8s之工作负载、Deployment、DaemonSet、StatefulSet、Job、CronJob及GC

    1.1、定义 工作负载能让Pod能拥有自恢复能力,会写Pod,研究不同的工作负载怎么控制Pod的行为 1.2、分类 2.1、定义 一个 Deployment 为 Pods 和 ReplicaSets 提供声明式的更新能力。 你负责描述 Deployment 中的 目标状态,而 Deployment 控制器(Controller) 以受控速率更改实际状态, 使其变

    2024年02月11日
    浏览(42)
  • K8s(Kubernetes)学习(四):Controller 控制器:Deployment、StatefulSet、Daemonset、Job

    什么是 Controller 以及作用 常见的 Controller 控制器 Controller 如何管理 Pod Deployment 基本操作与应用 通过控制器实现 Pod 升级回滚和弹性伸缩 StatefulSet 基本操作与应用 Daemonset 基本操作与应用 Job 基本操作与应用 Controller 无法解决问题 1 Controller 控制器 官网: http://kubernetes.p2hp.com/

    2024年02月09日
    浏览(56)
  • k8s概念介绍

    笔记主页 https://blog.csdn.net/hey_lie/article/details/131677056?spm=1001.2014.3001.5501 目录 一 整体架构和组件基本概念 1.1 组件 1.1.1 master节点 1.1.2 node节点 1.1.3 附加组件 二 资源和对象 2.1 资源分类 2.2 元数据资源 Horizontal Pod Autoscaler(HPA) PodTemplate LimitRange 2.3 集群资源 namespace Node ClusterRo

    2024年02月13日
    浏览(50)
  • K8S 基本概念

    Kubernetes 概述 1、K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。 作用: 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包