使用jsonpath提取kubernetes注解信息

Extract information of kubernetes annotations with jsonpath

我有这个 JSON 代码:

{
    "apiVersion": "autoscaling/v1",
    "kind": "HorizontalPodAutoscaler",
    "metadata": {
        "annotations": {
            "autoscaling.alpha.kubernetes.io/metrics": "[{\"type\":\"Resource\",\"resource\":{\"name\":\"memory\",\"targetAverageValue\":\"400Mi\"}}]",
            "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"autoscaling/v2beta1\",\"kind\":\"HorizontalPodAutoscaler\",\"metadata\":{\"annotations\":{},\"name\":\"pdn-location-suscriber\",\"namespace\":\"pdn-oms\"},\"spec\":{\"maxReplicas\":3,\"metrics\":[{\"resource\":{\"name\":\"cpu\",\"targetAverageUtilization\":100},\"type\":\"Resource\"},{\"resource\":{\"name\":\"memory\",\"targetAverageValue\":\"400Mi\"},\"type\":\"Resource\"}],\"minReplicas\":1,\"scaleTargetRef\":{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"name\":\"location-suscriber\"}}}\n"
        }
    }
}

我需要获取 "autoscaling.alpha.kubernetes.io/metrics"targetAverageValue = 400Mi 的值,那么如何创建一个 JSON 路径表达式来提取它。

您可以 extract 使用 jq 的信息。
只需 运行 以下命令。

$ kubectl get hpa <hpa-name> -o=json | jq '.metadata.annotations["autoscaling.alpha.kubernetes.io/metrics"]' | jq -r | jq '.[].resource.targetAverageValue'

您也可以尝试以下方法。

$ kubectl get hpa <hpa-name> -o=jsonpath="{.metadata.annotations.autoscaling\.alpha\.kubernetes\.io\/metrics}" | jq '.[].resource.targetAverageValue'

您实际上可以使用此表达式来获得您想要的值。

kubectl get hpa pdn-location-suscriber(your_hpa_name) -n pdn-oms -o jsonpath="{.spec.metrics[1].resource.targetAverageValue}"

表示jsonpath表达式:

jsonpath="{.spec.metrics[1].resource.targetAverageValue}"

因为您有规格下的指标,这是一个列表,您必须使用索引号,在这种情况下为 1。