Kubernetes Cron Job 在创建下一个计划之前终止 Pod

use*_*835 6 yaml google-cloud-platform kubernetes google-kubernetes-engine

我有一个 Kubernetes Cron Job 每 5 分钟运行一次计划任务。我想确保在下一个计划时间创建新的 pod 时,较早的 pod 应该已终止。较早的 Pod 应在创建新 Pod 之前终止。Kubernetes 可以在创建新的 pod 之前终止较早的 pod 吗?

我的yaml是:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-scheduled
spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cmm-callout
            env:
              - name: SCHEDULED
                value: "true"
            livenessProbe:
              httpGet:
                path: /myapp/status
                port: 7070
                scheme: HTTPS
              initialDelaySeconds: 120
              timeoutSeconds: 30
              periodSeconds: 120                
            image: gcr.io/projectid/folder/my-app:9.0.8000.34
          restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

如何确保在创建新 Pod 之前终止较早的 Pod?

Mar*_*ark 10

如果我正确理解你的情况(早期的 Pod 应该在创建新的 Pod 之前终止)。

1 . 请改用spec.jobTemplate.spec.activeDeadlineSeconds

通过设置此参数,一旦作业达到activeDeadlineSeconds - 所有正在运行的 Pod 将被终止,并且作业状态将变为类型:失败,原因为 DeadlineExceeded。

例子:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      activeDeadlineSeconds: 60
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster && sleep 420
          restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

2 . 第二种解决方案是设置concurrencyPolicy。并将当前正在运行的作业替换为新作业。

例子:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/2 * * * *"
  concurrencyPolicy: Replace
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster && sleep 420
          restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

资源:


Han*_* Du 2

您是否尝试将 concurrencyPolicy 设置为 Replace?禁止意味着如果前一个作业尚未完成,则跳过新作业运行。

\n\n

https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#concurrency-policy

\n\n

允许(默认):cron 作业允许同时运行作业

\n\n

Forbid:cron作业不允许并发运行;如果到了运行新作业的时间,并且上一个作业运行尚未完成,则 cron 作业将跳过新作业运行

\n\n

替换:如果到了运行新作业的时间,并且之前的作业运行尚未完成,则 cron 作业将用新的作业运行替换当前正在运行的作业运行

\n