当前位置: 首页 > news >正文

k8s概念-DaemonSet

 回到目录

 参考链接icon-default.png?t=N6B9https://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-elasticsearchtemplate:metadata:labels:app: loggingid: fluentdname: fluentdspec:tolerations:# 这些容忍度设置是为了让该守护进程集在控制平面节点上运行# 如果你不希望自己的控制平面节点运行 Pod,可以删除它们- key: node-role.kubernetes.io/control-planeoperator: Existseffect: NoSchedule- key: node-role.kubernetes.io/masteroperator: Existseffect: NoSchedulecontainers:- name: fluentd-esimage: agilestacks/fluentd-elasticsearch:v1.3.0env:- name: FLUENTD_ARGSvalue: -qqvolumeMounts:- name: containersmountPath: /var/lib/docker/containers- name: varlogmountPath: /varlogvolumes:- hostPath:path: /var/lib/docker/containersname: containers- hostPath:path: /var/logname: 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.nameoperator: Invalues:- 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: authoperator: Invalues:- oauth2topologyKey: failure-domain.beta.kubernetes.io/zonepodAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: authoperator: Invalues:- jwttopologyKey: kubernetes.io/hostnamecontainers:- name: with-pod-affinityimage: pauseyyf/pause

 更新

不建议使用 RollingUpdate,建议使用 OnDelete 模式,这样避免频繁更新 ds,浪费资源

http://www.lryc.cn/news/104042.html

相关文章:

  • Mac 终端快捷键设置:如何给 Mac 中的 Terminal 设置 Ctrl+Alt+T 快捷键快速启动
  • VR 变电站事故追忆反演——正泰电力携手图扑
  • fpga开发——蜂鸣器
  • 【Liux下6818开发板(ARM)】触摸屏
  • 苍穹外卖day11——数据统计图形报表(Apache ECharts)
  • 在制作PC端Game Launcher游戏启动器时涉及到的技术选型
  • SQL力扣练习(九)
  • 软考高级架构师笔记-10数学计算题
  • 设计模式五:建造者模式(Builder Pattern)
  • C++多线程编程(包含c++20内容)
  • 【C语言】通讯录2.0 (动态增长版)
  • 详解AMQP协议以及JAVA体系中的AMQP
  • 跨境电商外贸常态下,深度分析Live Market的优势
  • vue2企业级项目(八)
  • 小研究 - 主动式微服务细粒度弹性缩放算法研究(二)
  • 【雕爷学编程】Arduino动手做(177)---ESP-32 掌控板
  • 使用Gunicorn+Nginx部署Flask项目
  • 【12】STM32·HAL库开发-STM32时钟系统 | F1/F4/F7时钟树 | 配置系统时钟
  • Kotlin基础(十):函数进阶
  • 计算机视觉(四)神经网络与典型的机器学习步骤
  • 使用easyui的tree组件实现给角色快捷分配权限功能
  • Postman打不开/黄屏/一直转圈/Windows
  • 使用SVM模型完成分类任务
  • 计算机毕设 深度学习实现行人重识别 - python opencv yolo Reid
  • 开发经验分享之:import引入包和@Autowired注入类有什么区别
  • MySQL和Oracle区别
  • QT--day6(人脸识别、图像处理)
  • 深度学习:常用优化器Optimizer简介
  • 【算法心得】二维dp的状态转移狂练
  • JMeter常用内置对象:vars、ctx、prev