首页 网维知识库 Kubernetes之Job控制器

Kubernetes之Job控制器

Job控制器介绍 Job控制器用于Pod对象运行一次性任务,容器中的进程在正常运行结束后不会对其进行重启,而是将Pod对象置于”Completed”(完成)…

Job控制器介绍

Job控制器用于Pod对象运行一次性任务,容器中的进程在正常运行结束后不会对其进行重启,而是将Pod对象置于”Completed”(完成)状态,若容器中的进程因错误而终止,则需要按照重启策略配置确定是否重启,未运行完成的Pod对象因其所在的节点故障而意外终止后会被调度。
Job控制器的Pod对象的状态转换如下图所示:

创建Job对象

Job控制器的spec字段内嵌的必要字段只有template,不需要定义标签选择器,控制器会自动关联,除了这一点与Deployment控制器不同,其它别无二致。

1.创建Job控制器配置清单
使用busybox镜像,然后沉睡120s,完成后即正常退出容器

cat busybox-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: busybox-job
spec:
  template:
    spec:
      containers:
      - name: busybox
        image: busybox:latest
        command: [ "/bin/sh", "-c", "sleep 120s" ]
      restartPolicy: Never

Pod模版中的spec.restartPolicy默认为”Always”,这对Job控制器来说非常不适用,”Never”和”OnFeailure”才比较合适Job控制器

2.创建Job控制器

kubectl apply -f busybox-job.yaml

3.查看Job控制器及Pod状态

kubectl get job -o wide
NAME          COMPLETIONS   DURATION   AGE   CONTAINERS   IMAGES           SELECTOR
busybox-job   0/1           36s        36s   busybox      busybox:latest   controller-uid=8e85200f-43eb-4f24-ab6d-64c545287d51

kubectl get pods -o wide | grep busybox
busybox-job-wtdvf                                1/1     Running   0          45s    10.244.3.150   k8s-node01   <none>           <none>

120s后,Job控制器创建的Pod对象完成了任务

kubectl get pods -o wide | grep busybox
busybox-job-wtdvf                                0/1     Completed   0          3m38s   10.244.3.150   k8s-node01   <none>           <none>

查看Job控制器的详细信息
如下SelectorLables都是Job控制器自动生成后自动关联,控制器自动生成的controller-uid-随机字符串,控制器携带了后面的字符串是为了防止所管理的Pod发生重合。
下面可以看到Job运行成功后及完成了操作并没有进程重启,这得助于我们设置的restartPolicy

Kubernetes之Job控制器插图

 

串行式Job

将并行度属性job.spec.parallelism的值设置为1,并设置总任务数job.spec.completions属性便能够让Job控制器以串行方式运行多任务,下面是一个需要串行5此任务的Job控制器示例:

cat busybox-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: busybox-job
spec:
  parallelism: 1
  completions: 5
  template:
    spec:
      containers:
      - name: busybox
        image: busybox:latest
        command: [ "/bin/sh", "-c", "sleep 20s" ]
      restartPolicy: OnFailure

创建Job控制器

kubectl apply -f busybox-job.yaml

动态监控Pod对象作业的变化

kubectl get pods -l job-name=busybox-job --watch

NAME                READY   STATUS    RESTARTS   AGE
busybox-job-q8wqr   0/1     Pending   0          0s
busybox-job-q8wqr   0/1     Pending   0          0s
busybox-job-q8wqr   0/1     ContainerCreating   0          0s
busybox-job-q8wqr   1/1     Running             0          20s
busybox-job-q8wqr   0/1     Completed           0          39s
busybox-job-lppcw   0/1     Pending             0          0s
busybox-job-lppcw   0/1     Pending             0          0s
busybox-job-lppcw   0/1     ContainerCreating   0          0s
busybox-job-lppcw   1/1     Running             0          19s
busybox-job-lppcw   0/1     Completed           0          39s
busybox-job-8jw2q   0/1     Pending             0          0s
busybox-job-8jw2q   0/1     Pending             0          0s
busybox-job-8jw2q   0/1     ContainerCreating   0          0s
busybox-job-8jw2q   1/1     Running             0          19s
busybox-job-8jw2q   0/1     Completed           0          40s
busybox-job-bcxpn   0/1     Pending             0          0s
busybox-job-bcxpn   0/1     Pending             0          0s
busybox-job-bcxpn   0/1     ContainerCreating   0          0s
busybox-job-bcxpn   1/1     Running             0          18s
busybox-job-bcxpn   0/1     Completed           0          38s
busybox-job-5t7xm   0/1     Pending             0          0s
busybox-job-5t7xm   0/1     Pending             0          0s
busybox-job-5t7xm   0/1     ContainerCreating   0          0s
busybox-job-5t7xm   1/1     Running             0          20s
busybox-job-5t7xm   0/1     Completed           0          41s

