查看集群中的容器鏡像


前提條件

  • 您必須有一個K8S集群
  • 在執行 kubectl 命令的機器上任意位置創建一個空白目錄用於本例子的執行。本文假設后續所有命令的當前目錄都是此時創建的這個目錄。

# 查看所有名稱空間總的容器

  • 執行命令,獲取所有名稱空間中的所有 Pod

    kubectl get pods --all-namespaces    
    

使用 -o jsonpath={..image} 參數,輸出結果將格式化為只包含容器鏡像名字的形式。該參數將遞歸地查找 JSON 數據中所有 image 字段,例如:

kubectl get pods --all-namespaces -o jsonpath={..image}

參考 jsonpath reference

  • 了解如何使用 jsonpath

使用工具 trsortuniq 格式化輸出結果

  • 使用 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

注意

如果通過名字查找 Pod,例如 kubectl get pod nginx,由於返回結果只有一個 Pod,此時,.items[*] 這一部分應該從 jsonpath 中移除。

# 按Pod查找容器

輸出結果可以通過 rannge 操作遍歷

kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' | sort

# 按Pod的label查找容器

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

# 使用go-template羅列容器

除了 jsonpath 之外,kubectl 支持使用 go-template

格式化輸出結果:

kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM