OpenShift 4.5 新特性 - 创建任务和定时任务_openshift cronjob-程序员宅基地

技术标签: OpemShift  OpenShift 4  Job  

OpenShift 4.x HOL教程汇总


在Kubernetes中分贝使用Job和CronJob实现一次性运行的任务和定时运行的的任务,他们分别被Kubernetes的JobController和CronJobController控制器所控制,而这些任务都是通过Pod运行的。
在创建Job和CronJob对象的时候,既可以使用定义对象的YAML文件,还可使用命令直接创建。需要注意的是,从OpenShift 4.5开始,在使用oc命令创建Job和CronJob对象的时候只能使用“oc create job”和“oc create cronjob”命令。而原有“oc run”命令已经不能创建Job和CronJob对象了,它只能运行1个指定pod。

通过YAML创建

创建Job

  1. 创建项目
$ oc create project myjob
  1. 在OpenShift控制台的项目中直接运行以下创建Job的YAML脚本。
    在这里插入图片描述
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  parallelism: 1    
  completions: 1    
  activeDeadlineSeconds: 1800 
  backoffLimit: 6   
  template:         
    metadata:
      name: pi
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: OnFailure
  1. 查看job和pod,在pod为“Completed”状态后查看它的日志。注意:从对象名称可以看出, 这种方法是先创建Job对象,然后再通过有Job对象生成的对应Pod对象。
$ oc get job
NAME                   COMPLETIONS   DURATION   AGE
pi                     1/1           33s        7m37s 
 
$ oc get pod
NAME                         READY   STATUS              RESTARTS   AGE
pi-kxdcr                     0/1     Completed           0          7m40s
$ oc logs pod/pi-kxdcr
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901

创建CronJob

  1. 在OpenShift控制台的项目中直接运行以下创建CronJob的YAML脚本。
    在这里插入图片描述
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello-job
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
  1. 通过命令行或控制台查看创建的hello-job。
$ oc get cronjob -n myjob
NAME        SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello-job   */1 * * * *   False     1        7s              14m

在这里插入图片描述
3. 查看hello-job的详细信息。注意下方有和该对象相关的Events,从时间轴可以看出,当需要创建第4个Pod运行Job的时候,OpenShift删删掉第一个创建Pod。这样就一直保持运行hello-job的Pod数量最多为3个,这和hello-job对象的“Successful Job History Limit”参数定义的是一致的。

$ oc describe  cronjob hello-job -n myjob
Name:                          hello-job
Namespace:                     myjob
Labels:                        <none>
Annotations:                   <none>
Schedule:                      */1 * * * *
Concurrency Policy:            Allow
Suspend:                       False
Successful Job History Limit:  3
Failed Job History Limit:      1
Starting Deadline Seconds:     <unset>
Selector:                      <unset>
Parallelism:                   <unset>
Completions:                   <unset>
Pod Template:
  Labels:  <none>
  Containers:
   hello:
    Image:      busybox
    Port:       <none>
    Host Port:  <none>
    Args:
      /bin/sh
      -c
      date; echo Hello from the Kubernetes cluster
    Environment:     <none>
    Mounts:          <none>
  Volumes:           <none>
Last Schedule Time:  Thu, 03 Sep 2020 03:47:00 +0000
Active Jobs:         <none>
Events:
  Type    Reason            Age                    From                Message
  ----    ------            ----                   ----                -------
  Normal  SuccessfulCreate  15m                    cronjob-controller  Created job hello-job-1599103920
  Normal  SawCompletedJob   15m                    cronjob-controller  Saw completed job: hello-job-1599103920, status: Complete
  Normal  SuccessfulCreate  14m                    cronjob-controller  Created job hello-job-1599103980
  Normal  SawCompletedJob   14m                    cronjob-controller  Saw completed job: hello-job-1599103980, status: Complete
  Normal  SuccessfulCreate  13m                    cronjob-controller  Created job hello-job-1599104040
  Normal  SawCompletedJob   13m                    cronjob-controller  Saw completed job: hello-job-1599104040, status: Complete
  Normal  SuccessfulCreate  12m                    cronjob-controller  Created job hello-job-1599104100
  Normal  SuccessfulDelete  12m                    cronjob-controller  Deleted job hello-job-1599103920
  Normal  SawCompletedJob   12m                    cronjob-controller  Saw completed job: hello-job-1599104100, status: Complete
  Normal  SuccessfulCreate  11m                    cronjob-controller  Created job hello-job-1599104160
  Normal  SawCompletedJob   11m                    cronjob-controller  Saw completed job: hello-job-1599104160, status: Complete
  Normal  SuccessfulDelete  11m                    cronjob-controller  Deleted job hello-job-1599103980
  Normal  SuccessfulCreate  10m                    cronjob-controller  Created job hello-job-1599104220
  Normal  SuccessfulDelete  10m                    cronjob-controller  Deleted job hello-job-1599104040
  Normal  SawCompletedJob   10m                    cronjob-controller  Saw completed job: hello-job-1599104220, status: Complete
  Normal  SuccessfulCreate  9m50s                  cronjob-controller  Created job hello-job-1599104280
  Normal  SawCompletedJob   9m40s                  cronjob-controller  Saw completed job: hello-job-1599104280, status: Complete
  Normal  SuccessfulDelete  9m40s                  cronjob-controller  Deleted job hello-job-1599104100
  Normal  SuccessfulCreate  8m49s                  cronjob-controller  Created job hello-job-1599104340
  Normal  SawCompletedJob   8m39s                  cronjob-controller  Saw completed job: hello-job-1599104340, status: Complete
  Normal  SuccessfulDelete  8m39s                  cronjob-controller  Deleted job hello-job-1599104160
  Normal  SuccessfulCreate  7m49s                  cronjob-controller  Created job hello-job-1599104400
  Normal  SawCompletedJob   7m39s                  cronjob-controller  Saw completed job: hello-job-1599104400, status: Complete
  Normal  SuccessfulDelete  7m39s                  cronjob-controller  Deleted job hello-job-1599104220
  Normal  SawCompletedJob   5m37s (x2 over 6m38s)  cronjob-controller  (combined from similar events): Saw completed job: hello-job-1599104520, status: Complete
  Normal  SuccessfulCreate  43s (x7 over 6m48s)    cronjob-controller  (combined from similar events): Created job hello-job-1599104820
  1. 在OpenShift控制台的hello-job中查看相关的Event。
    在这里插入图片描述
  2. 查看运行的job数量。
