Как я могу получить только kubectl.kubernetes.io/last-applied-configuration, используя kubectl -o jsonpath? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь получить последнюю примененную конфигурацию kubernetes из службы yaml (под аннотациями метаданных), используя kubectl -o jsonpath, но имя поля "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

1 Ответ

0 голосов
/ 14 мая 2019

Я не эксперт в JSON, но вы можете использовать jid - JSON инкрементный копатель :

kubectl get service -o json| jid -q

Вы можете увидеть подробное объяснение здесь .

Чтобы поймать 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"
}

Надеюсь, это поможет вам в дальнейшем.

...