Merge pull request #38081 from flant/ru-docs_api-eviction
[ru] Localization of /concepts/scheduling-eviction/api-eviction.mdpull/39508/head
commit
507a2216db
|
@ -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/).
|
|
@ -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/).
|
|
@ -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/).
|
|
@ -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'ов инициируется владельцами приложений или администраторами
|
||||
кластера. Внеплановое завершение работы обычно вызвано непредвиденными обстоятельствами различной природы,
|
||||
например, с недостатком ресурсов на узлах или случайными удалениями.
|
Loading…
Reference in New Issue