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

作者: hangge 发布时间: 2019-09-02 浏览: 3122 次 编辑

容器按照持续运行的时间可分为两类:服务类容器和工作类容器。  

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

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

对于 Kubernetes 里个各种 Controller 来说:

  • DeploymentReplicaSet 和 DaemonSet 都用于管理服务类容器。

  • JobCronJon 则用于管理工作类容器。

下面我就介绍下如何使用 Job 运行一次性任务。

三、运行 Job

1,基本用法

(1)首先编辑一个简单的 Job 配置文件 myjob.yml,内容如下:

   

    关于 restartPolicy(重启策略)

  • 对于 Job,只能设置为 Never 或者 OnFailure

  • 对于其他 controller(比如 Deployment)可以设置为 Always 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

1
kubectl apply -f myjob.yml


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

1
kubectl get job

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


(4)执行如下命令可以查看 Pod 的状态。

因为 Pod 执行完毕后容器已经退出,需要用 --show-all 才能查看 Completed 状态的 Pod

1
kubectl get pod --show-all

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


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

1
kubectl logs myjob-pbrzp

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


2,Job 的执行失败的情况

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

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


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

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


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

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


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

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


3,并行执行 Job

    现实中确实存在很多需要并行处理的场景。比如批处理程序,每个副本(Pod)都会从任务池中读取任务并执行,副本越多,执行时间就越短,效率就越高。这种类似的场景都可以用 Job 来实现。

(1)有时我们希望能同时运行多个 Pod,提高 Job 的执行效率。这个可以通过 parallelism 设置,下面我们将并行的 Pod 数量设置为 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 是并行运行的。

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


(3)我们还可以通过 completions 设置 Job 成功完成 Pod 的总数。必须下面配置表示每次运行两个 Pod,直到总共有 6 个 Pod 成功完成。

注意:如果不指定 completions 和 parallelism,它们默认值均为 1

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

(4)Job 执行后可看到 DESIRED 和 SUCCESSFUL 均为 6,符合预期。

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


原文链接:https://www.hangge.com/blog/cache/detail_2433.html