Поддержка прерывания работы Pod
apiVersion: policy/v1
import "k8s.io/api/policy/v1"
Поддержка прерывания работы Pod
PodDisruptionBudget — это объект для определения максимального прерывания, которое может быть вызвано для группы Pod
apiVersion: policy/v1
kind: PodDisruptionBudget
-
metadata (ObjectMeta)
Стандартные метаданные объекта. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-
spec (PodDisruptionBudgetSpec)
Описание желаемого поведения PodDisruptionBudget.
-
status (PodDisruptionBudgetStatus)
Наиболее недавно наблюдаемый статус PodDisruptionBudget.
PodDisruptionBudgetSpec
PodDisruptionBudgetSpec — это описание PodDisruptionBudget.
-
maxUnavailable (IntOrString)
Прерывание разрешено, если не более «maxUnavailable» Pod, выбранных по «selector», недоступны после прерывания, т. е. даже при отсутствии прерываемого Pod. Например, можно предотвратить все добровольные прерывания, указав 0. Это взаимоисключающее условие с «minAvailable».
IntOrString — это тип, который может содержать int32 или строку. При использовании в JSON или YAML, он генерирует или потребляет внутренний тип. Это позволяет, например, иметь поле JSON, которое может принимать имя или число.
-
minAvailable (IntOrString)
Прерывание разрешено, если как минимум «minAvailable» Pod, выбранных по «selector», останутся доступными после прерывания, т. е. даже при отсутствии прерываемого Pod. Таким образом, вы можете предотвратить все добровольные прерывания, указав «100%».
IntOrString — это тип, который может содержать int32 или строку. При использовании в JSON или YAML, он генерирует или потребляет внутренний тип. Это позволяет, например, иметь поле JSON, которое может принимать имя или число.
-
selector (LabelSelector)
Запрос меток над Pod, чьи прерывания управляются бюджетом прерывания. Нулевой селектор не будет соответствовать ни одному Pod, в то время как пустой ({}) селектор выберет все Pod в пространстве имен.
-
unhealthyPodEvictionPolicy (string)
UnhealthyPodEvictionPolicy определяет критерии, когда нездоровые Pod должны рассматриваться для прерывания. Текущая реализация рассматривает здоровые Pod как Pod, у которых есть элемент status.conditions с типом «Ready», status «True».
Допустимые политики — IfHealthyBudget и AlwaysAllow. Если политика не указана, используется поведение по умолчанию, соответствующее политике IfHealthyBudget.
Политика IfHealthyBudget означает, что запущенные Pod (status.phase = «Running»), но еще не здоровые, могут быть прерваны только если защищенное приложение не нарушено (status.currentHealthy не меньше status.desiredHealthy). Здоровые Pod будут подпадать под действие PDB для прерывания.
Политика AlwaysAllow означает, что все запущенные Pod (status.phase = «Running»), но еще не здоровые, считаются прерванными и могут быть прерваны независимо от того, выполняется ли условие в PDB. Это означает, что перспективные запущенные Pod прерванного приложения могут не получить шанса стать здоровыми. Здоровые Pod будут подпадать под действие PDB для прерывания.
В будущем могут быть добавлены дополнительные политики. Клиенты, принимающие решения о прерывании, должны запретить прерывание нездоровых Pod, если они столкнутся с нераспознанной политикой в этом поле.
Это поле находится на стадии бета-тестирования. API прерывания использует это поле, когда включен флаг функции PDBUnhealthyPodEvictionPolicy (включен по умолчанию).
PodDisruptionBudgetStatus
PodDisruptionBudgetStatus представляет информацию о статусе PodDisruptionBudget. Статус может отставать от фактического состояния системы.
-
currentHealthy (int32), необходимо
текущее количество здоровых Pod
-
desiredHealthy (int32), необходимо
минимальное желаемое количество здоровых Pod
-
disruptionsAllowed (int32), необходимо
Количество прерываний Pod, которые в настоящее время разрешены.
-
expectedPods (int32), необходимо
общее количество Pod, учтенных этим бюджетом прерывания
-
conditions ([]Condition)
Стратегия патча: объединение по ключу
typeКарта: уникальные значения по ключу type будут сохранены при объединении
Условия содержат условия для PDB. Контроллер прерываний устанавливает условие DisruptionAllowed. Ниже приведены известные значения для поля reason (в будущем могут быть добавлены дополнительные причины): - SyncFailed: Контроллер столкнулся с ошибкой и не смог вычислить количество разрешенных прерываний. Следовательно, прерывания не разрешены, и состояние условия будет False.
- InsufficientPods: Количество Pod равно или меньше необходимого по PodDisruptionBudget. Прерывания не разрешены, и состояние условия будет False.
- SufficientPods: Количество Pod больше, чем требуется по PodDisruptionBudget. Состояние будет True, и количество разрешенных прерываний предоставляется свойством disruptionsAllowed.
Condition содержит детали для одного аспекта текущего состояния этого ресурса API.
-
conditions.lastTransitionTime (Time), необходимо
lastTransitionTime — это последнее время, когда условие перешло от одного статуса к другому. Это должно быть время, когда изменилось основное условие. Если это неизвестно, можно использовать время изменения поля API.
Time — это оболочка вокруг time.Time, которая поддерживает правильную сериализацию в YAML и JSON. Оболочки предоставляются для многих фабричных методов, которые предлагает пакет time.
-
conditions.message (string), необходимо
message — это удобочитаемое сообщение, указывающее подробности о переходе. Оно может быть пустой строкой.
-
conditions.reason (string), необходимо
reason содержит программный идентификатор, указывающий причину последнего перехода состояния. Создатели определенных типов условий могут определить ожидаемые значения и их смысл для этого поля и то, гарантировано ли API этих значений. Значение должно быть строкой с CamelCase. Это поле не может быть пустым.
-
conditions.status (string), необходимо
статус условия, одно из True, False, Unknown.
-
conditions.type (string), необходимо
тип условия в CamelCase или в foo.example.com/CamelCase.
-
conditions.observedGeneration (int64)
observedGeneration представляет .metadata.generation, на основе которого было установлено условие. Например, если .metadata.generation в настоящее время 12, но .status.conditions[x].observedGeneration равно 9, условие устарело по отношению к текущему состоянию экземпляра.
-
disruptedPods (map[string]Time)
DisruptedPods содержит информацию о Pod, чье прерывание было обработано обработчиком подресурса API server, но еще не было замечено контроллером PodDisruptionBudget. Pod будет в этом словаре с момента обработки запроса прерывания API server до момента, когда контроллер Pod видит Pod, как помеченным на удаление (или после таймаута). Ключом в словаре является имя Pod, а значением — время обработки запроса прерывания API server. Если удаление не произошло и Pod все еще есть, оно будет автоматически удалено из списка контроллером PodDisruptionBudget после некоторого времени. Если все пройдет гладко, этот словарь должен быть пустым большую часть времени. Большое количество записей в словаре может указывать на проблемы с удалением Pod.
Time — это оболочка вокруг time.Time, которая поддерживает правильную сериализацию в YAML и JSON. Оболочки предоставляются для многих фабричных методов, которые предоставляет пакет time.
-
observedGeneration (int64)
Самая последняя наблюдаемая генерация при обновлении этого PDB status. Информация о disruptionsAllowed и другом статусе актуальна только если observedGeneration равно генерации объекта PDB.
Список Поддержка прерывания работы Pod
PodDisruptionBudgetList — это коллекция PodDisruptionBudgets.
apiVersion: policy/v1
kind: PodDisruptionBudgetList
-
metadata (ListMeta)
Стандартные метаданные объекта. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-
items ([]PodDisruptionBudget), необходимо
Items — это список PodDisruptionBudgets
© 2024 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2024 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/policy-resources/pod-disruption-budget-v1/