`kubectl get pods -l job-name` 在最近删除作业时返回多个 Pod

dav*_*s21 1 kubernetes

我正在运行一个 kubernetes 作业,删除它,然后快速连续地重新启动它。

我正在使用以下命令获取与我的工作相关的 pod,以便我可以运行kubectl logs $POD.

kubectl get pods -l job-name=myjob --output=jsonpath='{.items[*].metadata.name}'
Run Code Online (Sandbox Code Playgroud)

但是在删除作业后,上述命令会返回两个 Pod,一个尚未删除,另一个是新的。

kubectl describe jobs/myjob 显示正确的 pod 名称,我可以从那里的文本中解析它,以便我获得最近开始的作业的唯一 pod 名称,但这似乎很糟糕。

有没有更好的方法可以从特定作业中获取 pod 名称?

dar*_*agn 5

通知事项

工作名称:它们是给我们的!人类,kubernetes 而是根据标签或注释跟踪子对象。在这种情况下,控制器 uid

提取唯一 ID:快速的方法,来自 kubectl 的 jsonpath。与 jq 的语法相同,只需将其包裹在 {} 中。jsonpath={.metadata.labels.controller-uid}

您始终可以尝试针对作业使用 jsonpath 输出来获取控制器 uid。这应该与单个 pod 唯一匹配,因为它是在创建作业时生成的,即使作业具有相同的名称。例子:

例子

kubectl get po -l controller-uid=`kubectl get job $JOBNAME -o "jsonpath={.metadata.labels.controller-uid}"`



### Or for an unembedded way
JOBUUID=$(kubectl get job $JOBNAME -o "jsonpath={.metadata.labels.controller-uid}")
PODNAME=$(kubectl get po -l controller-uid=$JOBUUID -o name)

kubectl logs $PODNAME
Run Code Online (Sandbox Code Playgroud)

希望能帮到你,祝你好运!