Самый простой способ - подписаться на api-сервер, чтобы уведомлять вас о каких-либо изменениях в вашем кластере.
Например, я выдал:
$ kubectl get pods --output-watch-events --watch
, а затем создал новый стручок Вот вывод:
EVENT NAME READY STATUS RESTARTS AGE
ADDED example-pod 0/1 Pending 0 0s
MODIFIED example-pod 0/1 ContainerCreating 0 0s
MODIFIED example-pod 0/1 Running 0 19s
MODIFIED example-pod 1/1 Running 0 23s
и вот небольшое объяснение:
- Как вы можете видеть, первое событие ДОБАВЛЕНО и находится в состоянии ожидания, что означает, что объект pod просто был создан.
- Второе событие MODIFIED со статусом ContainerCreating, возраст 0, что означает, что потребовалось менее 1 секунды, чтобы назначить / запланировать модуль для узла. Теперь kubelet начинает загружать образ продолжения.
- Третье событие имеет статус «Запущено», означающее, что продолжение континуатора запущено. Глядя на столбец возраста, вы можете увидеть, что прошло 19 с после предыдущего события, поэтому потребовалось около 19 с, чтобы загрузить изображение и запустить контейнер. Если вы посмотрите на столбец READY, вы увидите значение 0/1, поэтому контейнер работает, но он еще не находится в состоянии готовности.
- Для четвертого события столбец READY имеет значение 1/1, поэтому проверка готовности прошла успешно. Если вы посмотрите на столбец возраста, то увидите, что для проверки готовности и изменения статуса модуля понадобилось около 4 с (32-19).
Если этой информации недостаточно, вы можете использовать --output=
параметр для получения полной спецификации модуля при каждом изменении.
Вы также можете поиграть с kubectl get events
, чтобы получить еще несколько событий. И, конечно, добавив флаг --watch
, вы сможете наблюдать за событиями в реальном времени.
Если вы хотите более высокий уровень гибкости, используйте выделенные библиотеки kubernetes cl inet вместо kuebctl для получить эту информацию и обработать ее.