阿里云个人网站制作,服装品牌策划方案,新北方app下载,dede企业模板/dedecms蓝色企模板/php网站源码这里写目录标题 Job概念适用场景使用案例 CronJob概念适用场景使用案例 Job
概念
Job控制器用于管理Pod对象运行一次性任务#xff0c;例如#xff1a;对数据库备份#xff0c;可以直接在k8s上启动一个mysqldump备份程序#xff0c;也可以启动一个pod#xff0c;这个pod… 这里写目录标题 Job概念适用场景使用案例 CronJob概念适用场景使用案例 Job
概念
Job控制器用于管理Pod对象运行一次性任务例如对数据库备份可以直接在k8s上启动一个mysqldump备份程序也可以启动一个pod这个pod专门用来做备份任务备份结束pod就可以终止了不需要重启将Pod对象置于Completed(完成)状态。 若容器中的进程因错误而终止则需要按照重启策略配置确定是否重启对于Job这个类型的控制器来说需不需要重建pod就看任务是否完成完成就不需要重建没有完成就需要重建pod。 Job控制器的Pod对象的状态转换如下图所示
适用场景
单个任务只启一个podpod成功job正常结束并行任务同时指定成功个数可通过字段 .spec.completions 指定成功个数.spec.parallelism指定并行运行的任务数。当成功个数达到 指定的 .spec.completions 个任务结束
适用场景
Job 常用于并行地处理一组独立但相关的 work item。如发送邮件渲染帧转码文件和扫描NoSql数据库中的key。
相关配置字段
.spec.completions完成该Job需要执行成功的Pod数默认为1.spec.parallelism能够同时运行的Pod数默认为1如果设置为0则job会暂定.spec.backoffLimit允许执行失败的Pod数默认值是6。ps. 0表示不允许Pod执行失败。如果Pod是restartPolicy为Nerver则失败后会创建新的Pod如果是OnFailed则会重启Pod。不管是哪种情况只要Pod失败一次就计算一次而不是等整个Pod失败后再计算一个。当失败的次数达到该限制时整个Job随即结束所有正在运行中的Pod都会被删除.spec.activeDeadlineSeconds: Job的超时时间一旦一个Job运行的时间超出该限制则Job失败所有运行中的Pod会被结束并删除。该配置指定的值必须是个正整数。不指定则不会超时.spec.ttlSecondsAfterFinished通过指定该参数可以实现自动删除job以及级联的pod资源。如果设置为0job会被立即删除。如果不指定job则不会被自动删除。默认情况下job异常或者成功结束后包括job启动的pod都不会被清理掉可以依据保存的job和pod查看状态、日志以及调试等。用户可手动删除 job 会级联删除对应的pod。
使用案例
vim job.yamlapiVersion: batch/v1
kind: Job
metadata:name: my-job
spec:completions: 6 # job结束需要成功运行的Pod个数即状态为Completed的pod数parallelism: 3 # 同时运行3个pod 这个值不会超过completions的值backoffLimit: 6 # 如果job失败则重试几次template:spec:restartPolicy: Nevercontainers:- name: my-container-jobimage: busyboximagePullPolicy: IfNotPresentcommand: [sh, -c]args: [echo this is my-job;sleep 60; echo this is my-job too]更新资源清单文件
kubectl apply -f job.yaml刚创建完资源查看Job状态
kubectl get Job刚创建完资源查看Job控制器创建的pod的状态
kubectl get pods | grep my-job1分钟后看某个pod的日志
kubectl logs my-job-s9m5s动态查看pod状态
kubectl get pods -w | grep my-job继续观察Job控制器创建的pod 最终 状态都为完成 加上 “.spec.ttlSecondsAfterFinished” 字段后任务完成后指定秒数后自动删除job和关联的pod
vim job.yamlapiVersion: batch/v1
kind: Job
metadata:name: my-job
spec:completions: 6parallelism: 3backoffLimit: 6ttlSecondsAfterFinished: 3 # 加上它等3秒后资源自动删除template:spec:restartPolicy: Nevercontainers:- name: my-container-jobimage: busyboximagePullPolicy: IfNotPresentcommand: [sh, -c]args: [echo this is my-job;sleep 5; echo this is my-job too]
更新资源清单文件
kubectl apply -f job.yaml时间到了自动删除pod和job
CronJob
概念
CronJob跟Job完成的工作是一样的只不过CronJob添加了定时任务能力。可以指定时间实现周期性运行。JobCronJob 与 DeploymentDaemonSet 显著区别在于不需要持续在后台运行。 Deployment主要用于管理无状态的应用kubernetes集群有一些 pod某一个pod出现故障删除之后会重新启动一个pod那么kubernetes这个集群中pod数量就正常了更多关注的是群体这就是无状态应用。
适用场景
在给定的时间点调度Job运行。创建周期性运行的Job例如数据库备份、发送邮件
使用案例
vim cronjob.yaml apiVersion: batch/v1
kind: CronJob
metadata:name: my-cron-job
spec:schedule: */1 * * * * # 1分钟执行一次jobTemplate:spec:template:spec:containers:- name: my-container-cron-jobimage: busyboximagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- date; echo my-container-cron-jobrestartPolicy: OnFailure更新资源清单文件
kubectl apply -f cronjob.yaml查看刚才创建的cronJob
kubectl get cronjob从命令的结果可以看出CronJob还没有调度或运行任何Job。观察大概一分钟等待CronJob创建
kubectl get jobs --watch现在可以看到由 my-cron-job 这个cronjob调度的一个正在运行的job kubectl get cronjob可以看到 my-cron-job 这个CronJob成功地在 LAST SCHEDULE中指定的时间点调度了一个作业。当前有1个活动作业这意味着该作业已经完成或失败
kubectl get jobs每60秒建一个job
kubectl get pods | grep my-cron-job每60秒执行一个pod 查看pod执行日志
kubectl logs my-cron-job-28540151-4vhlm