本文展示如何使用 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 字段。tr, sort, uniqtr 以用换行符替换空格sort 来对结果进行排序uniq 来聚合镜像计数kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
jsonpath 解释如下:
.items[*]: 对于每个返回的值.spec: 获取 spec['initContainers', 'containers'][*]: 对于每个容器.image: 获取镜像kubectl get pod nginx,路径的 .items[*] 部分应该省略,
因为返回的是一个 Pod 而不是一个项目列表。可以使用 range 操作进一步控制格式化,以单独操作每个元素。
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
要获取匹配特定标签的 Pod,请使用 -l 参数。以下匹配仅与标签 app=nginx 相符的 Pod。
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" -l app=nginx
要获取匹配特定命名空间的 Pod,请使用 namespace 参数。以下仅匹配 kube-system 命名空间下的 Pod。
kubectl get pods --namespace kube-system -o jsonpath="{.items[*].spec.containers[*].image}"
作为 jsonpath 的替代,Kubectl 支持使用 go-templates 来格式化输出:
kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"