我正在尝试使用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的值
答案 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}"