k8s教程(19)-pod之批处理调度

news2025/1/17 5:49:36

文章目录

  • 01 引言
  • 02 批处理调度
    • 2.1 任务模式分类
      • 2.1.1 按实现方式分类
      • 2.1.2 按批处理并行分类
    • 2.1 案例
      • 2.1.1 Job Template Expansion案例
      • 2.1.2 Queue with Pod Per Work Item案例
      • 2.1.3 Queue with Variable Pod Count案例
  • 03 文末

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

Kubernetes从1.2版本开始支持批处理类型的应用,我们可以通过Kubernetes Job资源对象来定义并启动一个批处理任务。

02 批处理调度

批处理任务通常并行(或者串行) 启动多个计算进程去处理一批工作项(Work item),处理完成后,整个批处理任务结束。

2.1 任务模式分类

2.1.1 按实现方式分类

按照批处理任务实现方式的不同,批处理任务可以分为如图所示的几种模式:
在这里插入图片描述
模式分类:

模式名称描述
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会启动NPod,每个Pod都对应一个Work item
Queue with Variable Pod Count也是采用一个任务队列存放Work item,一个Job对象作为消费者去完成这些Work item,但与上面的模式不同,Job启动的Pod数量是可变的
Single Job with Static Work Assignment也是一个Job产生多个Pod,但它采用程序静态方式分配任务项,而不是采用队列模式进行动态分配

模式对比:

模式名称是否是一个jobpod的数量少于work item用户程序是否要做相应的修改kubernetes是否支持
Job Template Expansion//
Queue with Pod Per Work Item/有时候需要
Queue with Variable Pod Count//
Single Job with Static Work Assignment//

2.1.2 按批处理并行分类

考虑到批处理的并行问题,KubernetesJob分以下三种类型:

类型描述
Non-parallel Jobs通常一个Job只启动一个Pod,除非Pod异常,才会重启该Pod,一旦此Pod正常结束,Job将结束
Parallel Jobs with a fixed completion count并行Job会启动多个Pod,此时需要设定Job的.spec.completions参数为一个正数,当正常结束的Pod 数量达至此参数设定的值后,Job结束。此外,Job的.spec.parallelism参数用来控制并行度,即同时启动几个Job来处理Work item
Parallel Jobs with a work queue任务队列方式的并行Job需要一个独 立的Queue,Work item都在一个Queue中存放,不能设置Job 的.spec.completions参数,此时Job有以下特性:① 每个Pod都能独立判断和决定是否还有任务项需要处理,如果某个Pod正常结束,则Job不会再启动新的Pod 。 ②如果一个Pod成功结束,则此时应该不存在其他Pod还在工作的情况,它们应该都处于即将结束、退出的状态。③如果所有Pod都结束了,且至少有一个Pod成功结束,则整个Job成功结束

2.1 案例

2.1.1 Job Template Expansion案例

首先是Job Template Expansion模式,由于在这种模式下每个Work item都对应一个Job实例,所以这种模式首先定义一个Job模板,模板里的主要参数是Work item的标识,因为每个Job都处理不同的Work item

如下所示的Job模板(文件名为job.yaml.txt)中的 $ITEM 可以作为任务项的标识:

apiVersion: batch/v1
kind: Job
metadata:
	name: process-item-$ITEM 
	labels:
		jobgroup: jobexample
spec:
	template:
		metadata:
			name: jobexample
			labels:
				jobgroup: jobexample
		spec:
			containers:
			- name: c
			  image: busybox
			  command: ["sh","-c","echo Processing item $ITEM &sleep 5"] 
			restartPolicy: Never

通过下面的操作,生成了3个对应的Job定义文件并创建Job

> for i in apple banana cherry 
> do
>  cat job.yaml.txt | sed "s/\$ITEM/$i/" > ./jobs/job-$i.yaml 
> done 
# ls jobs
job-apple.yaml job-banana.yaml job-cherry.yaml 
# kubectl create -f jobs
job "process-item-apple"created 
job "process-item-banana"created 
job "process-item-cherry"created

观察Job的运行情况:

$ kubect1 get jobs -l jobgroup=jobexample

NAME				DESIRED		SUCCESSFUL		AGE
process-item-apple		1			1			4m
process-item-banana		1			1			4m
process-item-cherry		1			1			4m

2.1.2 Queue with Pod Per Work Item案例

在这种模式下需要一个任务队列存放Work item,比如RabbitMQ客户端程序先把要处理的任务变成Work item放入任务队列,然后编写Worker程序、打包镜像并定义成为Job中的Work Pod

Worker程序的实现逻辑是从任务队列中拉取一个Work item并处理, 在处理完成后结束进程。并行度为2的Demo如下图所示:
在这里插入图片描述

2.1.3 Queue with Variable Pod Count案例

由于这种模式下,Worker程序需要知道队列中是否还有等待处理的Work item,如果有就取出来处理,否则就认为所有工作完成并结束进程,所以任务队列通常要采用Redis或者数据库来实现:
在这里插入图片描述

03 文末

本文主要讲解Pod批处理调度的一些概念,根据Worker Item以及Job的关系,主要分为 Job Template ExpansionQueue with Pod Per Work ItemQueue with Variable Pod Count这三种,并简单阐述了其原理及案例,希望能帮助到大家,谢谢大家的阅读,本文完!

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

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

相关文章

思维方式之系统思维

这世界上的所有事物,都被规律作用着,以一种叫作“系统”的方式存在着。 我们身处时代这个大系统之中,如果没有一种全局的系统观,很容易就会和机遇失之交臂。凡事要顺势而为,用“个位”的管理对抗“千位”的时代&#…

精华推荐 |【Redis技术探索】「底层架构原理」深入透析主从架构的底层原理分析实现机制

