У Kubernetes багато обʼєктів мають стани (conditions). Стан — це показник певного аспекту фактичного становища того, що представляє обʼєкт. Podʼи мають стани, і стани Podʼів у Kubernetes є важливим аспектом, що дозволяє контролерам (а також тим, хто займається усуненням несправностей) оцінювати справність Podʼів.
Фаза Podʼа надає високорівневий огляд того, на якому етапі життєвого циклу перебуває Pod, але одне значення не може показати повну картину. Наприклад, Pod може перебувати у фазі Running, але не бути готовим до обслуговування трафіку. Стани Podʼа доповнюють фазу, відстежуючи незалежно один від одного різні аспекти статусу Podʼа, наприклад, чи було його заплановано, чи готові його контейнери, чи триває зміна розміру, або чи буде робота Podʼа незабаром перервана через taint.
Статус Podʼа включає масив PodConditions, які вказують, чи пройшов Pod певні контрольні точки.
Кожен елемент масиву PodCondition має такі поля:
| Поле | Опис |
|---|---|
type | Назва стану Podʼа. |
status | Вказує, чи застосовний цей стан, з можливими значеннями "True", "False" або "Unknown". |
lastProbeTime | Час останньої перевірки стану Podʼа. |
lastTransitionTime | Час останнього переходу Podʼа з одного стану в інший. |
reason | Текст у форматі UpperCamelCase, придатний для машинного зчитування, що вказує причину останнього переходу стану. |
message | Повідомлення, придатне для сприйняття людиною, що містить детальну інформацію про останній перехід стану. |
observedGeneration | .metadata.generation Podʼа на момент запису стану. Див. Генерація Podʼа. |
Kubernetes керує такими станами Podʼа:
Стани життєвого циклу: встановлюються під час проходження Podʼом свого життєвого циклу, приблизно в такому порядку: PodScheduled, PodReadyToStartContainers, Initialized, ContainersReady, Ready.
Інші стани: встановлюються у відповідь на конкретні операції або події: DisruptionTarget, PodResizePending, PodResizeInProgress.
Крім вбудованих станів, ви можете визначати власні стани за допомогою шлюзів готовності Podʼа (readiness gates).
У міру проходження Podʼом свого життєвого циклу kubelet встановлює такі стани приблизно в такому порядку:
PodScheduled: Pod було заплановано на вузол.PodReadyToStartContainers: пісочницю Podʼа було успішно створено та налаштовано мережу. Пісочницю та мережу налаштовують середовище виконання контейнерів та втулок CNI.Initialized: всі init-контейнери успішно завершилися. Для Podʼа без init-контейнерів встановлюється в True перед створенням пісочниці.ContainersReady: всі контейнери в Podʼі готові. Готовність контейнера визначається його пробою готовності, якщо вона налаштована.Ready: Pod здатний обслуговувати запити і повинен бути доданий до пулів балансування навантаження всіх відповідних Services. Podʼи, які не є Ready, видаляються з точок доступу Service.Ready залежить не лише від ContainersReady. Якщо Pod вказує readinessGates, всі ці власні стани також повинні бути True, щоб Pod був Ready. Див. Готовність Podʼа для деталей.Ви можете перевірити стани Podʼа за допомогою kubectl:
kubectl get pod <pod-name> -o yaml
Цей вивід показує, як виглядає поле status.conditions для запущеного Podʼа:
status:
conditions:
- type: PodScheduled
status: "True"
lastProbeTime: null
lastTransitionTime: "2026-03-29T08:52:21Z"
observedGeneration: 1
- type: PodReadyToStartContainers
status: "True"
lastProbeTime: null
lastTransitionTime: "2026-04-11T06:02:16Z"
observedGeneration: 1
- type: Initialized
status: "True"
lastProbeTime: null
lastTransitionTime: "2026-03-29T08:52:21Z"
observedGeneration: 1
- type: ContainersReady
status: "True"
lastProbeTime: null
lastTransitionTime: "2026-04-11T06:02:45Z"
observedGeneration: 1
- type: Ready
status: "True"
lastProbeTime: null
lastTransitionTime: "2026-04-11T06:02:45Z"
observedGeneration: 1
This is a stable feature in Kubernetes, and has been since version v1.37. It was first available in the v1.28 release. You can no longer disable or opt out of this feature or behavior (it is locked); if you explicitly set a value for the associated feature gate PodReadyToStartContainersCondition, Kubernetes ignores it but does not report any error.
PodHasNetwork.Після того, як Pod заплановано на вузол, kubelet має його допустити, а всі необхідні томи зберігання мають бути змонтовані. Після завершення цих фаз kubelet працює із середовищем виконання контейнерів (використовуючи Container Runtime Interface, CRI), щоб налаштувати пісочницю середовища виконання та мережу для Podʼа. Стан PodReadyToStartContainers додається до поля status.conditions Podʼа.
Kubelet встановлює цей стан в False, коли виявляє, що Pod не має пісочниці середовища виконання з налаштованою мережею. Це відбувається в таких сценаріях:
Kubelet встановлює стан PodReadyToStartContainers в True після того, як втулок середовища виконання успішно завершить створення пісочниці та налаштування мережі для Podʼа. Після встановлення стану PodReadyToStartContainers в True kubelet може почати завантаження образів контейнерів та створення контейнерів.
Для Podʼа з init-контейнерами kubelet встановлює стан Initialized в True після успішного завершення init-контейнерів (що відбувається після успішного створення пісочниці та налаштування мережі втулком середовища виконання). Для Podʼа без init-контейнерів kubelet встановлює стан Initialized в True перед початком створення пісочниці та налаштування мережі.
Такі стани не є частиною нормального проходження життєвого циклу Podʼа. Вони встановлюються у відповідь на конкретні операції або події.
Спеціальний стан Podʼа DisruptionTarget додається для того, щоб вказати, що Pod буде видалено через переривання роботи. Поле reason цього стану додатково вказує одну з таких причин завершення Podʼа:
PreemptionBySchedulerDeletionByTaintManagerkube-controller-manager) через NoExecute taint, який Pod не толерує; див. виселення на основі taint.EvictionByEvictionAPIDeletionByPodGCTerminationByKubeletУ всіх інших сценаріях переривання роботи, таких як виселення через перевищення обмежень контейнерів Podʼа, Podʼи не отримують стан DisruptionTarget, оскільки ці переривання, ймовірно, були спричинені самим Podʼом і повторилися б під час повторної спроби.
DisruptionTarget може бути додано до Podʼа, але цей Pod може фактично не бути видаленим. У такій ситуації через деякий час стан переривання роботи Podʼа буде очищено.Разом з очищенням Podʼів, механізм збору сміття Podʼів (PodGC) також позначає їх як невдалі, якщо вони перебувають у нетермінальній фазі (див. також збір сміття Podʼів).
Під час використання Job (або CronJob) ви можете використовувати ці стани переривання роботи Podʼів як частину політики збоїв Podʼа вашого Job.
Для отримання додаткової інформації див. Переривання роботи.
Kubelet оновлює стани Podʼа, щоб вказати статус запиту на зміну розміру:
type: PodResizePending: Kubelet не може негайно виконати запит. Поле message надає пояснення, чому.reason: Infeasible: Запитана зміна розміру неможлива на поточному вузлі (наприклад, запит більше ресурсів, ніж є на вузлі).reason: Deferred: Запитана зміна розміру наразі неможлива, але може стати можливою пізніше (наприклад, якщо інший Pod буде видалено). Kubelet повторно спробує зміну розміру.type: PodResizeInProgress: Kubelet прийняв зміну розміру та виділив ресурси, але зміни ще застосовуються. Зазвичай це триває недовго, але може зайняти більше часу залежно від типу ресурсу та поведінки середовища виконання. Будь-які помилки під час виконання повідомляються у полі message (разом з reason: Error).Якщо запитана зміна розміру є Deferred, kubelet періодично повторно намагатиметься виконати зміну розміру, наприклад, коли інший Pod буде видалено або зменшено масштаб.
Докладніше див. Зміна розміру CPU та памʼяті, призначених контейнерам.
Ваш застосунок може додавати додаткові відгуки або сигнали в .status Podʼа; це відомо як розширена готовність Podʼів. Щоб використовувати це, встановіть readinessGates у spec Podʼа, щоб вказати список додаткових станів, які kubelet оцінює для готовності Podʼа. Потім ви реалізуєте або встановлюєте контролер, який керує цими власними станами, і kubelet використовує це як додаткове вхідне значення для визначення готовності Podʼа.
Шлюзи готовності (readiness gates) визначаються поточним станом полів status.condition для Podʼа. Якщо Kubernetes не може знайти такий стан у полі status.conditions Podʼа, його статус стандартно дорівнює "False".
kind: Pod
...
spec:
readinessGates:
- conditionType: "www.example.com/feature-1"
status:
conditions:
- type: Ready # вбудована PodCondition
status: "False"
lastProbeTime: null
lastTransitionTime: 2018-01-01T00:00:00Z
- type: "www.example.com/feature-1" # додаткова PodCondition
status: "False"
lastProbeTime: null
lastTransitionTime: 2018-01-01T00:00:00Z
containerStatuses:
- containerID: docker://abcd...
ready: true
...
Стани Podʼа, які ви додаєте, повинні мати назви, що відповідають формату ключів міток Kubernetes.
Щоб встановити ці status.conditions для Podʼа, застосунки та оператори повинні використовувати дію PATCH на субресурсі статусу Podʼа. Ви можете використовувати kubectl patch з --subresource=status, або бібліотеку клієнта Kubernetes, щоб написати код, який встановлює власні стани Podʼа для готовності Podʼа.
Pod, який використовує власні стани, вважається готовим тільки тоді, коли виконуються обидва такі твердження:
readinessGates, мають значення True.Коли контейнери Podʼа готові, але принаймні один власний стан відсутній або має значення False, kubelet встановлює стан Ready Podʼа в status: "False" з reason: ReadinessGatesNotReady.