列出集群中运行的所有容器镜像
本页面展示如何使用 kubectl 列出集群中正在运行的 Pod 的所有容器镜像。
准备工作
你需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用以下 Kubernetes 演练场之一
要检查版本,请输入 kubectl version
。
在本练习中,你将使用 kubectl 获取集群中所有正在运行的 Pod,并格式化输出以提取每个 Pod 的容器列表。
列出所有命名空间中的所有容器镜像
- 使用
kubectl get pods --all-namespaces
获取所有命名空间中的所有 Pod。 - 使用
-o jsonpath={.items[*].spec['initContainers', 'containers'][*].image}
格式化输出,使其仅包含容器镜像名称列表。这将递归解析返回 JSON 中的image
字段。- 有关如何使用 jsonpath 的更多信息,请参阅 jsonpath 参考。
- 使用标准工具格式化输出:
tr
、sort
、uniq
- 使用
tr
将空格替换为换行符 - 使用
sort
对结果进行排序 - 使用
uniq
汇总镜像计数
- 使用
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
jsonpath 的解释如下:
.items[*]
:对于每个返回的值.spec
:获取 spec['initContainers', 'containers'][*]
:对于每个容器.image
:获取镜像
注意
当按名称获取单个 Pod 时,例如kubectl get pod nginx
,路径中的 .items[*]
部分应省略,因为返回的是单个 Pod 而不是项目列表。按 Pod 列出容器镜像
可以通过使用 range
操作单独迭代元素来进一步控制格式。
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
按 Pod 标签过滤列出容器镜像
要仅定位与特定标签匹配的 Pod,请使用 -l 标志。以下仅匹配标签为 app=nginx
的 Pod。
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" -l app=nginx
按 Pod 命名空间过滤列出容器镜像
要仅定位特定命名空间中的 Pod,请使用 namespace 标志。以下仅匹配 kube-system
命名空间中的 Pod。
kubectl get pods --namespace kube-system -o jsonpath="{.items[*].spec.containers[*].image}"
使用 go-template 而不是 jsonpath 列出容器镜像
作为 jsonpath 的替代方案,Kubectl 支持使用 go-templates 格式化输出
kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"
下一步
参考
最后修改于 2023 年 6 月 19 日下午 3:16 PST:更新 list-all-running-container-images.md (512b71177c)