列出叢集中執行的所有容器映象
本頁面展示如何使用 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)