创建定时任务CronJob

通过Fleet实例,您可以像在单个集群上一样,使用相同的方式创建定时任务CronJob。Fleet实例负责时间调度,生成任务Job,进而调度到关联的集群上运行。本文介绍如何在Fleet实例中创建定时任务CronJob。

前提条件

背景信息

定时任务CronJob用于创建周期性以及重复性的任务,例如执行备份操作或者发送邮件。任务Job负责批量处理短暂的一次性任务,即仅执行一次的任务,而CronJob则是在Job基础上增加了时间调度。

操作步骤

  1. 开发者用户使用以下YAML文件,在Fleet实例上创建定时任务CronJob。

    示例的命名空间为demo,示例的任务为hello

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: hello
      namespace: demo
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox
                imagePullPolicy: IfNotPresent
                command:
                - /bin/sh
                - -c
                - date; echo Hello from the Kubernetes cluster
              restartPolicy: OnFailure
  2. 等待1分钟后,执行以下命令,获取定时任务CronJob的状态。

    kubectl get cronjob -n demo

    预期输出:

    NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    hello   */1 * * * *   False     1        6s              2m1s
  3. 查看任务Job的状态。

    • 执行以下命令,查看任务的状态。

      kubectl get job -n demo

      预期输出:

      NAME               COMPLETIONS   DURATION   AGE
      hello-1634194320   1/1           1s         75s
      hello-1634194380   1/1           1s         15s
    • 执行以下命令,在Fleet实例上查看任务的调度结果。

      kubectl get job hello-1634194320 -n demo -o jsonpath='{.metadata.annotations.scheduling\.x-k8s\.io/placement}'
    • 执行以下命令,查看任务相关Pod的运行状态。

      kubectl amc get pod -j job/hello-1634194320 -n demo

      预期输出:

      Run on ManagedCluster managedcluster-c1xxxe5
      NAME                     READY   STATUS      RESTARTS   AGE
      hello-1634194320-dvrgx   0/1     Completed   0          115s
      hello-1634194380-7qjm2   0/1     Completed   0          55s
    • 执行以下命令,查看Pod的运行日志。

      kubectl amc logs hello-1634194320-dvrgx -j job/hello-1634194320 -n demo

      预期输出:

      Run on ManagedCluster managedcluster-c1xxxe5
      Thu Oct 14 06:52:08 UTC 2021
      Hello from the Kubernetes cluster