实验手册06-Job

步骤1 创建配置文件,命名为 myjob.yaml

bash

vim myjob.yaml

其文件内容为:

yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo", "hello k8s job!"]
      restartPolicy: Never
  • kind 类型指定为 Job,之前我们使用过 Deployment、DaemonSet
  • restartPolicy 重启策略,指定什么情况下需要重启

步骤2 加载刚才创建的配置文件

bash

kubectl apply -f myjob.yaml
加载配置文件

步骤3 验证

查看 Job 状态:

bash

kubectl get job
查看Job列表

查看 Pods 列表:

bash

kubectl get pods
查看Pod列表

可以看到一个状态为 Completed 的 Job,它表示该 Job 已经结束(完成)

我们再来看一下该 Job 的日志

bash

kubectl logs myjob-p2bww
查看Job日志

最后我们删除刚才创建的 Job

bash

kubectl delete -f myjob.yaml

步骤1 修改刚才的配置文件,故意引入一个错误:

先复制一份原文件,然后在新文件上修改

bash

cp myjob.yaml myjob-error.yaml
vim myjob-error.yaml
修改配置文件

我们在第13行,使用lalala这一并不存在的命令去替换echo命令

步骤2 加载修改后的配置文件

bash

kubectl apply -f myjob-error.yaml

步骤3 验证

查看 Job 列表

bash

kubectl get job
Job列表

可以发现,没有已经完成的Job

查看 Pod 列表

bash

kubectl get pods
Pod列表

可以发现,STATUS这一列全都是ContainerCannotRun状态

我们再挑一个 Pod 看看它的详细信息

bash

kubectl describe pod myjob-wq55c

注意:kubectl 的命令格式为 kubectl <操作> <资源类型> [资源名称] 之前我们常用的<操作>是getdelete,今天我们正式引入第3个<操作>describe,它用来查看某个资源的详细信息

我们在查看 Pod 时,发现有多个状态不正常的 Pod,这是因为我们在配置文件中指定restartPolicy: Never 即永不重启。k8s 为了保证这一任务至少有一个成功,会不断创建新的 Pod 来执行任务。我们接下来修改 restartPolocyOnFailure,修改后的文件内容如下:

修改配置文件

步骤4 删除刚才创建的资源

bash

kubectl delete -f myjob-error.yaml

步骤5 加载修改后的配置文件

bash

kubectl apply -f myjob-error.yaml
kubectl get pod

这下我们只能看见一个 Pod,但是它的重启次数会一直增加。

步骤1 创建配置文件myjob-3.yaml

bash

vim myjob-3.yaml

文件内容如下:

yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  parallelism: 2
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo", "hello k8s job!"]
      restartPolicy: OnFailure

在该文件中,我们通过第6行指定Pod数量为2

步骤2 加载该配置文件

bash

kubectl apply -f myjob-3.yaml

步骤3 验证

查看 Job

bash

kubectl get job
Job列表

查看 Pod

bash

kubectl get pod
Pod列表

该任务(任务四)中的内容,在实际中,用途不大……

步骤4 删除该任务中创建的资源

bash

kubectl delete -f myjob-3.yaml
删除资源

步骤1 创建配置文件myjob-4.yaml

bash

vim myjob-4.yaml

文件内容如下:

yaml

apiVersion: batch/v1
kind: CronJob
metadata:
  name: myjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo", "hello k8s job!"]
          restartPolicy: OnFailure
          
  • kind: CronJob 表示类型为定时任务
  • schedule 指定什么时候运行 Job,其格式与 Linux 中的 cron 一致
  • jobTemplate 定义 Job 模板

加载配置文件

bash

kubectl apply -f myjob-4.yaml
创建CronJob

步骤3 验证

查看 CronJob 列表

bash

kubectl get cronjob
CronJob列表

查看 Job 的执行情况,大家可以多执行几次,看看是否有变化

bash

kubectl get job
Job列表

查看 Pod 列表,可以多执行几次,我们会发现 pod 的数量在变多

我们的定时任务会让它每分钟启动一个 Job

bash

kubectl get pod
Pod列表