Job

Job接管的Pod通常都是用来执行一些一次性的任务,比如批处理程序,即执行完后容器就退出。

被Job接管的Pod,当Node发生故障时,该Pod会被自动安排到新的Node上。

创建Job

下面展示一个具体的Job的配置文件案例:

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  backoffLimit: 5    # 指定Pod失败之前可以重试的次数(默认是6),可以配合Pod的spec.activeDeadlineSeconds使用
  completions: 6    # 共有6个Job
  parallelism: 2    # 每次并行最多进行2个;默认为1,所以默认情况下是一个Pod一个Pod创建
  template:        # (必须)Pod的模板
    metadata:
      labels:
        app: myjob
      name: myjob    # 自动划分到Pods的labels中,job-name=myjob
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo", "hello k8s job!"]
      restartPolicy: OnFailure    # 重启策略(因为Job应当是执行完就结束,所以不能使用always)
      activeDeadlineSeconds: 60    # 限制pod的运行时间,为了防止pod无休止的卡死,此处生效,会将pod退出,并将Job标记为失败

🌝 Pod默认的spec.restartPolicyAlways,即默认Pod有异常或退出,就会无限重启,但是由于Job中的Pod都是一次性任务,所以要求Pod正常退出时,就当做正常结束即可,不需要重启Pod,所以在使用Job创建Pod时,一定要将spec.restartPolicy置为onFailure

🌚 在实验中发现,job.spec.selector 不支持手动指定,必须任其自动匹配 template.metadata.labels 中的值,否则会被验证准入插件报错。

执行完成的Pod的STATUS列会显示为Completed

Job接管的Pod运行完成后的状态为Completed

Last updated

Was this helpful?