K8S的pod展示鏡像信息


https://kubernetes.io/zh/docs/tasks/access-application-cluster/list-all-running-container-images/

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

 

列出集群中所有運行容器的鏡像

本文展示如何使用 kubectl 來列出集群中所有運行 Pod 的容器的鏡像

准備開始

 

你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節點的集群上運行本教程,且這些節點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構建:

要獲知版本信息,請輸入 kubectl version.

 

在本練習中,你將使用 kubectl 來獲取集群中運行的所有 Pod,並格式化輸出來提取每個 Pod 中的容器列表。

列出所有命名空間下的所有容器

  • 使用 kubectl get pods --all-namespaces 獲取所有命名空間下的所有 Pod
  • 使用 -o jsonpath={.items[*].spec.containers[*].image} 來格式化輸出,以僅包含容器鏡像名稱。 這將以遞歸方式從返回的 json 中解析出 image 字段。
    • 參閱 jsonpath 說明 獲取更多關於如何使用 jsonpath 的信息。
  • 使用標准化工具來格式化輸出:trsortuniq
    • 使用 tr 以用換行符替換空格
    • 使用 sort 來對結果進行排序
    • 使用 uniq 來聚合鏡像計數
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c

上面的命令將遞歸獲取所有返回項目的名為 image 的字段。

作為替代方案,可以使用 Pod 的鏡像字段的絕對路徑。這確保即使字段名稱重復的情況下也能檢索到正確的字段,例如,特定項目中的許多字段都稱為 name

kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}"

jsonpath 解釋如下:

  • .items[*]: 對於每個返回的值
  • .spec: 獲取 spec
  • .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}}"


免責聲明!

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



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