如上,Job控制器需要执行五次任务,每次一个Pod执行一个任务,依次执行,执行成功后的Pod即为完成状态

kubectl get pods -l job-name=busybox-job
NAME                READY   STATUS      RESTARTS   AGE
busybox-job-5t7xm   0/1     Completed   0          4m22s
busybox-job-8jw2q   0/1     Completed   0          5m40s
busybox-job-bcxpn   0/1     Completed   0          5m
busybox-job-lppcw   0/1     Completed   0          6m19s
busybox-job-q8wqr   0/1     Completed   0          6m58s

并行式Job

并行式Job我们只需要修改job.spec.parallelism属性与job.spec.completions属性即可;
job.spec.parallelism属性表示了每次启动多少队列执行作业(即为Pod数量)
job.spec.completions属性表示了作业的总数量

如下示例一个5个作业,同时启动5个队列进行作业。

cat busybox-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: busybox-job
spec:
  parallelism: 5
  completions: 5
  template:
    spec:
      containers:
      - name: busybox
        image: busybox:latest
        command: [ "/bin/sh", "-c", "sleep 20s" ]
      restartPolicy: OnFailure
kubectl apply -f busybox-job.yaml

查看Job控制器运行状态,如下Job控制器中的Pod对象创建时间是一致的。

删除Job

Job控制器中的Pod运行完成后,将不再占用系统资源,用户可以按照需求保留或使用资源删除命令将Pod删除,不过如果某控制器的容器应用总是无法正常结束运行,而其restartPolicy又设置为了重启,则它可能会一直处于不停地重启和错误的循环当中。所幸的是,Job控制器提供了两个属性用于抑制这种情况的发生,具体如下:

  • backoffLimit:将作业标记为失败状态之前的重试次数,默认值为6
  • activeDeadlineSeconds:Job的deadline,用于为其指定最大活动时间长度,超出此时长的作业将被终止。

例如,下面的配置清单为,表示其失败重试次数为5此,并且如果超出100秒的时间仍然未运行完成,那么则将其终止:

cat busybox-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: busybox-job
spec:
  backoffLimit: 5
  activeDeadlineSeconds: 100
  parallelism: 1
  completions: 5
  template:
    spec:
      containers:
      - name: busybox
        image: busybox:latest
        command: [ "/bin/sh", "-c", "sleep 30s" ]
      restartPolicy: OnFailure
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 3182235786a

为您推荐

Windows系统怎么保持远程桌面长时间链接不会自动断开呢?

Windows系统怎么保持远程桌面长时间链接不会自动断开呢?

大家经常会遇到正在远程桌面连接如果不进行一些操作,过上个几分钟一会儿之后远程桌面连接就会需要登录,有时还是直接断开需要重...
Win11预览版 Builds 22572.100更新补丁KB5012817发布(附更新修复内容汇总)

Win11预览版 Builds 22572.100更新补丁KB5012817发布(附更新修复内容汇总)

据系统之家小编了解,微软公司于今日凌晨面向Windows预览频道发布了新的Win11 KB5012817补丁,内部版本2...
Win11预览版全新标签式文件资源管理器上手体验:快速切换窗口,还可以滚动标签

Win11预览版全新标签式文件资源管理器上手体验:快速切换窗口,还可以滚动标签

据 Windows Latest 报道,如果你是众多要求微软为文件资源管理器添加标签页的用户之一,现在终于等到了好消息。...
微软 Win11 22H2“太阳谷 2”重大版本将全面改造升级传统经典 UI

微软 Win11 22H2“太阳谷 2”重大版本将全面改造升级传统经典 UI

据 Windows Latest 报道,Windows 11 太阳谷 2 更新预计将对 UI 进行大修,并在 WinUI...
电脑升级win11后怎么退回win10?win11退回win10系统操作方法

电脑升级win11后怎么退回win10?win11退回win10系统操作方法

方法一 1.当我们升级win11后需要退回win10系统时,首先进入开始菜单页面,找到【设置】。 2.在设置的操作页面中...

发表回复

返回顶部