Know Your Wisdom

K8S CronJob 基础示例

2022-04-09

有的时候需要单独运行某个程序后直接退出,可以用 job 来实现:

apiVersion: batch/v1
kind: Job
metadata:
  name: get-pi
spec:
  template:
    spec:
      containers:
      - name: get-pi
        image: debian:stable-slim
        command: ["sh", "-c", "sleep 10 && echo '3.1415926'"]
      restartPolicy: Never
  backoffLimit: 4
  activeDeadlineSeconds: 60

上面的代码启动了一个 job,在休眠 10 秒钟后打印 pi 的值。

>>> k logs jobs/get-pi
3.1415926

>>> k get jobs
NAME     COMPLETIONS   DURATION   AGE
get-pi   1/1           22s        23s

可以看看这个 job 具体的定义:

>>> k describe jobs/get-pi
Name:             get-pi
Namespace:        default
Selector:         controller-uid=2b9b1153-3f51-44ae-8771-5b29fab2db11
Labels:           controller-uid=2b9b1153-3f51-44ae-8771-5b29fab2db11
                  job-name=get-pi
...

每当创建 job 的时候,k8s 就会自动给该 job 赋予唯一的 label,同时将 selector 改为 label 的值。确保 controller 只会执行这一个 job。

另一些时候需要定时执行 job,可以使用 cronjob,下面是每分钟打印一次 pi 的例子:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: get-pi
spec:
  schedule: "*/1 * * * *"
  concurrencyPolicy: Forbid
  startingDeadlineSeconds: 200
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: get-pi
            image: debian:stable-slim
            command: ["sh", "-c", "sleep 10 && echo '3.1415926'"]
          restartPolicy: OnFailure
      backoffLimit: 4
      activeDeadlineSeconds: 60
      parallelism: 2
      completions: 4

然后创建该 cronjob:

>>> k get cronjobs
NAME     SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
get-pi   */1 * * * *   False     1        30s             4m21s

>>> k get pods 
NAME                    READY   STATUS      RESTARTS   AGE
cqhttp-0                1/1     Running     0          164m
cqhttp-1                1/1     Running     0          164m
cqhttp-2                1/1     Running     0          163m
get-pi-28040284-7zs6w   0/1     Completed   0          3m14s
get-pi-28040284-cvq9c   0/1     Completed   0          3m32s
get-pi-28040284-ll4n9   0/1     Completed   0          3m32s

>>> k logs get-pi-28040284-7zs6w 
3.1415926

Very nice!

Catalogue