K8s基础7——DaemonSet控制器、Job批处理调度、Cronjob定时调度

news2025/4/6 20:39:53

文章目录

  • 一、DaemonSet
  • 二、Job
  • 三、Cronjob

一、DaemonSet

控制器介绍:

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

应用场景:

  • 属于运维层面上的技术,常常用在网络插件、监控Agent、日志Agent等场景。
  • 在每个Node上都运行一个GlusterFS存储或者Ceph存储的Daemon进程。
  • 在每个Node上都运行一个日志采集程序,例如Fluentd或者Logstach。
  • 在每个Node上都运行一个性能监控程序,采集该Node的运行性能数据,例如Prometheus Node Exporter、collectd、New Relic agent或者Ganglia gmond等。

Daemon Pod如何被调度的?

  • 最开始DaemonSet调度和普通的Pod调度不同,使用的是专有DaemonSet Controller调度器,而不是默认Scheduler调度器,后面就出现很多矛盾问题。
  • 继而在1.18版本后,DaemonSet的调度默认切换到Kubernetes Scheduler进行,因此DaemonSet也能正确处理Taints和Tolerations的问题。

daemon pod特点:

  1. daemonset pod名称: daemonset名字-随机字符串
  2. deployment pod名称: deployment名称-RS名称-随机字符串

概念图:
在这里插入图片描述

1.编辑yaml文件。

[root@k8s-master bck]# cat web1.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: web4
spec:
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx

2.导入查看,每个node上都部署了一个pod。
在这里插入图片描述

3.若某个节点存在污点时,导入yaml后不会创建Pod,直至污点被删除或者配置污点容忍。我这里是node1存在污点,node2没有,所有再次导入后pod只被创建在node2节点上,node1没有。
在这里插入图片描述
4.此时可以删除node1上污点,再导入yaml文件,就会在node1节点上创建pod。
在这里插入图片描述

二、Job

基本了解:

  • Job在实际的应用场景中用的比较少,因为它的用法特殊,所以特定行业领域或者针对性的工作才会用到。比如发送电子邮件、渲染视频帧、编解码文件、NoSQL 数据库中扫描主键范围等等。

概念:

  • 通过K8s Job资源对象来定义并启动一个批处理任务。批处理任务通常并行(或者串行)启动多个计算进程去处理一批工作项(Work item),处理完成后,整个批处理任务结束。

特点:

  1. Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。
  2. 当Pod成功结束,Job跟踪记录成功完成的Pod个数。 当数量达到指定的成功个数阈值时,Job任务结束。
  3. 删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。

批处理任务4种模式:

  • Job Template Expansion模式:一个Job对象对应一个待处理的Work item,有几个Work item就产生几个独立的Job,通常适合Work item数量少、每个Work item要处理的数据量比较大的场景,比如有一个100GB的文件作为一个Work item,总共有10个文件需要处理。
  • Queue with Pod Per Work Item模式:采用一个任务队列存放Work item,一个Job对象作为消费者去完成这些Work item,在这种模式下,Job会启动N个Pod,每个Pod都对应一个Work item。
  • Queue with Variable Pod Count模式:也是采用一个任务队列存放Work item,一个Job对象作为消费者去完成这些Work item,但与上面的模式不同,Job启动的Pod数量是可变的。
  • Single Job with Static Work Assignment模式,也是一个Job产生多个Pod,但它采用程序静态方式分配任务项,而不是采用队列模式进行动态分配。

Job三种类型:

  1. Non-parallel Jobs:通常一个Job只启动一个Pod,除非Pod异常,才会重启该Pod,一旦此Pod正常结束,Job将结束。
  2. Parallel Jobs with a fixed completion count:并行Job会启动多个Pod,此时需要设定Job的.spec.completions参数为一个正数,当正常结束的Pod数量达至此参数设定的值后,Job结束。此外,Job的.spec.parallelism参数用来控制并行度,即同时启动几个Job来处理Work item。
  3. Parallel Jobs with a work queue:任务队列方式的并行Job需要一个独立的Queue,Work item都在一个Queue中存放,不能设置Job的.spec.completions参数,此时Job有以下特性:
    • 每个Pod都能独立判断和决定是否还有任务项需要处理。
    • 如果某个Pod正常结束,则Job不会再启动新的Pod。
    • 如果一个Pod成功结束,则此时应该不存在其他Pod还在工作的情况,它们应该都处于即将结束、退出的状态。
    • 如果所有Pod都结束了,且至少有一个Pod成功结束,则整个Job成功结束。
