返回 导航

Docker / K8s

hangge.com

K8s - Kubernetes使用详解4(运行Job样例)

作者:hangge | 2019-07-31 08:10
容器按照持续运行的时间可分为两类:服务类容器和工作类容器。  
  • 服务类容器通常持续提供服务,需要一直运行,比如 http serverdaemon 等。
  • 工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。
对于 Kubernetes 里个各种 Controller 来说:
  • DeploymentReplicaSetDaemonSet 都用于管理服务类容器。
  • JobCronJon 则用于管理工作类容器。
下面我就介绍下如何使用 Job 运行一次性任务。

三、运行 Job

1,基本用法

(1)首先编辑一个简单的 Job 配置文件 myjob.yml,内容如下:
关于 restartPolicy(重启策略)
  • 对于 Job,只能设置为 Never 或者 OnFailure
  • 对于其他 controller(比如 Deployment)可以设置为 Always
apiVersion: batch/v1 #当前job的Version
kind: Job #指定当前资源的类型是Job
metadata:
  name: myjob
spec:
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - image: busybox
        name: node-exporter
        command: # 设置容器的启动命令
        - ["echo", "welcome to hangge.com"]
      restartPolicy: Never #restartPolicy指当前的重启策略(失败的容器不会重启)

(2)接着执行如下命令启动这个 Job
kubectl apply -f myjob.yml 

(3)执行如下命令可以查看 Job 的状态。completions1/1 表示成功运行了这个 job
kubectl get job

(4)执行如下命令可以查看 Pod 的状态。
因为 Pod 执行完毕后容器已经退出,需要用 --show-all 才能查看 Completed 状态的 Pod
kubectl get pod --show-all

(5)执行如下命令可以查看 Pod 的标准输出:
kubectl logs myjob-pbrzp

2,Job 的执行失败的情况

(1)这里我们将配置文件中的命令改成一个错误命令,同时重启策略仍然是 Never

(2)查看 Job 状态可以这个 job 没有完成。

(3)而查看 Pod 状态会发现这里有许多失败的容器,而且数量还在持续增加。这是因为我们设置了 restartPolicy: Never,因此失败容器不会被重启,而是会启动新的 Pod,直到 SUCCESSFUL 为 1。但对于本样例,SUCCESSFUL 永远也到不了 1,所以 Job controller 会一直创建新的 Pod

(4)但是如果我们将 restartPolicy 设置为 OnFailure 的化,容器失败后会自动重启,而不是重新创建个新容器。

3,并行执行 Job

    现实中确实存在很多需要并行处理的场景。比如批处理程序,每个副本(Pod)都会从任务池中读取任务并执行,副本越多,执行时间就越短,效率就越高。这种类似的场景都可以用 Job 来实现。
(1)有时我们希望能同时运行多个 Pod,提高 Job 的执行效率。这个可以通过 parallelism 设置,下面我们将并行的 Pod 数量设置为 2
apiVersion: batch/v1 #当前job的Version
kind: Job #指定当前资源的类型是Job
metadata:
  name: myjob
spec:
  parallelism: 2
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - image: busybox
        name: node-exporter
        command: ["echo", "welcome to hangge.com"] # 设置容器的启动命令
      restartPolicy: Never #restartPolicy指当前的重启策略(失败的容器不会重启)

(2)执行后可以看到 Job 一共启动了两个 Pod,而且 AGE 相同,可见这两个 Pod 是并行运行的。

(3)我们还可以通过 completions 设置 Job 成功完成 Pod 的总数。必须下面配置表示每次运行两个 Pod,直到总共有 6Pod 成功完成。
注意:如果不指定 completionsparallelism,它们默认值均为 1

(4)Job 执行后可看到 DESIREDSUCCESSFUL 均为 6,符合预期。
评论

全部评论(0)

回到顶部