job kettle 执行多次_从零开始学K8s: 23.Job和CronJob

a763f823577beb4c9bc344ab56c3e1f6.png

在之前的章节中我们提到的pod都是需要持续运行的pod。但有时候我们也会希望运行一个在处理完成后就结束的任务,不像ReplicationController、ReplicaSet以及DaemonSet运行的是持续的、不会结束的任务,而且它们管理的pod中的进程退出时就会重启。但是对于一个可完成的任务来说,其进程结束后不应该再重启。

什么是Job

Kubernetes中的Job资源使我们能够运行一个pod,并且该pod中的容器不会随着其中的进程运行完成而重启,一旦进程结束,pod就会被认为是Completed状态。

当某个节点发生故障时,位于该节点上由Job管理的Pod就会被重新调度到另一个节点,就像ReplicaSet管理的pod一样。当进程本身出问题时(当进程返回一个错误退出码时),可以配置Job是否重启容器。

下图展示了一个由Job创建的pod在节点发生故障时是如何被重新调度到一个新节点上的。该图还显示了一个不受管控的pod,当节点故障时它不会被重新调度,以及一个受ReplicaSet管控的pod,节点故障时,它会被重新调度:

a4edd74557f54def7e250db984620bef.png

Job对于某些特殊任务来说很有用,这些任务能否正常结束至关重要。可以在一个不受管控的pod中运行这个任务并等待它结束,但是当节点出故障或者pod在执行任务的时候从节点上被逐出时,就需要手动创建这个任务。手动创建并不合理,特别是在任务需要几个小时才能完成的情况下。

创建Job

在创建Job之前,我们先构建一个新的镜像。

下面我们基于busbox镜像创建一个名为batch-job的容器镜像并将其发布到阿里云镜像仓库,该镜像了每隔两分钟调用一次sleep命令,Dockerfile内容如下:

FROM busyboxENTRYPOINT echo "$(date) Batch job starting"; sleep 120; echo "$(date) Finished succesfully"
14a6e0b756e774e814beb2dd777f1e73.png

镜像的具体构建和发布过程此处不再赘述。

制作并发布的镜像名为:registry.cn-shanghai.aliyuncs.com/david-ns01/batch-job:1.0

创建Job的YAML定义文件batch-job.yaml:

apiVersion: batch/v1kind: Jobmetadata: name: batch-jobspec: template:   metadata:     labels:       app: batch-job   spec:     restartPolicy: OnFailure     containers:     - name: main       image: registry.cn-shanghai.aliyunc
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值