Kubernetes 等待 pod/job

Kubernetes 等待 pod/job

推送后我想创建一个 kaniko 构建作业,它目前可以工作,但作业完成后会显示:

kaniko-5jbhf                  0/1     Completed   0          9m13s

然而,当我运行以下命令时它会无限期暂停:

kubectl wait --timeout=-1s --for=condition=Completed pod/kaniko

我的问题可以归纳为两个部分:1)。 如何等待 pod/job 完成?2)。 作业完成后如何删除它?

我已经尝试过 ttlSecondsAfterFinished 但是在集群中启用功能门控是有问题的并且没有如何操作的示例。

答案1

为了wait评估资源的状态,您需要正确识别它。对于第二个代码片段,您需要提供pod id而不是作业名称:kubectl wait --timeout=-1s --for=condition=Completed pod/kaniko-5jbhf。但是,将作业本身调用为 的语法似乎是正确的job/kaniko

供进一步参考wait

现在,对于Job删除,如果你不想使用功能门控,我认为你可以通过编程方式访问 API定位并删除完成的Jobs或使它们依赖于父对象,父对象会级联删除它们。具体来说,Jobs只有CronJobs。缺点是CronJobs按时间安排的对象,这意味着你需要开始设计基于时间的对象

考虑到根据设计,Jobs它们应该在完工后继续存在保存处理数据时发生的相关数据.此外,来自v1.12,它们也被设计为自我删除,这意味着启用这些功能门可能是实现您想要的最直接的方法。

答案2

无限期等待可能是由于使用了错误的条件名称造成的。我也遇到了同样的问题。我最终检查了源代码,得出了以下结论

$ kubectl wait --for=condition=Complete job/my-job

$ kubectl wait --for=condition=Failed job/my-job

正确的命名也可以如下找到:

$ kubectl explain job.status.conditions.type
KIND:     Job
VERSION:  batch/v1

FIELD:    type <string>

DESCRIPTION:
     Type of job condition, Complete or Failed.

答案3

如果需要等待 aJobCompletedFailed,可以执行以下操作:

kubectl wait --for=condition=ready pod --selector=job-name=YOUR_JOB_NAME --timeout=-1s
kubectl logs --follow job/YOUR_JOB_NAME

答案4

你不应该等待 Pod,等待适用于作业。我不确定这Completed是否应该是一个条件 -complete至少对我来说在本地似乎有效,所以应该是 kubectl wait --timeout=-1s --for=condition=complete job/${job_name}

除此之外,除非您想无限期地等待,否则请检查您是否指定了--timeout=-1s负一作为超时值。 kubectl wait将任何负超时参数视为“等待一周”。

来自 Kubernetes文档

    The length of time to wait before giving up. 
    Zero means check once and don't wait, negative means wait for a week.

相关内容