列出叢集中執行的所有容器映像檔
本頁面說明如何使用 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,請使用命名空間旗標。以下範例僅比對 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}}"
接下來
參考
- Jsonpath 參考指南
- Go template 參考指南
最後修改時間:2023 年 6 月 19 日下午 3:16 PST:Update list-all-running-container-images.md (512b71177c)