模式是否是单个Job 对象Pod 数是否少于工作条目数是否需要直接使用应用无需修改
Job Template Expansion模式\\
Queue with Pod Per Work Item模式\有时
Queue with Variable Pod Count模式\\
Single Job with Static Work Assignment模式\

1.创建一个Job任务用来计算 π 到小数点后 2000 位,并将结果打印出来。

[root@k8s-master ~]# cat job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  ttlSecondsAfterFinished: 20     ##TTL机制,在job结束20秒后会被自动删除。
  backoffLimit: 5       ##若有pod失败,则Job重试,该参数代表job重试次数。
  activeDeadlineSeconds: 20   ## Job运行时间达到20秒后,其下所有运行中的 Pod 都会被终止,并更新job状态。
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4


[root@k8s-master ~]# kubectl  apply -f job.yaml 

2.查看计算结果。
在这里插入图片描述

三、Cronjob

基本了解:

  • CronJob 创建基于时隔重复调度的 Job,类似Linux Cron的定时任务,常用于执行排期操作,例如数据备份、生成报告等。
  • 采用Cron 格式编写, 并周期性地在给定的调度时间执行 Job。
  • CronJob仅负责创建与其调度时间相匹配的 Job,而 Job 又负责管理其代表的 Pod。

Cron时间表语法:
在这里插入图片描述
注意事项:

  • 问号” ? “和星号” * “含义相同,都表示给定字段的任何可用值。
  • ” * “:表示匹配该域的任意值,假如在Minutes域使用“*”,则表示每分钟都会触发事件。
  • ” / “:表示从起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域设置为5/20,则意味着第1次触发在第5min时,接下来每20min触发一次,将在第25min、第45min等时刻分别触发。

1.创建一个cronjob,周期性的执行Job任务,每分钟打印出当前时间和问候消息。

[root@k8s-master ~]# cat cronjob.yaml 
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
   concurrencyPolicy: Allow   ##并发规则,可选有Forbid、Replace、Allow,默认为Allow允许并发。
  failedJobsHistoryLimit: 1     ##应保留多少失败的任务。
  startingDeadlineSeconds: 20   ##控制器统计在过去 20 秒中错过了多少次 Job。
  successfulJobsHistoryLimit: 3   ##应保留已完成的任务。
  suspend: false    ##是否调度挂起,默认为false。
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

[root@k8s-master ~]# kubectl  apply -f cronjob.yaml 

2.查看创建的cronjob、job和pod。job名称是在cronjob名称后面多了一串随机字符,pod名称是在job名称后面多了一串随机字符。
在这里插入图片描述
在这里插入图片描述
3.查看日志。
在这里插入图片描述
在这里插入图片描述
4.查看cronjob定期执行任务情况。
在这里插入图片描述
5.删除。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/501291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis最大连接数查询与设置

