列出叢集中執行的所有容器映像檔

本頁面說明如何使用 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 的更多資訊。
  • 使用標準工具格式化輸出:trsortuniq
    • 使用 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 列出容器映像檔

可以使用 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}}"

接下來

參考

最後修改時間:2023 年 6 月 19 日下午 3:16 PST:Update list-all-running-container-images.md (512b71177c)