如何从go模板的输出中省略终止pod



在我目前工作的一个项目上,我遇到了一个问题,我需要从所有带有kubectl get pods -o go-template的pod中获得容器版本。然后我在代码中发现了一个与终止pod相关的bug——在新部署完成的短时间内,有两个不同的pod版本,我需要将它们过滤掉:

kubectl get pods -o go-template --template '{{ range .items }}{{"n"}}{{ .metadata.name }}{{" - "}}{{ range .spec.containers }}{{ .image }}{{" "}}{{ end }}{{ end }}

我发现了一些关于如何省略终止pod的信息,但在大多数情况下,它是简单的grep -v,这在使用go-template输出时是不合适的。

如何省略go-template终止的pod ?

主要问题是Kubernetes本身不支持Terminatingpod阶段。它计算它(参见代码)—特别是如果设置了字段DeletionTimestamp,那么pod通常处于终止状态。因此,这是一个技巧:

kubectl get pods -o go-template --template '{{ range .items }}{{if not .metadata.deletionTimestamp }}{{"n"}}{{ .metadata.name }}{{":: "}}{{ range .spec.containers }}{{ .image }}{{" "}}{{ end }}{{ end }}{{ end }}

最新更新