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

use*_*739 4 jsonpath kubectl

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

例如(在 Windows 上运行)

kubectl -lapp=myapp get service -o jsonpath="{range .items[*]}{
.metadata.annotations}{\"\n\"}{end}"
Run Code Online (Sandbox Code Playgroud)

按预期显示结果值的映射

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":{}}}]
Run Code Online (Sandbox Code Playgroud)

在这种情况下, 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}"
Run Code Online (Sandbox Code Playgroud)

不返回任何信息。

我也试过

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

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

无济于事。

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

小智 5

kubectl apply view-last-applied service -lapp=myapp -o json
Run Code Online (Sandbox Code Playgroud)


Sur*_*noi 4

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

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