невозможно перечислить блоки в любом состоянии, кроме завершенных - PullRequest
1 голос
/ 01 апреля 2020

Проблема: я хочу перечислить все модули, кроме тех, которые НЕ находятся в состоянии Completed. Селектор поля

по-прежнему выводит модули в фазе Completed, когда выбрано не завершено в команде kubectl

Предлагаемое решение: обратите внимание, что я также получаю пакеты в Completed фазе.

kubectl get pods --all-namespaces --field-selector=spec.nodeName=node1,status.phase!=Completed --no-headers
test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e nightly-2020-04-01-13-00-tokyo-demo-route-gt-4245049053 2/2 Running 0 13m
test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e nightly-2020-04-01-13-00-willows-405-a2a-1380625152 0/2 Completed 0 3h31m
test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e nightly-2020-04-01-13-00-willows-405-a2a-1464250510 0/2 Completed 0 7h33m
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.5", GitCommit:"2166946f41b36dea2c4626f90a77706f426cdea2", GitTreeState:"clean", BuildDate:"2019-03-25T15:19:22Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}

, но когда я делаю для Running, это работает и перечисляет только завершенные фазовые модули

kubectl get pods --all-namespaces --field-selector=spec.nodeName=node1,status.phase!=Running --no-headers

Ответы [ 2 ]

3 голосов
/ 02 апреля 2020

Completed не является действительной фазой Pod, используйте вместо нее Succeeded.

Pending, Running, Succeeded, Failed и Unknown - действительные значения для Pod Phase .

Чтобы получить незавершенные капсулы,

kubectl get pods --all-namespaces --field-selector=spec.nodeName=node1,status.phase!=Succeeded --no-headers
0 голосов
/ 02 апреля 2020

Попробуйте это:

kubectl get pod -o=json | jq '.items[]|select(any( .status.containerStatuses[]; .state.terminated.reason!="Completed"))|.metadata.name'

В этом списке будут перечислены все модули, в которых состояние модуля отличается от завершенного.

Для тестирования измените ! = на == , чтобы получить список завершенных модулей.

В частности, если вы ищете контейнеры cronjobs только в незавершенном состоянии с использованием kubectl native jsonpath, используйте это:

kubectl get pod -o jsonpath='{.items[?(@.status.containerStatuses[*].state.terminated.reason!="Completed")].metadata.name}'

Надеюсь, это поможет.

...