需求来源
Job背景问题
- 可以通过Pod直接运行任务进程吗?
- 如何保证Pod内进程正确的结束?
- 如果进程运行失败,如何重试?
- 如何管理多个相互有依赖的任务?
- 如何并行运行任务并管理他们的队列大小?
Job:管理任务的控制器
- 创建一个或多个Pod确保指定数量的Pod可以成功地运行终止
- 跟踪Pod状态,根据配置及时重试失败的Pod
- 确定依赖关系,保证上一个任务运行完毕再运行下一个任务
- 控制任务并行度,并根据配置确保Pod队列大小
用例解读
Job语法
- restartPolicy:重试策略。
OnFailure,always,
Never
- backoffLimit:重启次数限制
查看Job状态
查看Pod
并行运行Job
- completions: 代表本pod队列执行次数,8表示这个任务会被执行8次
- parallelism:代表并行执行个数,2代表两个pod同时运行
- pod age表明每次job同时创建了两个pod
- 本job一共运行了四个批次,一共运行8个pod
CronJob语法
- schedule:crontab时间格式相同
- startingDeadlineSeconds:Job最长启动时间
- concurrencyPolicy:是否允许并行运行
- successfulJobsHistoryLimit:允许留存历史job个数
架构设计
管理模式
- Job controller负责根据配置创建Pod
- Job Controller跟踪Job状态,根据配置及时重试Pod或者继续创建
- Job Controller会自动添加label来跟踪对应的pod,并根据配置并行或者串行创建Pod
Job控制器
DaemonSet背景问题
- 可以让每个集群内的节点都运行一个相同的Pod吗?
- 如何保证每个节点都运行一个pod?
- 如果新节点加入集群,如何感知并部署相应的Pod?
- 如果由节点推出,如何删除对应的Pod?
- 如果Pod状态异常,如何监控并恢复Pod的状态?
DaemonSet:守护进程控制器
DaemonSet能做什么?
- 保证集群内每一个(或者一些)节点都运行一组相同的Pod
- 跟踪集群节点状态,保证新加入的节点自动创建对应的Pod
- 跟踪集群节点状态,保证移除的节点删除对应的Pod
- 跟踪Pod状态,保证每个节点Pod处于运行状态
用例解读
DaemonSet语法
适用场景:
- 集群存储进程:glusterd,ceph
- 日志收集进程:fluentd,logstash
- 需要在每个节点运行的监控收集器
查看DaemonSet状态
更新DaemonSet
架构设计
管理模式
- DaemonSet Controller负责根据配置创建Pod
- DaemonSet Controller跟踪Job状态,根据配置及时重试Pod或者继续创建
- DaemonSet Controller会自动添加affinity&label来跟踪对应的pod,并根据配置在哥哥节点或者适合的部分节点创建Pod
DaemonSet控制器
DaemonSet会watch node的状态。