redis客户端连接数 redis通过监听一个TCP端口或socket的方式接收来自客户端的连接, 当与客户端建立连接后,redis内部会进行如下操作: (1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模…

基于JavaWeb实现的汽车维修管理系统

【简介】 本系统基于springboot mybatis jps架构开发,前后端分离,开发环境为jdk1.8、mysql、maven。系统功能主要分为汽车维修管理、配件管理、财务管理、基础数据管理、系统维护5大模块。 【功能结构】 【技术架构】 系统架构:springboot …

不会做大数据实时计算?10年数据分析师整理,一文给出解决方案

本文分为四个章节介绍实时计算,第一节介绍实时计算出现的原因及概念;第二节介绍实时计算的应用场景;第三节介绍实时计算常见的架构;第四节是实时数仓解决方案。 一、实时计算 实时计算一般都是针对海量数据进行的,并…

RISC-V OS(老师的OS) 基于 汪辰老师的视频笔记

前言 最后面没写完,以后再补。。。 RISC-V OS RVOS 介绍 操作系统定义 操作系统(英语:Operating System,缩写:OS)是一组系统软件程序: 主管并控制计算机操作、运用和运行硬件、软件资源。提…

[oeasy]python049_帮助手册_pydoc_manual_document

帮助手册 回忆上次内容 上次了解了注释 注释是为了让程序更可读注释不会影响程序运行速度 注释分为两种 单行的 以#开头不能是字符串当中的# 多行的 三个"三个 多行注释还有什么特殊功能么?🤔 增加描述说明 #!/usr/bin/python3 #vim: set file…

技能梳理38@stm32+CC2530+超声波+光敏+oled

技能梳理38stm32CC2530超声波光敏oled 1、项目简介 2、实现逻辑 #主从机使用zigbee通信 #主机oled显示当前停车场位置图 #从机通过超声波和光敏一起检测是否有车 #当某位置车辆进出,在主机上oled进行提示 3、应用场景 #车辆无线检测 #货架商品有无检测 4、核心…

UWA Pipeline 2.4.2 版本更新说明

UWA Pipeline是一款面向游戏开发团队的本地协作平台,旨在为游戏开发团队搭建专属的DevOps研发交付流水线,提供可视化的CICD操作界面、高可用的自动化测试以及UWA性能保障服务的无缝贴合等实用功能。 在本次2.4.2版本更新中,我们对Pipeline的…

【Java+GS】GeoServer,通过配置自定义样式,实现不同图斑展示不同颜色。附java实现方法

文章目录 客户端发布样式一、[GeoServer中使用SLD样式](https://www.cnblogs.com/tuboshu/p/10752292.html)二、分属性渲染三、客户端操作发布图层 掌握使用java api 发布样式一、前置准备二、发布图层三、发布工具类 设计从数据库字段自定义样式一、数据库设计二、业务逻辑分享…

「容器云架构」K8s 多区域部署介绍

背景 Kubernetes的设计使得单个Kubernetes集群可以跨多个故障区域multiple failure zones运行,通常这些区域(zones )位于称为区域(region)的逻辑分组中。主要的云提供商将一个区域定义为一组故障区域 failure zones&am…

Linux高性能服务器编程|阅读笔记:第7章 - Linux服务器程序规范

目录 简介系列笔记7.1 日志7.1.1 Linux系统日志7.1.2 syslog函数7.2 用户信息7.2.1 UID、EUID、GID和EGID7.2.2 切换用户7.3 进程间关系7.3.1 进程组7.3.2 会话7.3.3 用ps命令查看进程关系7.4 系统资源限制7.5 改变工作目录和根目录7.6 服务器程序后台化结语简介 Hello! 非常感…

基于html+css的图展示50

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【UE】高级载具插件-02-坦克开火

1. 添加开火的操作映射 2. 创建一个actor蓝图类,添加一个静态网格体组件 添加发射物移动组件 设置初始速度和最大速度 发射物重力范围设为0.05 添加音频组件 设置音效 3. 打开炮管的静态网格体 在插槽管理器中创建插槽 将创建的插槽放到炮口位置 4. 打开“BP_BaseT…

《物联网安全关键技术白皮书》解读

物联网技术作为物理世界与信息世界融合的具象体现,有效地连接分离的物理世界和信息空间,囊括了传感器网络、通信网络以及互联网,构建物与物互联、人与物互联、人与人互联的协同共生关系,推进了信息产业的新变革,同时也…

南大通用数据库-Gbase-8a-学习-35-rmt(远程导出数据文件)

目录 一、测试环境 二、引入 三、rmt导出流程 四、Linux环境模拟实验 1、不加rmt导出数据 2、加rmt导出数据 一、测试环境 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2目的端Gbase8a版本8.6.2-R43源…

单词背诵 2023.5.8

preceding dawn sunset segregate restless oblige mature martial vital virtually

PHP+MYSQL——大学生心理健康测试网站源码

一、功能 前台功能: 1、心理百科、心理书籍、心理健康测试 2、用户注册、用户登录、重置密码、退出登录、个人信息修改 3、心理健康测试成绩查看、心理健康状态解决办法 4、预约心理咨询师、预约审批查看 5、留言板 后台功能: 1、后台登录、修改管理员…

【C++】1.语言基础:八股文

心口如一,犹不失为光明磊落丈夫之行也。——梁启超 文章目录 :smirk:1. 语言基础内存分配指针参数传递和引用参数传递四种强制转换面向对象的三大特性并举例#define 和别名 typedef 的区别 :blush:2. 标准库STL介绍频繁调⽤ push_back() 的影响i 和 i 的区别⼤端⼩…

ePWM模块(1)

ePWM模块 ePWM模块内部包含有7个子模块,分别是时间基准子模块TB、比较功能子模块CC,动作限定子模块AQ、死区控制子模块DB、斩波控制子模块PC、事件触发子模块ET和故障捕获子模块TZ。 每个ePWM模块都具有以下功能: 可以输出两路PWM,EPWMxA和EPWMxB两路PWM可以独立输出,也可…

数字座舱带动液晶仪表升级,哪些企业「领跑」前装量产份额

作为人机交互的关键一环,传统汽车机械仪表也在经历数字化、智能化的升级。尤其是整车智能化的升级、电动化的转型,传统仪表存在反应慢、精度低和显示方式单一的缺点,已经不能满足市场要求。 比如,相比于传统机械式仪表&#xff0…

Qt5.9学习笔记-事件(五) 事件调试和排查

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…