CronJob pod 即使删除后也会永远重复挂起

问题描述 投票:0回答:1

我最近一直在 GKE 上学习 Kubernetes。 我正在测试 CronJob,但我遇到了那里的行为问题。

以下是节点池、cron 作业设置的概述。

node-pool: 1 node (remaining allocable memory is 1Gi)
cronjob: Simple busybox cron for test

所以,首先,我要求cronjob的requests内存超过节点允许的内存量。 应用此后,当然 pod 无法调度并进入

pending
状态。

requests:
  memory: 5Gi ## (unbelievable amount !!)

然后将请求修复为合理的值并应用,删除挂起的 pod!

requests:
  memory: 10Mi ## (looks good !!)

但问题就在这里。

即使删除了 pod,也会立即创建继承之前(5Gi 内存请求)配置的 pod,并再次变为待处理状态。

删除 CronJob 本身可以解决问题,但是有没有办法修改 pod 本身或者有其他聪明的方法来做到这一点?

预计

如果删除了 pod,则下一个生成的 pod 应该应用最新的 yaml 设置。 同样奇怪的是,当删除 pod 时,CronJob 会立即尝试生成具有相同设置的 pod。 我想知道为什么以及有什么好的解决方案。

我的 cron 作业 yaml

apiVersion: batch/v1
kind: CronJob
metadata:
  name: example-job
  namespace: default
spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-nodepool: example-node-pool
          containers:
            - name: hello-world
              image: busybox
              resources:
                requests:
                  memory: 5Gi # fixed to 10Mi
              command:
                [
                  "/bin/sh",
                  "-c",
                  "echo 'Hello, World!'"
                ]
          restartPolicy: Never

截图

kubernetes google-kubernetes-engine kubernetes-cronjob
1个回答
0
投票

此设置中有一个中间层。 CronJob 并不直接创建 Pod;而是直接创建 Pod。相反,CronJob 会定期创建 Job 对象,并且 Job 负责创建 Pod。如果更改 CronJob,它根本不会更改现有的 Job。

因此,在您的示例中,CronJob 可能创建了一个作业

example-job-1710681600
。那份工作本身是一成不变的。如果您删除相应的 Pod,作业将按照作业中嵌入的 Pod 规范重新创建它。

如果删除Job,它不会被重新创建(它的时间已经过去),但它也会删除相应的Pod。下次计划运行 CronJob 时,您将获得一个新作业,遵循更新的 CronJob 中嵌入的新作业模板。

© www.soinside.com 2019 - 2024. All rights reserved.