如何在Kubernetes指定命名空间中查询带有initContainers的Pod
问题原因
你之前两个命令失效的根因如下:
- 反向查询无返回:你查询时使用的
status.containerStatuses是普通业务容器的状态字段,init容器的状态存储在status.initContainerStatuses中,字段不匹配导致无命中结果。 - custom-columns无输出:Kubernetes API字段大小写敏感,
spec.initContainers首字母为小写i,你填写的大写InitContainers无法匹配到对应字段,因此输出为空。
解决方案
1. 筛选指定命名空间下所有携带initContainers的Pod名称
kubectl get pods -n test -o jsonpath='{range .items[?(@.spec.initContainers != null)]}{.metadata.name}{"\n"}{end}'
2. 同时输出Pod名称+对应init容器名称
kubectl get pods -n test -o custom-columns='POD_NAME:.metadata.name,INIT_CONTAINERS:.spec.initContainers[*].name' --no-headers
3. 额外筛选「脱离控制器的独立Pod」(即无Deployment/StatefulSet等上层控制器管理的Pod)
kubectl get pods -n test -o jsonpath='{range .items[?(@.spec.initContainers != null && @.metadata.ownerReferences == null)]}{.metadata.name}{"\n"}{end}'
4. 导出符合条件的Pod完整清单
kubectl get pods -n test -o jsonpath='{range .items[?(@.spec.initContainers != null && @.metadata.ownerReferences == null)]}{.}{"\n---\n"}{end}' > abnormal-pods.yaml
如果需要自定义输出其他字段(比如Pod IP、创建时间等),只需要在jsonpath或者custom-columns的字段映射里加对应API字段即可。
内容的提问来源于stack exchange,提问作者sickb0y
相关产品推荐
相关产品推荐

