Merge pull request #38081 from flant/ru-docs_api-eviction

[ru] Localization of /concepts/scheduling-eviction/api-eviction.md
pull/39508/head
Kubernetes Prow Robot 2023-02-16 19:51:38 -08:00 committed by GitHub
commit 507a2216db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 204 additions and 0 deletions

View File

@ -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/).

View File

@ -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/).

View File

@ -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/).

View File

@ -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'ов инициируется владельцами приложений или администраторами
кластера. Внеплановое завершение работы обычно вызвано непредвиденными обстоятельствами различной природы,
например, с недостатком ресурсов на узлах или случайными удалениями.