实验手册06-Job

任务一:运行Job
步骤1 创建配置文件,命名为 myjob.yaml
vim myjob.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 加载刚才创建的配置文件
kubectl apply -f myjob.yaml

步骤3 验证
查看 Job 状态:
kubectl get job

查看 Pods 列表:
kubectl get pods

可以看到一个状态为 Completed 的 Job,它表示该 Job 已经结束(完成)
我们再来看一下该 Job 的日志
kubectl logs myjob-p2bww

最后我们删除刚才创建的 Job
kubectl delete -f myjob.yaml
任务二:观察 Pod 的失败情况
步骤1 修改刚才的配置文件,故意引入一个错误:
先复制一份原文件,然后在新文件上修改
cp myjob.yaml myjob-error.yaml
vim myjob-error.yaml

我们在第13行,使用lalala
这一并不存在的命令去替换echo
命令
步骤2 加载修改后的配置文件
kubectl apply -f myjob-error.yaml
步骤3 验证
查看 Job 列表
kubectl get job

可以发现,没有已经完成的Job
查看 Pod 列表
kubectl get pods

可以发现,STATUS
这一列全都是ContainerCannotRun
状态
我们再挑一个 Pod 看看它的详细信息
kubectl describe pod myjob-wq55c
注意:kubectl 的命令格式为 kubectl <操作> <资源类型> [资源名称] 之前我们常用的<操作>是
get
和delete
,今天我们正式引入第3个<操作>describe
,它用来查看某个资源的详细信息
我们在查看 Pod 时,发现有多个状态不正常的 Pod,这是因为我们在配置文件中指定restartPolicy: Never
即永不重启。k8s 为了保证这一任务至少有一个成功,会不断创建新的 Pod 来执行任务。我们接下来修改 restartPolocy
为 OnFailure
,修改后的文件内容如下:

步骤4 删除刚才创建的资源
kubectl delete -f myjob-error.yaml
步骤5 加载修改后的配置文件
kubectl apply -f myjob-error.yaml
kubectl get pod
这下我们只能看见一个 Pod,但是它的重启次数会一直增加。
任务三:验证 Job 的并行性
步骤1 创建配置文件myjob-3.yaml
vim myjob-3.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 加载该配置文件
kubectl apply -f myjob-3.yaml
步骤3 验证
查看 Job
kubectl get job

查看 Pod
kubectl get pod

该任务(任务四)中的内容,在实际中,用途不大……
步骤4 删除该任务中创建的资源
kubectl delete -f myjob-3.yaml

任务四:定时 Job
步骤1 创建配置文件myjob-4.yaml
vim myjob-4.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 模板
加载配置文件
kubectl apply -f myjob-4.yaml

步骤3 验证
查看 CronJob 列表
kubectl get cronjob

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

查看 Pod 列表,可以多执行几次,我们会发现 pod 的数量在变多
我们的定时任务会让它每分钟启动一个 Job
kubectl get pod
