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