笔记摘自视频章节:第四章-p28
主题
控制器实践
- DaemonSet: 保全部(或者一) Node上运行一个Pod的副本
- Job: 任务
- CronJob: 定时任务
操作
DaemonSet
- 文件:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: deamonset-example
labels:
app: daemonset
spec:
selector:
matchLabels:
name: deamonset-example
template:
metadata:
labels:
name: deamonset-example
spec:
containers:
- name: daemonset-example
image: wangyanglinux/myapp:v1
imagePullPolicy: IfNotPresent
- 创建daemonset: kubectl create -f p28_daemonset_demo.yaml
我的集群里只有1个Node。为了所以中间又增加了一个 node2,过程省略
- 查看pod,发现node1和node2上各出现一个daemonset pod。 符合DaemonSet的功能,即保证每个Node上都有一个pod
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
deamonset-example-fqkpc 1/1 Running 1 91m 10.244.1.6 jjh-k8s-demo-node1 <none> <none>
deamonset-example-zcm5x 1/1 Running 0 14m 10.244.0.2 jjh-k8s-node-2 <none> <none>
Job
- 文件
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
imagePullPolicy: IfNotPresent
command: [ "perl", "-Mbignum=bpi", "-wle", "print bpi(2000)" ]
restartPolicy: Never
- 这个perl镜像比较大。传输镜像过去
# 找一个快一点的主机
docker save perl -o /tmp/perl.tar
# 在目标node上
scp -i /root/jjh-demo.pem root@172.16.13.128:/tmp/perl.tar perl.tar
docker load -i perl.tar
- 创建job,监控pod状态,pod状态从running-> complete
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl create -f p28_job_demo.yaml
job.batch/pi created
#
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pi-dzdp9 1/1 Running 0 3s 10.244.3.3 jjh-k8s-node-2 <none> <none>
pi-dzdp9 0/1 Completed 0 6s 10.244.3.3 jjh-k8s-node-2 <none> <none>
pi-dzdp9 0/1 Completed 0 6s 10.244.3.3 jjh-k8s-node-2 <none> <none>
- 查看job进度,显示完成
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get job
NAME COMPLETIONS DURATION AGE
pi 1/1 6s 69s
- 查看执行结果
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl logs pi-dzdp9
3.141592653589793238462 后面省略
CronJob
spec说明:
- spec.template格式同Pod
- RestartPolicy支持Never或OnFailure
- 单个Pod时,默认Pod成功运行后Job即结束
- spec.completions标志ob结束需要成功运行的Pod个数,默认为1
- spec.parallelism 标志并行运行的Pod的个数,默认为1
- spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试
- spec.schedule:调度,必需宇段,指定任务运行周期,格式同Cron
- spec.jobTemplate: Job模板,必需宇段,指定需要运行的任务,格式同Job
- spec.startingDeadlineSeconds :启动Job的期限(秒级别) ,该宇段是可选的。如果因为任何原因而错过了被调度的时间,那么错过执行时间的Job将被认为是失败的。如果没有指定,则没有期限
- spec.concurrencyPolicy:并发策略,该字段也是可选的。它指定了如何处理被Cron Job 创建的Job的并发执行。只允许指定下面策略中的一种:
- Allow (默认) :允许并发运行Job
- Forbid :禁止并发运行,如果前一个还没有完成,则直接跳过下一个
- Replace:取消当前正在运行的Job,用一个新的来替换**
注意,当前策略只能应用于同一个 Cron Job 创建的Job。如果存在多个Cron Job,它们创建的Job之间总是允许并发运行。
- spec.suspend:挂起,该字段也是可选的。如果设置为true,后续所有执行都会被挂起。它对已经开始执行的Job不起作用。默认值为false.
- spec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit :历史限制,是可选的宇段。它们指定了可以保留多少完成和失败的Job。默认情况下,它们分别设置为3和1。设置限制的值为e,相关类型的Job完成后将不会被保留。
- 文件
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
- 创建cronjob,查看cronjob和job,已经出现。等待10分钟,可以看到,只存了3个执行完成的任务。
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl create -f p28_cronjob_demo.yaml
The CronJob "hello" is invalid: spec.jobTemplate.spec.template.spec.restartPolicy: Required value: valid values: "OnFailure", "Never"
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 19s 44s
# 等待若干分钟
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-27464211 1/1 6s 2m47s
hello-27464212 1/1 7s 107s
hello-27464213 1/1 4s 47s
- 监控pod,也只保留3个
root@jjh-k8s-demo-master:/tmp# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-27464191 1/1 10s 3m2s
hello-27464192 1/1 7s 2m2s
hello-27464193 1/1 7s 62s
hello-27464194 0/1 2s 2s
root@jjh-k8s-demo-master:/tmp# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-27464192 1/1 7s 2m9s
hello-27464193 1/1 7s 69s
hello-27464194 1/1 5s 9s
- 查看执行结果: 执行成功
root@jjh-k8s-demo-master:/tmp# kubectl logs hello-27464194-pksxt
Mon Mar 21 08:34:03 UTC 2022
Hello from the Kubernetes cluster