Kubernetes---资源控制器之DaemonSet、Job和CronJob
⒈DaemonSet介绍,什么是DaemonSet
DaemonSet 确保全部(或者一些)Node 上运行一个Pod的副本【注意主节点并不会参加调度】。当有 Node 加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod 也会被回收。删除DaemonSet将会删除它创建的所有Pod
使用DaemonSet的一些典型用法:
·运行集群存储 daemon,例如在每个Node 上运行glusterd、ceph
·在每个Node 上运行日志收集 daemon,例如fluentd、logstash
·在每个Node 上运行监控daemon,例如Prometheus Node Exporter、collectd、Datadog代理、New Relic 代理,或Ganglia gmond
⒉DaemonSet资源文件示例
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: deamonset-example
labels:
app: daemonset
spec:
selector:
matchLabels:
name: deamonset-example
template:
metadata:
1abels:
name: deamonset-example
spec:
containers:
- name: daemonset-example
image: fanqisoft/myapp:v1
⒊Job介绍,什么是Job
Job负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束
特殊说明
·spec.template格式同Pod
·RestartPolicy仅支持Never或OnFailure
·单个Pod时,默认Pod成功运行后Job即结束·
.spec.completions 标志Job结束需要成功运行的Pod个数,默认为1·
.spec.parallelism 标志并行运行的Pod的个数,默认为1
·spec.activeDeadlineseconds标志失败Pod的重试最大时间,超过这个时间不会继续重试
⒋Job资源文件示例
apiVersion: batch/v1
kind: Job
metadata:
name:pi
spec:
template:
metadata:
name:pi
spec:
containers:
- name: pi
image: perl
command: ["per1","-Mbignum=bpi","-wle","print bpi(2000)"]
restartPolicy: Never
⒌CronJob
CronJob管理基于时间的Job,即:
·在给定时间点只运行一次
·周期性地在给定时间点运行
使用条件:当前使用的Kubernetes 集群,版本>=1.8(对CronJob)
典型的用法如下所示:
·在给定的时间点调度Job运行
·创建周期性运行的Job,例如:数据库备份、发送邮件
⒍CronJob Spec
·spec.template格式同Pod
·RestartPolicy仅支持Never或OnFailure
·单个Pod时,默认Pod成功运行后Job即结束·
.spec.completions标志Job结束需要成功运行的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,用一个新的来替换
注意,当前策略只能应用于同一个CronJob创建的Job。如果存在多个Cron Job,它们创建的Job之间总是允许并发运行。
.spec.suspend:挂起,该字段也是可选的。如果设置为true,后续所有执行都会被挂起。它对已经开始执行的Job不起作用。默认值为false。
.spec.successfulJobsHistoryLimit和.spec.failed]obsHistoryLimit:历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job。默认情况下,它们分别设置为3和1。设置限制的值为e,相关类型的Job完成后将不会被保留。
⒎CronJob资源文件示例
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: he11o
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本身的一些限制
创建Job操作应该是幂等的
CronJob并不太好去判断任务是否成功,CronJob通过创建Job去完成任务,Job成功与否可以判断,但CronJob无法链接到Job去获取成功与否,Cron只会定期的去创建Job,仅此而已。