当作业最近被删除时,“kubectl get pods -l job-name”将返回多个 pod

当作业最近被删除时,“kubectl get pods -l job-name”将返回多个 pod

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

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

kubectl get pods -l job-name=myjob --output=jsonpath='{.items[*].metadata.name}'

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

kubectl describe jobs/myjob显示正确的 pod 名称,我可以从那里的文本中解析它,这样我就可以获得最近启动的作业的唯一 pod 名称,但这似乎很不礼貌。

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

答案1

注意事项

工作名称:它们是为我们准备的!人类,kubernetes 反而根据标签或注释来跟踪子对象。在本例中,controller-uid

提取唯一 ID:快速实现此目的的方法,来自 kubectl 的 jsonpath。语法与 jq 相同,只需用 {} 包裹即可。jsonpath={.metadata.labels.controller-uid}

您始终可以尝试使用针对作业的 jsonpath 输出来获取 controller-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

希望这会有所帮助,祝你好运!

相关内容