- Job: 
  -  容器按照持续运行的时间可分为两类,服务类容器,和工作类容器 
-  服务类容器通常持续提供服务,需要一直运行,比如HTTP,Server,Daemon等, 
-  工作类容器则是一次性任务,比如批处理程序,完成后容器就退出 
-  kubernetes的Deployment,ReplicaSet和DaemonSet都用于管理服务类容器,对于工作类容器,使用Job 
-  myjob.yam配置解析 - batch/v1是当前Job的apiVersion
- 指明当前资源的类型为Job
- restartPolicy指定什么情况下需要重启容器,对于Job,只能设置为Never或者OnFailure,对于其他controller,比如Deployment,可以设置为Always
- 通过kubectl apply -f myjob.yml启动Job
 
-  通过kubectl get job 查看Job的状态  -  desired和successful都为1,表示按照预期启动了一个pod,并且已经成功执行,通过kubectl get pod 查看pod的状态  
-  因为pod执行完毕后容器已经退出,需要用–show-all才能看到Completed状态的Pod 
-  通过kubectl logs可以查看Pod的标准输出  
 
-  
-  Pod失败的情况 -  修改myjob.yml,故意引入一个错误  
-  先删除之前的job  
-  运行新的job并查看状态  
-  当前successful的Pod数量为0,查看Pod的状态  
-  可以看到有多个Pod,状态均为不正常,通过kubectl describe pod查看某个pod的启动日志  
-  日志显示没有可执行程序 
-  为什么kubectl get pod会看到多个失败的pod? - 当第一个pod启动时,容器失败退出,根据restartPolicy:Never,此容器失败不会被重启,但Job desired的pod是1,目前successful为0,不满足,所以job controller会启动新的Pod,直到successful为1,对于这上面的例子而言,successful永远也到不了1,所以Job controller会一直创建新的Pod,为了终止这个行为,只能删除Job 
 
- 当第一个pod启动时,容器失败退出,根据restartPolicy:Never,此容器失败不会被重启,但Job desired的pod是1,目前successful为0,不满足,所以job controller会启动新的Pod,直到successful为1,对于这上面的例子而言,successful永远也到不了1,所以Job controller会一直创建新的Pod,为了终止这个行为,只能删除Job
-  将restartPolicy设置为OnFailure,修改myjob。yml后重新启动  - Job的successful的pod的数量还是0,再看Pod的状态 
- 这里只有一个Pod,不过restarts为3,而且不断增加,说明OnFailure生效,容器失败后会自动重启
 
- Job的successful的pod的数量还是0,再看Pod的状态
-  Job的并行性 -  如果希望能同时运行多个Pod,提高Pod的执行效率,可以通过parallelism设置  
-  将并行的Pod数量设置为2,可以看到job一共启动了两个Pod,而且age相同  
-  通过completions设置Job成功完成Pod的总数  
-  上面配置的含义是:每次运行两个Pod,直到总共有6个Pod成功完成  
-  desired和successful均为6,符合预期,如果不指定completions和parallelism,默认值都为1 
-  对于批处理程序,每个副本Pod都会从任务池中读取任务并执行,副本越多,执行时间就越短,效率就越高,这种场景可以使用Job来实现 
 
-  
-  定时Job -  linux中有cron程序定时执行任务,kubernetes的CronJob提供了类似的功能,可以定时执行Job, 
-   
-  配置解读 -  batch/v2alpha1是当前CronJob的apiVersion 
-  指明当前资源的类型为CronJob 
-  schedule指定什么时候运行Job,其格式与Linux cron一致,这里的*/1 * * * *的含义是每一分钟启动一次 
-  jobTemplate定义Job的模板,格式与前面的Job一致 
-  通过kubectl apply创建CronJob,然后失败  
-  是因为kubernetes默认没有enable CronJob功能,需要在kube-apiserver中加入这个功能,修改kube-apiserver的配置文件/etc/kubernetes/manifests/kubeapiserver.yaml  
-  kube-apiserver本身也是一个pod,在启动参数中加上–runtime-config=batch/v2alpha1=true即可,然后重启kubelet服务:systemctl restart kubelet.service。kubelet会重启kube-apiserver Pod,通过kubectl api-versions确认kube-apiserver现在已经支持batch/v2alpha1  
-  再次创建CronJob  
-  通过kubectl get cronjob查看CronJob的状态  
-  等待几分钟,查看job的状态  
-  可以看到每隔一分钟就会启动一个Job,执行kubectl logs查看某个Job的运行日志  
 
-  
 
-  
 
-  
 
-  



















