diff --git a/content/ru/docs/concepts/scheduling-eviction/_index.md b/content/ru/docs/concepts/scheduling-eviction/_index.md new file mode 100644 index 00000000000..f2e598a2a5a --- /dev/null +++ b/content/ru/docs/concepts/scheduling-eviction/_index.md @@ -0,0 +1,35 @@ +--- +title: "Планирование, приоритизация и вытеснение" +weight: 95 +content_type: concept +description: > + В Kubernetes под планированием понимается поиск подходящих узлов, на которых kubelet сможет запустить Pod'ы. + Приоритизация — процесс завершения работы Pod'ов с более низким приоритетом и высвобождения места для Pod'ов + с более высоким приоритетом. Вытеснение — это проактивное завершение работы одного или нескольких Pod'ов на + узлах с дефицитом ресурсов. + +no_list: true +--- + +В Kubernetes под планированием понимается поиск {{}}, подходящих для размещения {{}} так, чтобы {{}} +мог их запустить. Приоритизация (упреждение; preemption) — процесс завершения работы Pod'ов +с более низким {{}} с освобождением места для Pod'ов с более высоким приоритетом. Вытеснение (eviction) — завершение работы одного или нескольких Pod'ов на узлах. + +## Планирование + +* [Планировщик Kubernetes](/docs/concepts/scheduling-eviction/kube-scheduler/); +* [Распределение Pod'ов по узлам](/docs/concepts/scheduling-eviction/assign-pod-node/); +* [Overhead Pod'а](/docs/concepts/scheduling-eviction/pod-overhead/); +* [Ограничения на топологию распределения Pod'ов](/docs/concepts/scheduling-eviction/topology-spread-constraints/); +* [Ограничения (taints) и допуски (tolerations)](/docs/concepts/scheduling-eviction/taint-and-toleration/); +* [Фреймворк для планирования](/docs/concepts/scheduling-eviction/scheduling-framework); +* [Настройка производительности планировщика](/docs/concepts/scheduling-eviction/scheduler-perf-tuning/); +* [Упаковка расширенных ресурсов](/docs/concepts/scheduling-eviction/resource-bin-packing/). + +## Завершение работы Pod'ов + +{{}} + +* [Приоритет и приоритизация Pod'ов](/docs/concepts/scheduling-eviction/pod-priority-preemption/); +* [Вытеснение из-за недостатка ресурсов на узле](/docs/concepts/scheduling-eviction/node-pressure-eviction/); +* [Вытеснение, инициированное API](/docs/concepts/scheduling-eviction/api-eviction/). diff --git a/content/ru/docs/concepts/scheduling-eviction/api-eviction.md b/content/ru/docs/concepts/scheduling-eviction/api-eviction.md new file mode 100644 index 00000000000..c545b597a06 --- /dev/null +++ b/content/ru/docs/concepts/scheduling-eviction/api-eviction.md @@ -0,0 +1,121 @@ +--- +title: Вытеснение, инициированное через API +content_type: concept +weight: 110 +--- + +{{< glossary_definition term_id="api-eviction" length="short" >}}
+ +Вытеснение можно инициировать напрямую с помощью Eviction API или программно, +используя клиент {{}} +(например, командой `kubectl drain`). В результате будет создан объект `Eviction`, +который запустит процесс контролируемого завершения работы Pod'а. + +Вытеснения, инициированные через API, учитывают настройки [`PodDisruptionBudget`](/docs/tasks/run-application/configure-pdb/) +и [`terminationGracePeriodSeconds`](/docs/concepts/workloads/pods/pod-lifecycle#pod-termination). + +Создание с помощью API объекта Eviction для Pod'а аналогично выполнению +[операции `DELETE`](/docs/reference/kubernetes-api/workload-resources/pod-v1/#delete-delete-a-pod) +для этого Pod'а, которая контролируется политикой. + +## Вызов API Eviction + +Для доступа к API Kubernetes и создания объекта `Eviction` можно воспользоваться [клиентской библиотекой](/docs/tasks/administer-cluster/access-cluster-api/#programmatic-access-to-the-api). Необходимая операция оформляется в виде POST-запроса (см. пример ниже): + +{{< tabs name="Eviction_example" >}} +{{% tab name="policy/v1" %}} +{{< note >}} +Вытеснение с версией `policy/v1` доступно начиная с v1.22. Для более ранних релизов используйте `policy/v1beta1`. +{{< /note >}} + +```json +{ + "apiVersion": "policy/v1", + "kind": "Eviction", + "metadata": { + "name": "quux", + "namespace": "default" + } +} +``` +{{% /tab %}} +{{% tab name="policy/v1beta1" %}} +{{< note >}} +Признана устаревшей в v1.22; заменена на `policy/v1`. +{{< /note >}} + +```json +{ + "apiVersion": "policy/v1beta1", + "kind": "Eviction", + "metadata": { + "name": "quux", + "namespace": "default" + } +} +``` +{{% /tab %}} +{{< /tabs >}} + +Также можно попытаться выполнить операцию вытеснения, +обратившись к API с помощью `curl` или `wget`, как показано в следующем примере: + +```bash +curl -v -H 'Content-type: application/json' https://your-cluster-api-endpoint.example/api/v1/namespaces/default/pods/quux/eviction -d @eviction.json +``` + +## Как работает вытеснение, инициированное через API + +При вытеснении, инициированном через API, сервер API выполняет admission-проверки +и отвечает одним из следующих способов: + +* `200 OK`: вытеснение разрешено, подресурс `Eviction` создан, + Pod удален (аналогично отправке запроса `DELETE` на URL Pod'а). +* `429 Too Many Requests`: вытеснение в данный момент не разрешено из-за настроек + {{}}. + Попытку вытеснения можно повторить позже. Такой ответ также может быть вызван + работой механизма по ограничению частоты запросов к API. +* `500 Internal Server Error`: вытесение запрещено из-за неправильной конфигурации; + например, несколько PodDisruptionBudget'ов могут ссылаться на один и тот же Pod. + +Если Pod, предназначенный для вытеснения, не является частью рабочей нагрузки +с настроенным PodDisruptionBudget'ом, сервер API всегда возвращает `200 OK` и +разрешает вытеснение. + +В случае, если вытеснение разрешено, процесс удаления Pod'а выглядит следующим образом: + +1. К ресурсу `Pod` на сервере API добавляется метка времени удаления, + после чего сервер API считает ресурс Pod завершенным (terminated). Ресурс `Pod` также помечается + настроенным grace-периодом. +1. {{}} на узле, где запущен + локальный Pod, замечает, что ресурс `Pod` помечен на удаление, и приступает к + корректному завершению работы локального Pod'а. +1. Пока kubelet завершает работу Pod'а, управляющий слой удаляет Pod из объектов + {{}} и + {{}}. + В результате контроллеры больше не рассматривают Pod как валидный объект. +1. После истечения периода корректного завершения работы (grace-периода) kubelet + принудительно завершает работу локального Pod'а. +1. kubelet передает API-серверу информацию о необходимости удалить ресурс `Pod`. +1. Сервер API удаляет ресурс `Pod`. + +## Зависшие вытеснения + +В некоторых ситуациях сбой приводит к тому, что API Eviction начинает возвращать +исключительно ответы `429` или `500`. Такое может случиться, если, например, +за создание Pod'ов для приложения отвечает ReplicaSet, однако новые Pod'ы не +переходят в состояние `Ready`. Подобное поведение также может наблюдаться в случаях, +когда у последнего вытесненного Pod'а слишком долгий период завершения работы (grace-период). + +Одно из следующих решений может помочь решить проблему: + +* Прервите или приостановите автоматическую операцию, вызвавшую сбой. + Перед повторным запуском операции внимательно изучите сбойное приложение. +* Подождите некоторое время, затем напрямую удалите Pod из управляющего слоя + кластера вместо того, чтобы пытаться удалить его с помощью Eviction API. + +## {{% heading "whatsnext" %}} + +* Обеспечение работоспособности приложений с помощью [Pod Disruption Budget](/docs/tasks/run-application/configure-pdb/). +* [Вытеснение из-за дефицита ресурсов на узле](/docs/concepts/scheduling-eviction/node-pressure-eviction/). +* [Приоритет Pod'а и приоритизация](/docs/concepts/scheduling-eviction/pod-priority-preemption/). diff --git a/content/ru/docs/reference/glossary/api-eviction.md b/content/ru/docs/reference/glossary/api-eviction.md new file mode 100644 index 00000000000..0ab35ae3fc1 --- /dev/null +++ b/content/ru/docs/reference/glossary/api-eviction.md @@ -0,0 +1,24 @@ +--- +title: Вытеснение, инициированное через API +id: api-eviction +date: 2021-04-27 +full_link: /docs/concepts/scheduling-eviction/api-eviction/ +short_description: > + Вытеснение, инициированное через API — процесс, при котором с помощью Eviction API создается объект Eviction, + который запускает корректное завершение работы Pod'а. +aka: +tags: +- operation +--- + Вытеснение, инициированное через API — процесс, при котором с помощью [Eviction API](/docs/reference/generated/kubernetes-api/{{}}/#create-eviction-pod-v1-core) +создается объект `Eviction`, который запускает корректное завершение работы Pod'а. + + + +Вытеснение можно запросить через Eviction API, обратившись к нему напрямую, либо программно (через клиент API-сервера — например, с помощью команды `kubectl drain`). При этом будет создан объект `Eviction`, на основании которого API-сервер завершит работу Pod'а. + +Вытеснения, инициированные через API, учитывают заданные параметры [`PodDisruptionBudget`](/docs/tasks/run-application/configure-pdb/) (минимальное количество реплик, которые должны быть доступны для данного развертывания в любой момент времени) и [`terminationGracePeriodSeconds`](/docs/concepts/workloads/pods/pod-lifecycle#pod-termination) (период ожидания корректного завершения работы Pod'а). + +Обратите внимание: вытеснение, инициированное через API — не то же самое, что вытеснение из-за [дефицита ресурсов на узле](/docs/concepts/scheduling-eviction/node-pressure-eviction/). + +* Дополнительная информация доступна в разделе ["Вытеснение, инициированное API"](/docs/concepts/scheduling-eviction/api-eviction/). diff --git a/content/ru/docs/reference/glossary/pod-disruption.md b/content/ru/docs/reference/glossary/pod-disruption.md new file mode 100644 index 00000000000..e2a0a0f3db3 --- /dev/null +++ b/content/ru/docs/reference/glossary/pod-disruption.md @@ -0,0 +1,24 @@ +--- +id: pod-disruption +title: Нарушение работы Pod'ов +full_link: /docs/concepts/workloads/pods/disruptions/ +date: 2021-05-12 +short_description: > + Процесс, в ходе которого происходит плановое или принудительное завершение работы Pod'ов на узлах. + +aka: +related: + - pod + - container +tags: + - operation +--- + +[Нарушение работы Pod'ов (Pod disruption)](/docs/concepts/workloads/pods/disruptions/) — процесс, +в ходе которого происходит плановое или внеплановое (принудительное) завершение работы Pod'ов на узлах. + + + +Плановое завершение работы Pod'ов инициируется владельцами приложений или администраторами +кластера. Внеплановое завершение работы обычно вызвано непредвиденными обстоятельствами различной природы, +например, с недостатком ресурсов на узлах или случайными удалениями.