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)
创建如下示例的工作:
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)