learning/k8s-practice/admin/list-images.md
本文描述了如何使用 kubectl 查看集群中的容器镜像。
[[TOC]]
</AdSenseTitle>执行命令,获取所有名称空间中的所有 Pod
kubectl get pods --all-namespaces
使用 -o jsonpath={..image} 参数,输出结果将格式化为只包含容器镜像名字的形式。该参数将递归地查找 JSON 数据中所有 image 字段,例如:
kubectl get pods --all-namespaces -o jsonpath={..image}
使用工具 tr、sort、uniq 格式化输出结果
tr 将空格替换为新的行sort 对结果排序uniq 对镜像使用计数kubectl get pods --all-namespaces -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
此命令将递归返回所有 image 字段。
此外,也可以用 Pod 中 image 字段的绝对路径来查找容器的镜像名字,可以规避 image 字段重复出现的情况。
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}"
Jsonpath 的解析如下:
.items[*]:每一个返回值.spec: 获取 spec.containers[*]: 每一个 container.image:获取 image::: tip 注意
如果通过名字查找 Pod,例如 kubectl get pod nginx,由于返回结果只有一个 Pod,此时,.items[*] 这一部分应该从 jsonpath 中移除。
:::
输出结果可以通过 rannge 操作遍历
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
使用 -l 参数,可以查找指定标签的 Pod,下面的例子中只查找带有 app=nginx 标签的 Pod:
kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=nginx
使用 --namespace 参数,可以查找指定名称空间下的 Pod,下面的例子只查找 kube-system 名称空间中的 Pod:
kubectl get pods --namespace kube-system -o jsonpath="{..image}"
除了 jsonpath 之外,kubectl 支持使用 go-template 格式化输出结果:
kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"