zoukankan      html  css  js  c++  java
  • k8s中job和pod的区别

    Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。job是一种特殊的pod, 使用执行一次的任务,执行完释放资源

    Kubernetes支持以下几种Job:

    • 非并行Job:通常创建一个Pod直至其成功结束
    • 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束
    • 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功

    根据.spec.completions和.spec.Parallelism的设置,可以将Job划分为以下几种pattern:

    Job类型使用示例行为completionsParallelism
    一次性Job 数据库迁移 创建一个Pod直至其成功结束 1 1
    固定结束次数的Job 处理工作队列的Pod 依次创建一个Pod运行直至completions个成功结束 2+ 1
    固定结束次数的并行Job 多个Pod同时处理工作队列 依次创建多个Pod运行直至completions个成功结束 2+ 2+
    并行Job 多个Pod同时处理工作队列 创建一个或多个Pod直至有一个成功结束 1 2+

    Job Controller

    Job Controller负责根据Job Spec创建Pod,并持续监控Pod的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的Pod再次重试任务。

    Job Spec格式

    • spec.template格式同Pod
    • RestartPolicy仅支持Never或OnFailure
    • 单个Pod时,默认Pod成功运行后Job即结束
    • .spec.completions标志Job结束需要成功运行的Pod个数,默认为1
    • .spec.parallelism标志并行运行的Pod的个数,默认为1
    • spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试

    一个简单的例子:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      template:
        metadata:
          name: pi
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never
    $ kubectl create -f ./job.yaml
    job "pi" created
    $ pods=$(kubectl get pods --selector=job-name=pi --output=jsonpath={.items..metadata.name})
    $ kubectl logs $pods
    3.141592653589793238462643383279502...

    固定结束次数的Job示例

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: busybox
    spec:
      completions: 3
      template:
        metadata:
          name: busybox
        spec:
          containers:
          - name: busybox
            image: busybox
            command: ["echo", "hello"]
          restartPolicy: Never

    Bare Pods

    所谓Bare Pods是指直接用PodSpec来创建的Pod(即不在ReplicaSets或者ReplicationCtroller的管理之下的Pods)。这些Pod在Node重启后不会自动重启,但Job则会创建新的Pod继续任务。所以,推荐使用Job来替代Bare Pods,即便是应用只需要一个Pod。

    全世界的程序员们联合起来吧!
  • 相关阅读:
    QT解析和组装json
    linux下磁盘存储空间不足
    linux下的QT打包方法
    linux下编译protobuf
    linux下编译opencv
    linux下的qt串口通信
    QT执行shell脚本及linux指令相关
    windows下QT打包
    启动zookeeper却没有进程
    Linux命令
  • 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/15116778.html
Copyright © 2011-2022 走看看