Kubernetes - Jobs
Job 的主要功能是创建 一个或多个 Pod,并跟踪 Pod 的成功状态。它们确保指定的 Pod 数量成功完成。当指定的成功运行的 Pod 数量完成时,Job 即被视为完成。
创建 Job
使用以下命令创建 Job —
apiVersion: v1
kind: Job ------------------------> 1
metadata:
name: py
spec:
template:
metadata
name: py -------> 2
spec:
containers:
- name: py ------------------------> 3
image: python----------> 4
command: ["python", "SUCCESS"]
restartPocliy: Never --------> 5
在上面的代码中,我们定义了 —
kind: Job → 我们将 kind 定义为 Job,这将告诉 kubectl 所使用的 yaml 文件是用于创建 Job 类型 Pod。
Name:py → 这是我们使用的模板名称,spec 定义了该模板。
name: py → 我们在 container spec 下指定了名称 py,这有助于识别由此创建的 Pod。
Image: python → 我们将拉取的 image,用于创建运行在 Pod 内的 container。
restartPolicy: Never →该 image 的重启条件设置为 never,这意味着如果 container 被杀死或失败,它将不会重启。
我们将使用以下命令和保存为 py.yaml 的 yaml 文件来创建 Job。
$ kubectl create f py.yaml
上述命令将创建 Job。如果要检查 Job 的状态,请使用以下命令。
$ kubectl describe jobs/py
上述命令将创建 Job。如果要检查 Job 的状态,请使用以下命令。
定时 Job
Kubernetes 中的定时 Job 使用 Cronetes,它会接管 Kubernetes Job 并在 Kubernetes 集群中启动它们。
- 调度 Job 将在指定时间点运行 Pod。
- 为此创建一个周期性 Job,它会自动调用自身。
注意 − 定时 Job 功能由版本 1.4 支持,并且通过在启动 API server 时传递 runtime-config=batch/v2alpha1 来启用 betch/v2alpha 1 API。
我们将使用与创建 Job 时相同的 yaml,并将其修改为定时 Job。
apiVersion: v1
kind: Job
metadata:
name: py
spec:
schedule: h/30 * * * * ? -------------------> 1
template:
metadata
name: py
spec:
containers:
- name: py
image: python
args:
/bin/sh -------> 2
-c
ps eaf ------------> 3
restartPocliy: OnFailure
在上面的代码中,我们定义了 —
schedule: h/30 * * * * ? → 调度 Job 每 30 分钟运行一次。
/bin/sh: 这将使用 /bin/sh 进入 container。
ps eaf → 将在机器上运行 ps -eaf 命令,并列出 container 内所有运行的进程。
这种定时 Job 概念在尝试在指定时间点构建并运行一组任务然后完成进程时非常有用。