为什么 kubernetes pod 完成和作业完成状态之间有这么大的延迟

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

我最近开始使用 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 倍,这对我的口味和我目前正在开发的应用程序来说太大了。

所以,我的问题是:作业在等待什么,为什么它在作业后没有立即完成。

附言我已经测试并拒绝的假设:

  1. pod 运行需要比
    describe
    命令显示更多的时间来完成。我已经测试了不同的工作(
    busybox
    图像与
    sleep 5
    命令)。 Pod 只需 5 秒即可完成,工作 - 大约 8-10 秒。
  2. 工作在官方
    completed at
    日期之前完成。错误的假设,因为
    kubectl wait
    命令等待全部时间,即 pod 完成后额外 3-5 秒。
  3. 问题出在我的 kubernetes 集群上。我已经在不同的集群上尝试过这个流程:
    docker-desktop
    ,vps 上的
    k3s
    gcp
    结果总是一样的 - 几秒钟的延迟。
kubernetes jobs
1个回答
0
投票

controller 负责在创建 Job 时创建 Pod 对象,并在 Pod 完成时更新 Job。

您可以尝试提高 Kubernetes 集群的性能

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