-
Notifications
You must be signed in to change notification settings - Fork 14.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create api-eviction.md Apply suggestions from code review Co-authored-by: Dmitry Shurupov <dmitry.shurupov@palark.com> [ru] create api-eviction.md [ru] create pod-disruption.md
- Loading branch information
Showing
4 changed files
with
204 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
--- | ||
title: "Планирование, приоритизация и вытеснение" | ||
weight: 95 | ||
content_type: concept | ||
description: > | ||
В Kubernetes под планированием понимается поиск подходящих узлов, на которых kubelet сможет запустить Pod'ы. | ||
Приоритизация — процесс завершения работы Pod'ов с более низким приоритетом и высвобождения места для Pod'ов | ||
с более высоким приоритетом. Вытеснение — это проактивное завершение работы одного или нескольких Pod'ов на | ||
узлах с дефицитом ресурсов. | ||
no_list: true | ||
--- | ||
|
||
В Kubernetes под планированием понимается поиск {{<glossary_tooltip text="узлов" term_id="node">}}, подходящих для размещения {{<glossary_tooltip text="Pod'ов" term_id="pod">}} так, чтобы {{<glossary_tooltip text="kubelet" term_id="kubelet">}} | ||
мог их запустить. Приоритизация (упреждение; preemption) — процесс завершения работы Pod'ов | ||
с более низким {{<glossary_tooltip text="приоритетом" term_id="pod-priority">}} с освобождением места для 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'ов | ||
|
||
{{<glossary_definition term_id="pod-disruption" length="all">}} | ||
|
||
* [Приоритет и приоритизация Pod'ов](/docs/concepts/scheduling-eviction/pod-priority-preemption/); | ||
* [Вытеснение из-за недостатка ресурсов на узле](/docs/concepts/scheduling-eviction/node-pressure-eviction/); | ||
* [Вытеснение, инициированное API](/docs/concepts/scheduling-eviction/api-eviction/). |
121 changes: 121 additions & 0 deletions
121
content/ru/docs/concepts/scheduling-eviction/api-eviction.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
--- | ||
title: Вытеснение, инициированное через API | ||
content_type: concept | ||
weight: 110 | ||
--- | ||
|
||
{{< glossary_definition term_id="api-eviction" length="short" >}} </br> | ||
|
||
Вытеснение можно инициировать напрямую с помощью Eviction API или программно, | ||
используя клиент {{<glossary_tooltip term_id="kube-apiserver" text="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`: вытеснение в данный момент не разрешено из-за настроек | ||
{{<glossary_tooltip term_id="pod-disruption-budget" text="PodDisruptionBudget">}}. | ||
Попытку вытеснения можно повторить позже. Такой ответ также может быть вызван | ||
работой механизма по ограничению частоты запросов к API. | ||
* `500 Internal Server Error`: вытесение запрещено из-за неправильной конфигурации; | ||
например, несколько PodDisruptionBudget'ов могут ссылаться на один и тот же Pod. | ||
|
||
Если Pod, предназначенный для вытеснения, не является частью рабочей нагрузки | ||
с настроенным PodDisruptionBudget'ом, сервер API всегда возвращает `200 OK` и | ||
разрешает вытеснение. | ||
|
||
В случае, если вытеснение разрешено, процесс удаления Pod'а выглядит следующим образом: | ||
|
||
1. К ресурсу `Pod` на сервере API добавляется метка времени удаления, | ||
после чего сервер API считает ресурс Pod завершенным (terminated). Ресурс `Pod` также помечается | ||
настроенным grace-периодом. | ||
1. {{<glossary_tooltip term_id="kubelet" text="kubelet">}} на узле, где запущен | ||
локальный Pod, замечает, что ресурс `Pod` помечен на удаление, и приступает к | ||
корректному завершению работы локального Pod'а. | ||
1. Пока kubelet завершает работу Pod'а, управляющий слой удаляет Pod из объектов | ||
{{<glossary_tooltip term_id="endpoint" text="Endpoint">}} и | ||
{{<glossary_tooltip term_id="endpoint-slice" text="EndpointSlice">}}. | ||
В результате контроллеры больше не рассматривают 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/). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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/{{<param "version">}}/#create-eviction-pod-v1-core) | ||
создается объект `Eviction`, который запускает корректное завершение работы Pod'а. | ||
|
||
<!--more--> | ||
|
||
Вытеснение можно запросить через 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/). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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'ов на узлах. | ||
|
||
<!--more--> | ||
|
||
Плановое завершение работы Pod'ов инициируется владельцами приложений или администраторами | ||
кластера. Внеплановое завершение работы обычно вызвано непредвиденными обстоятельствами различной природы, | ||
например, с недостатком ресурсов на узлах или случайными удалениями. |