使用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。
我有这个 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。