如何使用kubectl -o jsonpath只检索kubectl.kubernetes.io/last-applied-configuration?

时间:2019-05-13 18:26:55

标签: kubectl jsonpath

我正在尝试使用kubectl -o jsonpath从服务Yaml(在元数据注释下)检索kubernetes最后应用的配置,但是该字段的名称为“ kubectl.kubernetes.io/last-applied-configuration” 。我相信解析器会因为实际名称字段中的点而感到困惑,因为它使用点来指定子对象。

例如(在Windows上运行)

kubectl -lapp=myapp get service -o jsonpath="{range .items[*]}{
.metadata.annotations}{\"\n\"}{end}"

显示期望值的映射图

map[kubectl.kubernetes.io/last-applied-configuration:{"kind":"Service","apiVersion":"v1","metadata":{"name":"myapp","namespace":"mynamespace",
"creationTimestamp":null,"labels":{"app":"myapp","version":"1.0"}},"spec":{"ports":[{"name":"http","protocol":"TCP","port":80,"ta
rgetPort":8080}],"selector":{"app":"myapp","version":"1.0"},"type":"NodePort"},"status":{"loadBalancer":{}}}]

在这种情况下,kubectl.kubernetes.io / last-applied-configuration是注释中的唯一内容,但并非总是如此。

当我尝试深入研究最后应用的配置时,就会出现问题。

例如

kubectl -lapp=myapp get service -o jsonpath="{range .items[*]}{
.metadata.annotations.kubectl.kubernetes.io/last-applied-configuration}{\"\n\"}{end}"

不返回任何信息。

我也尝试过

kubectl -lapp=myapp get service -o jsonpath="{range .items[*]}{
.metadata.annotations['kubectl.kubernetes.io/last-applied-configuration']}{\"\n\"}{end}"

kubectl -lapp=myapp get service -o jsonpath="{range .items[*]}{['metadata']['annotations']['kubectl.kubernetes.io/last-applied-configuration']}{\"\n\"}{end}"

无济于事。

我希望结果只是kubectl.kubernetes.io/last-applied-configuration的值

3 个答案:

答案 0 :(得分:1)

kubectl apply view-last-applied service -lapp=myapp -o json

答案 1 :(得分:0)

我不是json专家,但是您可以使用jid-json incremental digger

kubectl get service -o json| jid -q

您可以看到详细说明here

要捕获metadata.annotations,请使用以下方法:

kubectl get service -o json| jq .items[0].metadata.annotations

输出如下:

$ kubectl get service -o json| jq -r .items[0].metadata.annotations
{
  "kompose.cmd": "kompose convert --volumes hostPath",
  "kompose.version": "1.17.0 (a74acad)",
  "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{\"kompose.cmd\":\"kompose convert --volumes hostPath\",\"kompose.version\":\"1.17.0 (a74acad)\"},\"creationTimestamp\":null,\"labels\":{\"io.kompose.service\":\"decs-zc1\"},\"name\":\"decs-zc1\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"name\":\"2201\",\"port\":2201,\"targetPort\":22}],\"selector\":{\"io.kompose.service\":\"decs-zc1\"}},\"status\":{\"loadBalancer\":{}}}\n"
}

希望这对您有进一步的帮助。

答案 2 :(得分:0)

您需要转义.,然后它将列出特定注释名称中的值。

kubectl -lapp=myapp get service -o jsonpath="{range .items[*]}{.metadata.annotations.kubectl\.kubernetes\.io/last-applied-configuration}{\"\n\"}{end}"