【问题标题】:jsonpath for nested arrays in kubectl getkubectl get 中嵌套数组的 jsonpath
【发布时间】:2022-11-16 08:53:55
【问题描述】:

我正在尝试获取 Kubernetes pod 的资源限制和请求。我试图输出到一个逗号分隔的行,其中列出了命名空间、pod 名称、容器名称,然后是每个容器的内存和 CPU 限制/请求。当每个 pod 有多个容器时会遇到问题。

我能得到的最接近的是这个,它将为每个 pod 打印一行。如果有多个容器,它们将列在同一行的单独“列”中。

kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{@.metadata.namespace}{","}{@.metadata.name}{","}{range .spec.containers[*]}{.name}{","}{@.resources.requests.cpu}{","}{@.resources.requests.memory}{","}{@.resources.limits.cpu}{","}{@.resources.limits.memory}{","}{end}{"\n"}{end}'

输出如下所示:

kube-system,metrics-server-5f8d84558d-g926z,metrics-server-vpa,5m,30Mi,100m,300Mi,metrics-server,46m,63Mi,46m,63Mi,

我想看到的是这样的:

kube-system,metrics-server-5f8d84558d-g926z,metrics-server-vpa,5m,30Mi,100m,300Mi,
kube-system,metrics-server-5f8d84558d-g926z,metrics-server,46m,63Mi,46m,63Mi,


感谢任何帮助。谢谢。

【问题讨论】:

    标签: kubectl jsonpath


    【解决方案1】:

    我认为您不能仅使用 kubectl 的(有限的)JSONPath。

    有一个 UNIX 原则,即每个工具都应该做好一件事:

    • kubectl 做 Kubernetes 的东西很好,可以输出 JSON
    • jq JSON 处理得很好。

    如果您愿意使用其他工具:

    FILTER='
      .items[]
      |.metadata as $meta
      |.spec.containers[]
      |.name as $name
      |.resources.requests as $requests
      |.resources.limits as $limits
      |[ 
         $meta.namespace,
         $meta.name,$name,
         $requests.cpu,
         $requests.memory,
         $limits.cpu,
         $limits.memory
       ]
      |@csv
    '
    
    kubectl get pods 
    --all-namespaces 
    --output=json 
    | jq -r "${FILTER}"
    

    解释:

    1. 对于每个items(即每个 Pod)
    2. 将变量meta设置为(Pod的)metadata内容
    3. 对于每个containers(即每个容器)
    4. 将变量name设置为(容器的)name
    5. 将变量requests设置为(容器的资源)requests
    6. 将变量limits设置为(容器的资源)limits
    7. 通过重新组装相关部分创建一个数组([...]
    8. 以逗号分隔的形式输出数组

      在集群上:

      "monitoring","prometheus-adapter-59df95d9f5-kg4hc","prometheus-adapter",,,,
      "monitoring","prometheus-adapter-59df95d9f5-j6rbx","prometheus-adapter",,,,
      "monitoring","prometheus-operator-7775c66ccf-45z2f","prometheus-operator","100m","100Mi","200m","200Mi"
      "monitoring","prometheus-operator-7775c66ccf-45z2f","kube-rbac-proxy","10m","20Mi","20m","40Mi"
      "monitoring","node-exporter-7cf4m","node-exporter","102m","180Mi","250m","180Mi"
      "monitoring","node-exporter-7cf4m","kube-rbac-proxy","10m","20Mi","20m","40Mi"
      "monitoring","kube-state-metrics-76f6cb7996-hdxcb","kube-state-metrics","10m","190Mi","100m","250Mi"
      "monitoring","kube-state-metrics-76f6cb7996-hdxcb","kube-rbac-proxy-main","20m","20Mi","40m","40Mi"
      "monitoring","kube-state-metrics-76f6cb7996-hdxcb","kube-rbac-proxy-self","10m","20Mi","20m","40Mi"
      "monitoring","blackbox-exporter-55c457d5fb-x6hwj","blackbox-exporter","10m","20Mi","20m","40Mi"
      "monitoring","blackbox-exporter-55c457d5fb-x6hwj","module-configmap-reloader","10m","20Mi","20m","40Mi"
      "monitoring","blackbox-exporter-55c457d5fb-x6hwj","kube-rbac-proxy","10m","20Mi","20m","40Mi"
      "monitoring","grafana-6dd5b5f65-6jwq8","grafana","100m","100Mi","200m","200Mi"
      "monitoring","alertmanager-main-0","alertmanager","4m","100Mi","100m","100Mi"
      "monitoring","alertmanager-main-0","config-reloader","100m","50Mi","100m","50Mi"
      "kube-system","coredns-7f9c69c78c-2zx4h","coredns","100m","70Mi",,"170Mi"
      "monitoring","prometheus-k8s-0","prometheus",,"400Mi",,
      "monitoring","prometheus-k8s-0","config-reloader","100m","50Mi","100m","50Mi"
      "kube-system","calico-kube-controllers-5f7575cc96-6tf8x","calico-kube-controllers",,,,
      "kube-system","calico-node-m78xm","calico-node","250m",,,
      

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2023-02-23
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多