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

東風夜放二叉樹發表於2020-12-24

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

  • 使用 kubectl get pods --all-namespaces 獲取所有名稱空間下的所有 Pod
  • 使用 -o jsonpath={..image} 來格式化輸出,以僅包含容器映象名稱。 這將以遞迴方式從返回的 json 中解析出 image 欄位。
    • 參閱 jsonpath 說明 獲取更多關於如何使用 jsonpath 的資訊。
  • 使用標準化工具來格式化輸出:tr, sort, uniq
    • 使用 tr 以用換行符替換空格
    • 使用 sort 來對結果進行排序
    • 使用 uniq 來聚合映象計數
#遞迴獲取所有返回專案的名為image的欄位
kubectl get pods --all-namespaces -o jsonpath="{..image}" |
tr -s '[[:space:]]' '\n' |
sort |
uniq -c

作為替代方案,可以使用 Pod 的映象欄位的絕對路徑。這確保即使欄位名稱重複的情況下也能檢索到正確的欄位,例如,特定專案中的許多欄位都稱為 name:

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

jsonpath 解釋如下:

  • .items[*]: 對於每個返回的值
  • .spec: 獲取 spec
  • .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="{..image}" -l <label.feild=what't yours>

列出以名稱空間過濾後的 Pod 的所有容器

要獲取匹配特定名稱空間的 Pod,請使用 namespace 引數。以下僅匹配 kube-system 名稱空間下的 Pod。

kubectl get pods --namespace <namespace> -o jsonpath="{..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}}"
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章