📕技术箴言 当心中有更高的山峰去攀登,就不会在意脚下的泥沼。 📕前提概要 Redis高可用的方案包括:持久化、主从复制(及读写分离)、哨兵和集群(Cluster)。 📕&#x1f…

音视频面试涨知识(四)

视频格式播放体验流量占用情况DASH统计直播推流端到播放端延时。支持和视频帧绑定的内容交互。比如,直播答题在播放端的弹窗等。小HLS对视频进行切片,按切片播放,缓存小起播快;拖动时间轴到任意时间播放时,可以快速定位…

dubbo2和dubbo3 入门简介

稳定版本:2.5.3 目前已恢复更新Apache Dubbo 是一款微服务框架,为大规模微服务实践提供高性能 RPC通信、流量治理、可观测性等解决方案, 涵盖 Java、Golang 等多种语言 SDK 实现。3.0 版本的正式发布,标志着 Apache Dubbo 正式进入云原生时代。3.0 在通信协议、服务发现、部…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.1 初识OpenResty

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.1 初识OpenResty48.1.1 初识OpenResty48.1.2 安装OpenResty48 多级缓存 48.1 初识Open…

python 使用tk报错

文章目录Preface解决方法问题1:问题2: **tk.Tk()** 这里的 Tk 的 k 是小写错误信息 ~~并没有什么实际作用/提示~~Preface 最近刚开始学习用python 的时候遇到一个对于我这样的新手来说比较棘手的问题. 我查询了好久, 大多数给出的答案就是代码写错了 而且是不给错误行数的那种…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.3 请求参数处理

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.3 请求参数处理48.3.1 OpenResty获取请求参数48.3.2 直接上案例48 多级缓存 48.3 请求…

Service 与 Pod 有什么联系?

目录前言一、创建 Deployment二、创建 Service三、集群外部访问前言 首先我们要清楚,Pod 中的容器很可能因为各种原因故障而死掉,如果真的发生故障,那 Deployment 等 Controller 会通过动态创建和销毁 Pod 来保证应用整体的健壮性。而每个 P…

java的垃圾回收浅谈

目录 并发标记问题 三色算法问题 浮动垃圾问题 漏标问题 cms的解决方式 g1的解决方式 跨代(区)引用 CMS垃圾回收日志 G1垃圾回收日志 垃圾回收过程其实都包含两步:标记回收。 标记算法: 引用计数:每个对象都有一个计数器&#xff…

【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)

Hive基础SQL语法 1:DDL操作 DDL是数据定义语言,与关系数据库操作相似, 创建数据库 CREATE DATABASE|SCHEMA [IF NOT EXISTS] database_name显示数据库 SHOW databases;查看数据库详情 DESC DATABASE|SCHEMA database_name切…

2022年都快完了,还学Access的人是不是傻?

2022年都快完了,还学Access的人是不是傻?这是某问答平台,讨论火热的话题。 该问题下,部分程序员拍手称好,对Access语言充满不屑,认为Access过时该被淘汰,笔者作为开发者,并不赞同。事…

【Linux】虚拟地址空间

文章目录❓什么是虚拟地址空间?😊我们先来看这样的一个程序:⚠️感性的认识虚拟地址空间😊Linux具体是怎么实现进程地址空间的❓为什么会存在虚拟地址空间?❓什么是虚拟地址空间? 虚拟地址空间是操作系统为了实现进程管理所设定的一种虚拟…

[附源码]Node.js计算机毕业设计高校学生选课系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

Android 跨应用发送自定义广播

话不多说,直接看效果图和代码! 一、效果图 1、未发送广播之前,两个APP的主界面图; 2、发送之后,文本框内容改变。 二、代码 1、创建第一个APP (1)MainActivity中代码如下: p…

分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)一

1.1 赛题背景 昆虫的种类浩如烟海,农田常见的昆虫是人工生态系统的重要组成部分。分辨益 虫和害虫,保留益虫,消灭害虫,对于减轻害虫对农田的生产危害有重要意义。常见 农田害虫共有 138 种,天敌昆虫则为 40 种。病虫害…

D-UNet:一种用于慢性脑卒中病变分割的维数融合U型网络

摘要 二维卷积神经网络忽略了医学图像的三维信息,而三维卷积神经网络对计算资源的需求过大。而本文提出一种新的结构,称为维度融合网络(D-UNet)这个网络在编码阶段创新的结合了二维和三维卷积。所提出的网络结构实现了比2D网络更…

C语言快速过渡C++

下面只讲干货,方便C语言初学者快速上手cpp来刷算法题,如果是希望系统学习cpp的不建议继续阅读,仅限于快速使用 文章目录using namespace stdcin cout 头文件变量声明bool变量const定义常量string类字符串的定义与拼接字符串的输入字符串的处理…

Qt扫盲-QStackedWidget理论总结

QStackedWidget理论总结1. 简述2. 布局用法3. 页面切换4. 常用功能1. 简述 QStackedWidget和QTabWidget的功能类似,都是为解决大量的控件在一个页面上可能显示不出来,同时呢,这些控件也可以按一定方式分类,我们就可以把这些控件分…

JAVA文件基本操作与概念

文件的概念 狭义的文件: 存储在硬盘上的数据,以文件为单位,进行组织;文件夹也叫做"目录",也是一种特殊的文件(文件里存储的也是文件) 这章笔记的内容都是指狭义的文件 广义的文件: 操作系统…

Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)

EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器。 1 端口介绍 1883:MQTT 协议端口8084:MQTT/SSL 端口8083:MQTT/WebSocket 端口8080:HTTP API 端口18083:Dashboard 管理控制台端口 2 拉取镜像 …