一個節點有很多用于指標收集的資訊,例如在 cgroups kubepods.slice 下。但要完成指標,您必須將 pod 指標與 pod 名稱相關聯。名稱和命名空間本身是 pod 的一種靜態指標,因此它們與 pod uuid 一起是描述 pod 的首要條件。如何從不使用 kubectl 且不訪問遠程 kubernetes pod 資料庫的節點獲取此資訊?
我只能找到容器 id/pod uuid 作為 cgroup 結構的一部分.. 名稱和命名空間在哪里?(理想情況下是整個 yaml 清單,將它存盤在運行 pod 的節點上并不難,對吧?)
如果它沒有這個資訊 - 為什么?這違反了收集實踐,您不能將檢測作為收集 pod 指標的單個程式進行 - 您將需要外部行程來對這些指標進行后處理,將 uuid 與 pod 名稱和命名空間對應起來,這絕對不是正確的方法,當您可以在節點本身上運行 1 個小程式
uj5u.com熱心網友回復:
您可以使用docker檢查:
docker inspect <container-id> --format='{{index .Config.Labels "io.kubernetes.pod.name"}
docker inspect <container-id> --format='{{index .Config.Labels "io.kubernetes.pod.namespace"}}'
以下命令將列出節點上運行的所有 pod 及其命名空間。您可以使用 docker 的資料目錄來維護 pod 資訊。
find /var/lib/docker -name config.v2.json -exec perl -lnpe 's/.*pod\.name"*\s*:\s*"*([^"] ).*pod\.namespace"*\s*:\s*"*([^"] ).*/pod-name=$1 pod-namespace=$2/g' {} |awk '!a[$0] '|column -t
例子:
find /var/lib/docker -name config.v2.json -exec perl -lnpe 's/.*pod\.name"*\s*:\s*"*([^"] ).*pod\.namespace"*\s*:\s*"*([^"] ).*/pod-name=$1 pod-namespace=$2/g' {} |awk '!a[$0] '|column -t
pod-name=huha pod-namespace=foo
pod-name=zoobar1 pod-namespace=default
pod-name=kube-proxy-l2hsb pod-namespace=kube-system
pod-name=weave-net-rbbwf pod-namespace=kube-system
pod-name=zoobar2 pod-namespace=default
IMO,決議可以用 完成jq,我在regex這里使用來展示使用 docker data dir 獲取這些值的可能性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331136.html
標籤:Kubernetes 克里欧
