k8s_用CronJob控制器实现定期任务举例

在Kubernetes中,Job是用于一次性任务的控制器,而CronJob是用于定期执行任务的控制器。要定期运行多个Pod任务并设置任务完成时间,我们可以使用CronJob。以下是一个示例,展示如何配置一个定期运行的CronJob,该CronJob会运行多个Pod任务,并设置任务的完成时间限制。

CronJob 示例

以下示例展示了一个CronJob,它每小时运行一次任务,任务运行的Pod最多可以执行5分钟(300秒),之后会被终止。

CronJob YAML 文件
apiVersion: batch/v1
kind: CronJob
metadata:
  name: my-cronjob
spec:
  schedule: "0 * * * *"  # 每小时运行一次
  jobTemplate:
    spec:
      completions: 3  # 任务完成所需的Pod数
      parallelism: 3  # 并行运行的Pod数
      activeDeadlineSeconds: 300  # 每个任务最多执行300秒(5分钟)
      template:
        metadata:
          labels:
            app: my-cronjob
        spec:
          containers:
          - name: my-task
            image: busybox
            args:
            - /bin/sh
            - -c
            - "echo Hello, Kubernetes! && sleep 120"  # 模拟任务运行时间
          restartPolicy: OnFailure  # Pod失败时重启策略

解释

  1. apiVersion 和 kind

    • apiVersion: batch/v1:指定使用的Kubernetes API版本。
    • kind: CronJob:声明资源类型为CronJob
  2. metadata

    • name: my-cronjobCronJob的名称。
  3. spec

    • schedule: "0 * * * *":任务调度的时间表达式,表示每小时的第0分钟运行一次任务。
    • jobTemplate:定义任务的模板。
      • completions: 3:指定任务需要成功完成3次。
      • parallelism: 3:指定任务可以并行运行的Pod数量。
      • activeDeadlineSeconds: 300:每个任务最多执行300秒(5分钟),超过时间将被终止。
      • template:定义Pod模板。
        • metadata
          • labels:Pod的标签。
        • spec
          • containers:定义容器列表。
            • name: my-task:容器名称。
            • image: busybox:使用busybox镜像。
            • args:指定容器的运行命令。
              • echo Hello, Kubernetes! && sleep 120:打印信息并模拟任务运行120秒。
          • restartPolicy: OnFailure:指定Pod失败时的重启策略,设置为OnFailure表示任务失败时会重启Pod。

部署和验证

  1. 部署CronJob
    将上述YAML文件保存为my-cronjob.yaml,然后使用以下命令创建CronJob

    kubectl apply -f my-cronjob.yaml
    
  2. 查看CronJob状态
    运行以下命令查看CronJob的状态和运行的Job:

    kubectl get cronjob my-cronjob
    kubectl get jobs
    
  3. 查看Pod日志
    找到由Job创建的Pod,查看其日志:

    kubectl get pods
    kubectl logs <pod-name>
    

这个示例展示了如何使用CronJob定期运行多个Pod任务,并设置任务完成时间。根据需要,您可以调整调度时间、并行运行的Pod数、任务完成所需的Pod数和最大执行时间。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-14 17:24:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-14 17:24:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-14 17:24:07       87 阅读
  4. Python语言-面向对象

    2024-06-14 17:24:07       96 阅读

热门阅读

  1. 【Go语言】Go语言中的接口类型

    2024-06-14 17:24:07       37 阅读
  2. 【Flutter】路由组件的应用 (学习记录)

    2024-06-14 17:24:07       30 阅读
  3. Spring Boot中使用logback出现LOG_PATH_IS_UNDEFINED文件夹

    2024-06-14 17:24:07       33 阅读
  4. 数值类型==和equals别用错

    2024-06-14 17:24:07       41 阅读
  5. Qt QMake指南(如何写pro文件)

    2024-06-14 17:24:07       84 阅读
  6. Rabbit MQ和Kafka的区别

    2024-06-14 17:24:07       30 阅读
  7. Kafka基础架构与核心概念?有哪些应用场景?

    2024-06-14 17:24:07       32 阅读
  8. Kafka之ISR机制的理解

    2024-06-14 17:24:07       29 阅读
  9. 10.GLM

    10.GLM

    2024-06-14 17:24:07      33 阅读
  10. Golang-goroutine互斥锁与读写互斥锁

    2024-06-14 17:24:07       31 阅读
  11. 多商家抽奖管理系统介绍和小程序APP演示

    2024-06-14 17:24:07       35 阅读