Skip to content

Commit

Permalink
Create & localize _index.md
Browse files Browse the repository at this point in the history
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
kirkonru authored and lis committed Feb 16, 2023
1 parent 4dfacee commit 87ece51
Show file tree
Hide file tree
Showing 4 changed files with 204 additions and 0 deletions.
35 changes: 35 additions & 0 deletions content/ru/docs/concepts/scheduling-eviction/_index.md
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 content/ru/docs/concepts/scheduling-eviction/api-eviction.md
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/).
24 changes: 24 additions & 0 deletions content/ru/docs/reference/glossary/api-eviction.md
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/).
24 changes: 24 additions & 0 deletions content/ru/docs/reference/glossary/pod-disruption.md
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'ов инициируется владельцами приложений или администраторами
кластера. Внеплановое завершение работы обычно вызвано непредвиденными обстоятельствами различной природы,
например, с недостатком ресурсов на узлах или случайными удалениями.

0 comments on commit 87ece51

Please sign in to comment.