$ oc get job -n myjob
NAME                   COMPLETIONS   DURATION   AGE
hello-job-1599105120   1/1           7s         3m3s
hello-job-1599105180   1/1           8s         2m2s
hello-job-1599105240   1/1           7s         61s
hello-job-1599105300   0/1                      0s
  1. 查看运行的pod数量,它和job数量一致,同时最多保持3个Pod。
$ oc get pod -n myjob
NAME                         READY   STATUS              RESTARTS   AGE
hello-job-1599104580-b2gqw   0/1     Completed           0          3m8s
hello-job-1599104640-kv9ml   0/1     Completed           0          2m8s
hello-job-1599104700-g2jmv   0/1     Completed           0          67s
hello-job-1599104760-dtwz6   0/1     ContainerCreating   0          6s

使用命令

创建Job

  1. 运行以下命令,创建运行Job的Pod。
$ oc create job pi --image=perl -- perl -Mbignum=bpi -wle 'print bpi(2000)'
  1. 查看Job和Pod对象。注意:从查到的对象可以看出, 这种方法是是直接生成Pod对象并运行,而没有创建Job对象。
$ oc get job

$ oc get pod
NAME                         READY   STATUS      RESTARTS   AGE
pi-job                       0/1     Completed   0          33s

创建CronJob

  1. 执行命令,创建CronJob。注意:当有“–schedule=’*/1 * * * *’”参数的时候,会自动生成CronJob对象。而Job对象是由CronJob对象生成的。
$ oc create cronjob pi --image=perl --schedule='*/1 * * * *' -- perl -Mbignum=bpi -wle 'print bpi(2000)'
  1. 查看CronJob
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43902588/article/details/108379450

智能推荐

获取web摄像头视频,并在网页上展示(ffmpeg+rstp+node)|| #网页无插件播放RTSP流媒体#_网页如何取监控的视频流-程序员宅基地

文章浏览阅读1.5k次。零、原理1、使用ffmpeg工具拉流、解码转码、推流2、使用node向前端发送数据帧3、前端页面引入jsmpeg.js,将接收的数据帧,实时的在canvas中绘制成画面一、下载相关组件1、下载node2、下载ffmpeg3、下载node-rtsp-stream需要的软件已上传到百度云:需要的软件压缩包(百度云)解压码:qwer二、安装参考:网页无插件播放RTSP流媒体三、设置环境变量1、node环境变量是安装好后自动生成的,所以不用设置了2、ffmpeg的环境变量设置在 其bi_网页如何取监控的视频流

利用Python scipy.signal.filtfilt() 实现信号滤波_python filtfilt-程序员宅基地

文章浏览阅读4k次,点赞9次,收藏50次。在使用Python进行信号处理过程中,利用 scipy.signal.filtfilt()可以快速帮助实现信号的滤波。1.函数的介绍(1).滤波函数scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)输入参数:b: 滤波器的分子系数向量a: 滤波器的分母系数向量x: 要过滤的数据数组。(array型)axis: 指定要过滤的数据数组x的轴padtype: 必_python filtfilt

N皇后问题解法及解的个数_n皇后问题答案个数-程序员宅基地

文章浏览阅读3.4w次,点赞17次,收藏66次。1、将第一个皇后放置在第一行的第一个空格里 2、对于第二行,从第一个空格开始寻找不与第一行的皇后冲突的空格。找到的第一个不冲突的空格是第2个。 3、对于第三行,这时已经找不到与之前放置的两个皇后不冲突的空格了。把当前行恢复初始状态,返回到上一行。 4、在当前行皇后所占的空格之后寻找一个不与之前皇后冲突的位置。有两种情况,如果找打了则把当前行的皇后移动到该位置,然后处理下一行。如果直到最后当前行的最后一个空格也没有找合适的位置,则把当前行恢复初始状态,继续回溯到上一行。 5、把最后一个皇后成功安置在最_n皇后问题答案个数

