1. Job控制器可以执行3种类型的任务

  • 一次性任务
  • 串式任务 spec.completions
  • 并形式任务 spec.parallelism

默认Job执行后,不会自动删除,需要手动删除,例如kubectl delete job examplejobv1
如果想要自动删除,需要修改配置文件 /etc/kubernetes/manifests
下面对应的kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml
加入- --feature-gates=TTLAfterFinished=true

1.1容器按照持续运行的时间可分为两类:

  • 服务类容器

服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等。

  • 工作类容器

工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。

Kubernetes 的 Deployment、ReplicaSet 和 DaemonSet 都用于管理服务类容器;对于工作类容器,我们用 Job。

1.2 先看一个简单的 Job 配置文件 myjob.yml:

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob-busybox
spec:
  ttlSecondsAfterFinished: 30
  activeDeadlineSeconds: 60
  completions: 11
  parallelism: 4
  backoffLimit: 6
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: myjob-busybox-container
          image: busybox
          imagePullPolicy: IfNotPresent
          command: ['sh', '-c']
          args: ['echo "start job";sleep 60; echo "job end"']

① batch/v1是当前job的Version

② 指定当前资源的类型时Job

③restartPolicy是指当前的重启策略。对于 Job,只能设置为 Never 或者 OnFailure。对于其他 controller(比如 Deployment)可以设置为 Always 。

启动这个job

[root@master manifests]# kubectl apply -f myjob.yml 
job.batch/myjob created

kubectl get job 查看这个job

[root@master manifests]kubectl  get job
NAME            COMPLETIONS   DURATION   AGE
myjob-busybox   4/11          9m24s      9m24s

kubectl get pod 查看pod的状态

[root@master manifests]# kubectl  get pod
NAME                                READY   STATUS      RESTARTS   AGE
myjob-busybox-cdjbb                 0/1     Completed   0          20m
myjob-busybox-lkh5n                 0/1     Completed   0          20m
myjob-busybox-qrbnc                 0/1     Completed   0          20m
myjob-busybox-rnvbx                 0/1     Completed   0          20m

看到 状态为Completed表示这个job已经运行完成

kubectl logs 命令查看这个 pod的日志

[root@master manifests]# kubectl  logs -f myjob-busybox-cdjbb
start job
job end

kubectl delete job jobname 删除job

[root@master manifests]# kubectl delete job myjob-busybox
job.batch "myjob-busybox" deleted
[root@master manifests]# kubectl  get job
No resources found in default namespace.

2. job执行失败

job的restartPolicy只可以是Onfailure和Never中的一个

如果设置为Onfailure,默认重试次数是6, 以上事例可以不写backoffLimit
失败后,会按照10s, 20, 40s 120s 240s 等,递增延迟重试,上限是240s(6分钟)

设置activeDeadlineSeconds可以用时间来限制假死的job,时间一到强制推出job

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