
文章目录
Kubernetes(k8s)工作负载
一、Workloads

二、Pod
关于Pod深入介绍已经在之前文章讲述过,有不了解的同学可以再看看以下文章
【云原生 | Kubernetes篇】深入了解Pod(六)_Lansonli的博客-CSDN博客
三、Deployment
关于Deployment深入介绍已经在上一篇文章讲述过,有不了解的同学可以看看以下文章
【云原生 | Kubernetes篇】深入了解Deployment_Lansonli的博客-CSDN博客
四、RC、RS、DaemonSet、StatefulSet
关于这块内容已经在之前文章讲述过,有不了解的同学可以再看看以下文章
【云原生 | Kubernetes篇】深入RC、RS、DaemonSet、StatefulSet(七)_Lansonli的博客-CSDN博客
五、Job、CronJob
1、Job
Kubernetes中的 Job 对象将创建一个或多个 Pod,并确保指定数量的 Pod 可以成功执行到进程正常结束:
-  
当 Job 创建的 Pod 执行成功并正常结束时,Job 将记录成功结束的 Pod 数量
 -  
当成功结束的 Pod 达到指定的数量时,Job 将完成执行
 -  
删除 Job 对象时,将清理掉由 Job 创建的 Pod
 
![]()
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never #Job情况下,不支持Always
  backoffLimit: 4 #任务4次都没成,认为失败
  activeDeadlineSeconds: 10 
#默认这个任务需要成功执行一次。
#查看job情况
kubectl get job
#修改下面参数设置再试试
#千万不要用阻塞容器。nginx。job由于Pod一直running状态。下一个永远得不到执行,而且超时了,当前running的Pod还会删掉
kubectl api-resources 
#参数说明
kubectl explain job.spec
activeDeadlineSeconds:10 总共维持10s
#该字段限定了 Job 对象在集群中的存活时长,一旦达到 .spec.activeDeadlineSeconds 指定的时长,该 Job 创建的所有的 Pod 都将被终止。但是Job不会删除,Job需要手动删除,或者使用ttl进行清理
backoffLimit:
#设定 Job 最大的重试次数。该字段的默认值为 6;一旦重试次数达到了 backoffLimit 中的值,Job 将被标记为失败,且尤其创建的所有 Pod 将被终止;
completions: #Job结束需要成功运行的Pods。默认为1
manualSelector:
parallelism: #并行运行的Pod个数,默认为1
ttlSecondsAfterFinished:
ttlSecondsAfterFinished: 0 #在job执行完时马上删除
ttlSecondsAfterFinished: 100 #在job执行完后,等待100s再删除
#除了 CronJob 之外,TTL 机制是另外一种自动清理已结束Job(Completed 或 Finished)的方式:
#TTL 机制由 TTL 控制器 提供,ttlSecondsAfterFinished 字段可激活该特性
#当 TTL 控制器清理 Job 时,TTL 控制器将删除 Job 对象,以及由该 Job 创建的所有 Pod 对象。	
#job超时以后 已经完成的不删,正在运行的Pod就删除
#单个Pod时,Pod成功运行,Job就结束了
#如果Job中定义了多个容器,则Job的状态将根据所有容器的执行状态来变化。
#Job任务不建议去运行nginx,tomcat,mysql等阻塞式的,否则这些任务永远完不了。
#如果Job定义的容器中存在http server、mysql等长期的容器和一些批处理容器,则Job状态不会发生变化(因为长期运行的容器不会主动结束)。此时可以通过Pod的.status.containerStatuses获取指定容器的运行状态。 
manualSelector:
-  
job同样可以指定selector来关联pod。需要注意的是job目前可以使用两个API组来操作,batch/v1和extensions/v1beta1。当用户需要自定义selector时,使用两种API组时定义的参数有所差异。
 -  
使用batch/v1时,用户需要将jod的spec.manualSelector设置为true,才可以定制selector。默认为false。
 -  
使用extensions/v1beta1时,用户不需要额外的操作。因为extensions/v1beta1的spec.autoSelector默认为false,该项与batch/v1的spec.manualSelector含义正好相反。换句话说,使用extensions/v1beta1时,用户不想定制selector时,需要手动将spec.autoSelector设置为true。
 
2、CronJob
CronJob 按照预定的时间计划(schedule)创建 Job(注意:启动的是Job不是Deploy,rs)。一个 CronJob 对象类似于 crontab (cron table) 文件中的一行记录。该对象根据 Cron 格式定义的时间计划,周期性地创建 Job 对象。
一个 CronJob 在时间计划中的每次执行时刻,都创建 大约 一个 Job 对象。这里用到了 大约 ,是因为在少数情况下会创建两个 Job 对象,或者不创建 Job 对象。尽管 K8S 尽最大的可能性避免这种情况的出现,但是并不能完全杜绝此现象的发生。因此,Job 程序必须是幂等的。
当以下两个条件都满足时,Job 将至少运行一次:
-  
startingDeadlineSeconds被设置为一个较大的值,或者不设置该值(默认值将被采纳) -  
concurrencyPolicy被设置为Allow 
apiVersion: batch/v1beta1
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 
 
六、GC
什么是垃圾回收
Kubernetes garbage collector(垃圾回收器)的作用是删除那些曾经有 owner,后来又不再有 owner 的对象。
垃圾收集器如何删除从属对象
当删除某个对象时,可以指定该对象的从属对象是否同时被自动删除,这种操作叫做级联删除(cascading deletion)。级联删除有两种模式:后台(background)和前台(foreground)
如果删除对象时不删除自动删除其从属对象,此时,从属对象被认为是孤儿(或孤立的 orphaned)
通过参数 --cascade,kubectl delete 命令也可以选择不同的级联删除策略:
-  
--cascade=true 级联删除
 -  
--cascade=false 不级联删除 orphan
 
#删除rs,但不删除级联Pod
kubectl delete replicaset my-repset --cascade=false 
- 📢博客主页:https://lansonli.blog.csdn.net
 - 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
 - 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
 - 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
 










