我最近开始使用 kubernetes 工作,目前正在尝试了解工作流程。
所以我从官方文档中获取第一个例子https://kubernetes.io/docs/concepts/workloads/controllers/job/:
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
并应用它
kubectl apply -f https://kubernetes.io/examples/controllers/job.yaml
那我在等作业完成:
kubectl wait --for=condition=complete job/pi
然后检查 pod 的状态(为了可读性省略不重要的人员):
kubectl describe pod
Name: pi-jm9hw
Namespace: pi-job
Start Time: Sat, 15 Apr 2023 10:54:09 +0400
.....
Containers:
pi:
.....
State: Terminated
Reason: Completed
Exit Code: 0
Started: Sat, 15 Apr 2023 10:54:21 +0400
Finished: Sat, 15 Apr 2023 10:54:25 +0400
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 84s default-scheduler Successfully assigned pi-job/pi-jm9hw to gke-apps-dev-default-pool-a3ff2d21-l4gc
Normal Pulling 84s kubelet Pulling image "perl:5.34.0"
Normal Pulled 72s kubelet Successfully pulled image "perl:5.34.0" in 11.465562943s
Normal Created 72s kubelet Created container pi
Normal Started 72s kubelet Started container pi
这是工作的状态:
kubectl describe job
Name: pi
Namespace: pi-job
....
Start Time: Sat, 15 Apr 2023 10:54:09 +0400
Completed At: Sat, 15 Apr 2023 10:54:31 +0400
Duration: 22s
Pods Statuses: 0 Active (0 Ready) / 1 Succeeded / 0 Failed
.....
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 3m5s job-controller Created pod: pi-jm9hw
Normal Completed 2m43s job-controller Job completed
我不明白的是,为什么作业的完成状态和作业的完成状态之间存在这样的滞后。
因此:
播客10:54:21开始,10:54:25结束,4秒完成。
作业的状态在 10:54:31 更改为已完成,在 Pod 完成后的 6 秒内。
因此,作业的延迟(pod 完成和作业完成之间的时间)是 pod 工作时间本身的 1.5 倍,这对我的口味和我目前正在开发的应用程序来说太大了。
所以,我的问题是:作业在等待什么,为什么它在作业后没有立即完成。
附言我已经测试并拒绝的假设:
describe
命令显示更多的时间来完成。我已经测试了不同的工作(busybox
图像与sleep 5
命令)。 Pod 只需 5 秒即可完成,工作 - 大约 8-10 秒。completed at
日期之前完成。错误的假设,因为 kubectl wait
命令等待全部时间,即 pod 完成后额外 3-5 秒。docker-desktop
,vps 上的k3s
,gcp
结果总是一样的 - 几秒钟的延迟。controller 负责在创建 Job 时创建 Pod 对象,并在 Pod 完成时更新 Job。
您可以尝试提高 Kubernetes 集群的性能