自学内容网 自学内容网

K8S中Pod控制器之Job控制器

Job,主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。

  • 一次性任务:Job 用于运行那些只需要执行一次的任务,如数据分析、图像渲染或批量处理。

  • 成功终止:Job 会跟踪其创建的 Pod 的成功完成(成功退出,退出状态为 0)的数量。

  • 指定完成数量:Job 有一个目标完成数量,当成功结束的 Pod 数量达到这个指定的数量时,Job 就会完成。

  • 并行处理:Job 可以配置并行性,即同时运行多个 Pod 来加速处理过程。Kubernetes 会尝试以最大并行数启动 Pod,直到达到所需的成功完成 Pod 的数量。

  • 重启策略:Job 的重启策略通常设置为 OnFailure,这意味着如果 Pod 失败(非零退出状态),它将被重启。

  • 自动清理:一旦 Job 完成,即成功结束的 Pod 数量达到指定的目标,Kubernetes 将自动清理与该 Job 相关的所有资源。

  • 回退机制:如果 Pod 由于某种原因(如节点故障)未能成功完成,Job 可以配置以重新创建并启动新的 Pod 来替换失败的 Pod。

  • 监控和日志:Job 可以与 Kubernetes 的日志和监控系统集成,以便于跟踪作业的执行状态和历史。

Job的资源清单文件

---
apiVersion: batch/v1 # 版本号
kind: Job # 类型
metadata: # 元数据
  name: # rs名称
  namespace: # 所属命名空间
  labels: # 标签
    controller: job
spec: # 详情描述
  completions: 1 # 指定job需要成功运行Pods的次数。默认值: 1
  parallelism: 1 # 指定job在任一时刻应该并发运行Pods的数量。默认值: 1
  activeDeadlineSeconds: 30 # 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。
  backoffLimit: 6 # 指定job失败后进行重试的次数。默认是6
  manualSelector: true # 是否可以使用selector选择器选择pod,默认是false
  selector: # 选择器,通过它指定该控制器管理哪些pod
    matchLabels: # Labels匹配规则
      app: counter-pod
    matchExpressions: # Expressions匹配规则
      - key: app
        operator: In
        values: [counter-pod]
  template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
      labels:
        app: counter-pod
    spec:
      restartPolicy: Never # 重启策略只能设置为Never或者OnFailure
      containers:
      - name: counter
        image: busybox:1.30
        command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"]

 

在 Kubernetes 中,Job 控制器的重启策略与 Pod 的重启策略是不同的。Job 本身并不控制容器的重启,而是控制着生成新 Pod 的行为。以下是 Job 控制器与重启策略相关的正确说明:

  • OnFailure:这是 Job 的默认重启策略。当 Pod 由于容器故障而失败时(比如退出状态非零),Job 会认为这是一个失败,失败次数会增加,并且 Job 会创建一个新的 Pod 来替换失败的 Pod。这意味着任务会重试,直到成功完成。

  • Never:如果将重启策略设置为 Never,当 Pod 失败时,Job 不会创建新的 Pod 来替换它,失败的 Pod 将保留在系统中,并且失败次数会增加。这种策略通常用于调试,以便可以检查失败的 Pod 的状态和日志。

  • Always:这个选项对于 Pod 的重启策略是有意义的,但对于 Job 控制器来说,并不适用。Job 控制器不负责重启容器,它负责的是生成新的 Pod。如果 Pod 的重启策略设置为 Always,无论何时容器退出,Kubernetes 都会重启该容器,而与 Job 控制器无关。

创建Job控制器

^C[root@k8s-master ~]# cat pc-job.yaml 
---
apiVersion: batch/v1
kind: Job
metadata:
  name: pc-job
  namespace: test
spec:
  manualSelector: true
  selector:
    matchLabels:
      app: counter-pod  # 确保这个与 template 中的 labels 匹配
  template:
    metadata:
      labels:
        app: counter-pod  # 这里的 labels 需要与 selector 的 matchLabels 对应
    spec:
      restartPolicy: Never
      containers:
      - name: counter
        image: busybox:1.30
        command: ["/bin/sh", "-c", "for i in 9 8 7 6 5 4 3 2 1; do echo $i; sleep 3; done"]
[root@k8s-master ~]# 

查看job

[root@k8s-master ~]# kubectl get job -n test -o wide -w
NAME     COMPLETIONS   DURATION   AGE   CONTAINERS   IMAGES         SELECTOR
pc-job   0/1           2s         2s    counter      busybox:1.30   app=counter-pod
pc-job   1/1           43s        43s   counter      busybox:1.30   app=counter-pod

查看pod

可以看的pod在启动成功之后就变为completed状态

[root@k8s-master ~]# kubectl get pods -n test -w
NAME                 READY   STATUS    RESTARTS   AGE
pc-daemonset-9vwvd   1/1     Running   0          24m
pc-daemonset-drdt5   1/1     Running   0          24m
pc-job-dhgqw         1/1     Running   0          41s
pc-job-dhgqw         0/1     Completed   0          43s
pc-job-dhgqw         0/1     Completed   0          43s

 


原文地址:https://blog.csdn.net/m0_66011019/article/details/145266739

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!