ModuleNotFoundError: No module named ‘utils.utils‘ pytorch项目报错_no module named 'utils.utils-程序员宅基地

文章浏览阅读2w次,点赞19次,收藏35次。首先呢会报错是因为引入的问题 代码是这样的但是sys.path.append的功能仅限当前的目录sys.path.append("..")from utils.utils import MyDataset, validate, show_confMat所以应该改为sys.path.append("..")from Code.utils.utils import MyDataset, validate, show_confMat这部分的引入应该从当前目录开始引入比如用这种方式._no module named 'utils.utils

如何在macOS中检查Apple Magic Keyboard电池电量?_mx keys 电量查询-程序员宅基地

文章浏览阅读1.3k次。如何在macOS中检查Apple Magic Keyboard电池电量?Apple的Magic Keyboard结合了时尚的设计,每个按键下方的稳定剪刀机制以及内置的可充电电池,可通过随附的Lightning至USB电缆为它充电,这意味着您不必为更换AA电池而烦恼。以下步骤向您展示了操作方法:1.点击Mac屏幕左上角菜单栏中的Apple符号。2.选择系统偏好设置3.选择键盘首选项窗格。4.选中“键盘”选项卡后,检查窗口左下角的键盘电池电量。这显示了Apple蓝牙键盘电池中剩余的电池寿命百分比。_mx keys 电量查询

kvm切换器是什么?_visio中有kvm-程序员宅基地

文章浏览阅读384次。KVM切换器又被称为多计算机控制器,一台KVM切换器可以控制2台、4台、8台、16台或更多的计算机或服务器,它们之间的网络连接在全球不论远近都可控制;KVM切换器的控制端口主要用来连接键盘和鼠标的USB端口与显示器的VGA端口。推荐:《编程视频》在服务器机房的机架不便于存放多个显示器和键盘的空间里,KVM切换器起着重要的作用。KVM切换器能从本地或远程监视与控制多个计算机与服务器,由键盘、鼠标和显示屏组成的KVM控制台是最方便和经济的理想解决方案。1、什么是KVM切换器KVM切换器又被称为多计算机控_visio中有kvm

随便推点

mysql8 执行SQL语句报错 "this is incompatible with sql_mode=only_full_group_by"_mysql 8 this is incompatible with sql_mode=only_fu-程序员宅基地

文章浏览阅读6.1k次,点赞4次,收藏5次。WIN10的my.ini下配置:[mysqld]sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"重启mysql后在客户端查询 select @@sql_mode;如下图:证明生效了,再查询就不会出现此问题..._mysql 8 this is incompatible with sql_mode=only_full_group_by

卸载Navicat!操作所有的数据库靠它就够了-程序员宅基地

文章浏览阅读102次。来自:开源最前线(ID:OpenSourceTop)综合自:https://ithelp.ithome.com.tw/articles/10196383、https://github.co..._卸载pgsql和navcat

Selenium IDE的使用方法-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏67次。Selenium介绍Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。Selenium家庭成员有三个,分别是Selenium WebDriver、Selenium IDE和Selenium Grid,这篇博客主要介绍Selenium IDE的使用方法。Selenium官网地址Selenium IDE介绍Selenium IDE是Chrome和FireFox浏览器中的插件,Selenium IDE结合浏览器提供脚本录制、脚本回放、脚本_selenium ide

Scalar, Vector, Matrix, Tensor, Array 傻傻分不清楚,看完这篇可视化你就明白!_scalar和vector怎么分-程序员宅基地

文章浏览阅读1.2w次,点赞19次,收藏62次。目录Scalar(标量)Vector(向量)Matrix(矩阵)Tensor(张量)Array(数组)先上两张图感受下,Scalar-Vector-Matrix-Tensor的过程即从单个数值到一维到二维一直不断增加维度的数据结构。Scalar(标量)Vector(向量)Matrix(矩阵)Tensor(张量)Array(数组)..._scalar和vector怎么分

OpenCL使用子缓冲对象(Sub buffer)报错CL_DEVICE_MEM_BASE_ADDR_ALIGN的解决方法_opencl subbuffer-程序员宅基地

文章浏览阅读399次。最近由于新冠疫情原因宅于家中,不得不重新搞个电脑继续毕设之旅,学校所用电脑为i5-6500+Titan xp,在家只能自掏腰包配了个i5-9400f + 1660,CPU升级了下,GPU看看就好。废话不说了,直奔主题。在使用OpenCL创建子缓冲对象时,使用 i5-9400f CPU 作为计算设备会出现 CL_DEVICE_MEM_BASE_ADDR_ALIGN,而对于相同的程序,GPU则..._opencl subbuffer

jupyter notebook版本更新和降低版本命令_jupyternotebook 降版本-程序员宅基地

文章浏览阅读1.2w次。安装更高的版本:pip install -U "notebook>6.0"降低版本pip install -U "notebook<5.0"_jupyternotebook 降版本

推荐文章

热门文章

相关标签