Kubernetes 作业已创建但不会立即执行

Kubernetes jobs are created but not executed immediately

创建如下示例的工作:

apiVersion: batch/v1
kind: Job
metadata:
  name: test-job-sebas
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

导致正在创建作业资源,但未观察到 pod 或事件。 Pod状态如下:

Pods Statuses: 1 Running / 0 Succeeded / 0 Failed

唯一可见的事件是创建成功的 pod 的通知。问题是消息仅在 30 分钟的完全静音后才会出现。

Normal SuccessfulCreate 21m job-controller Created pod: test-job-sebas-882bh

从我们观察到 kube-apiserver 日志允许作业资源的“创建”动词开始,我们无法在任何其他 pods 中发现任何其他日志(controllers/schedulers/apiserver) 有文本“test-job-sebas”,直到大约 30 分钟后 kube-controller-manager 记录以下内容。

Event occurred" object="test-namespace/job-test-01" kind="Job" apiVersion="batch/v1" type="Normal" reason="SuccessfulCreate" message="Created pod: test-job-sebas-882bh"

这个集群中的任何作业都会发生这种情况,无论是哪个命名空间或作业的性质,如果它来自 CronJob 或者它是否像此处示例中提供的那样显式创建。

查看代码不会对我们提出任何明显的怀疑,指出可能发生的事情:https://github.com/kubernetes/kubernetes/blob/b5b0cc8bb88fb678c9b065c8da4f4c06a155a628/pkg/controller/job/job_controller.go

edit:我们目前在集群中有大约 15.000 个作业,其中大多数作业似乎都处于活动状态,仅来自一个命名空间。这会让我们认为我们正在达到某个极限或达到某种饱和……但我们无法通过任何可见数据证实这一点。

这听起来与我遇到的 webhook 行为异常时遇到的情况非常相似。

如果您有大量工作都显示为有效,但没有 pods 出现,或者 pods 花了很长时间才出现,那么这表明 admission webhook 干扰了pod 的创建。如果它是受影响的 cronjob,您将获得“滚雪球”效应:

撰写:https://blenderfox.com/2020/08/07/the-snowball-effect-in-kubernetes/

Kubernetes 问题:https://github.com/kubernetes/kubernetes/issues/93783

至于解决你的问题,你需要找出是什么干扰了创建(在我们的例子中,我们有一个 up9 webhook 行为不当。禁用它允许创建 pods)