Kubernetes 作业


作业的主要功能是创建一个或多个 Pod 并跟踪 Pod 的成功,它们确保指定数量的 Pod 成功完成,当指定数量的 pod 成功运行完成时,则认为该作业已完成。

创建作业


使用以下命令创建作业:

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 →将种类定义为 Job ,告诉告诉kubectl正在使用的yaml文件是用来创建一个作业类型的pod;

  • name:py →这是正在使用的模板的名称,规范定义了模板;

  • name: py →在容器规范下给了一个名字py,这有助于识别将要从中创建的 Pod;

  • image:python →将要拉取的镜像来创建将在 pod 内运行的容器;

  • restartPocliy(重启策略):Never →镜像重启的这个条件是从不给出的,这意味着如果容器被杀死或者它是false的,那么它不会自己重启。

使用以下命令使用 yaml 创建作业,该 yaml 保存为py.yaml

$ kubectl create –f py.yaml

可以使用以下命令检查作业的状态:

$ kubectl describe jobs/py

计划作业


Kubernetes 中的计划作业使用Cronetes,它接受 Kubernetes 作业并在 Kubernetes 集群中启动它们:

  • 调度作业将在指定的时间点运行 pod;

  • 为它创建了一个模仿作业,它会自动调用自己。

注意: 1.4版本支持预定作业的功能,通过在启动API服务器时传递-runtime-config=batch/v2alpha1,可以打开betch/v2alpha1 API。

使用与创建作业相同的 yaml 并将其设为预定作业:

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 * * * * ?→ 安排作业每 30 分钟运行一次;

  • /bin/sh:这将使用 /bin/sh 进入容器;

  • ps –eaf →将在机器上运行 ps -eaf 命令并列出容器内所有正在运行的进程。

当尝试在指定的时间点构建和运行一组任务,然后完成该过程时,此计划作业概念非常有用。