如何通过go-template过滤kubectl输出中终止状态的Pod
仅用Go-template过滤终止状态Pod的实现方法
Kubernetes里处于Terminating(终止中)状态的Pod,.metadata.deletionTimestamp字段一定为非空值,只要在遍历Pod列表时增加一层空值判断,跳过该字段非空的实例,就能实现过滤效果,无需依赖grep等外部管道命令。
修改后可直接使用的命令
kubectl get pods -o go-template --template '{{ range .items }}{{ if not .metadata.deletionTimestamp }}{{"\n"}}{{ .metadata.name }}{{" - "}}{{ range .spec.containers }}{{ .image }}{{" "}}{{ end }}{{ end }}{{ end }}'
逻辑说明
- 新增的
{{ if not .metadata.deletionTimestamp }}判断块,会自动排除所有已经收到终止信号、进入销毁流程的Pod,滚动发布的短时间窗口内,输出结果只会包含正常存活的Pod,不会混入正在终止的不同版本实例。 - 如果需要更严格的过滤,只输出正常运行的Pod,可以把判断条件替换为多条件联合判断:
该条件会同时排除终止中、Pending、Failed、Succeeded等非运行状态的Pod,结果更精准。{{ if and (not .metadata.deletionTimestamp) (eq .status.phase "Running") }}
内容的提问来源于stack exchange,提问作者Kostrahb
相关产品推荐
相关产品推荐

