Skip to content

Commit 87ece51

Browse files
kirkonrulis
authored and
lis
committed
Create & localize _index.md
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
1 parent 4dfacee commit 87ece51

File tree

4 files changed

+204
-0
lines changed

4 files changed

+204
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
title: "Планирование, приоритизация и вытеснение"
3+
weight: 95
4+
content_type: concept
5+
description: >
6+
В Kubernetes под планированием понимается поиск подходящих узлов, на которых kubelet сможет запустить Pod'ы.
7+
Приоритизация — процесс завершения работы Pod'ов с более низким приоритетом и высвобождения места для Pod'ов
8+
с более высоким приоритетом. Вытеснение — это проактивное завершение работы одного или нескольких Pod'ов на
9+
узлах с дефицитом ресурсов.
10+
11+
no_list: true
12+
---
13+
14+
В Kubernetes под планированием понимается поиск {{<glossary_tooltip text="узлов" term_id="node">}}, подходящих для размещения {{<glossary_tooltip text="Pod'ов" term_id="pod">}} так, чтобы {{<glossary_tooltip text="kubelet" term_id="kubelet">}}
15+
мог их запустить. Приоритизация (упреждение; preemption) — процесс завершения работы Pod'ов
16+
с более низким {{<glossary_tooltip text="приоритетом" term_id="pod-priority">}} с освобождением места для Pod'ов с более высоким приоритетом. Вытеснение (eviction) — завершение работы одного или нескольких Pod'ов на узлах.
17+
18+
## Планирование
19+
20+
* [Планировщик Kubernetes](/docs/concepts/scheduling-eviction/kube-scheduler/);
21+
* [Распределение Pod'ов по узлам](/docs/concepts/scheduling-eviction/assign-pod-node/);
22+
* [Overhead Pod'а](/docs/concepts/scheduling-eviction/pod-overhead/);
23+
* [Ограничения на топологию распределения Pod'ов](/docs/concepts/scheduling-eviction/topology-spread-constraints/);
24+
* [Ограничения (taints) и допуски (tolerations)](/docs/concepts/scheduling-eviction/taint-and-toleration/);
25+
* [Фреймворк для планирования](/docs/concepts/scheduling-eviction/scheduling-framework);
26+
* [Настройка производительности планировщика](/docs/concepts/scheduling-eviction/scheduler-perf-tuning/);
27+
* [Упаковка расширенных ресурсов](/docs/concepts/scheduling-eviction/resource-bin-packing/).
28+
29+
## Завершение работы Pod'ов
30+
31+
{{<glossary_definition term_id="pod-disruption" length="all">}}
32+
33+
* [Приоритет и приоритизация Pod'ов](/docs/concepts/scheduling-eviction/pod-priority-preemption/);
34+
* [Вытеснение из-за недостатка ресурсов на узле](/docs/concepts/scheduling-eviction/node-pressure-eviction/);
35+
* [Вытеснение, инициированное API](/docs/concepts/scheduling-eviction/api-eviction/).
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
---
2+
title: Вытеснение, инициированное через API
3+
content_type: concept
4+
weight: 110
5+
---
6+
7+
{{< glossary_definition term_id="api-eviction" length="short" >}} </br>
8+
9+
Вытеснение можно инициировать напрямую с помощью Eviction API или программно,
10+
используя клиент {{<glossary_tooltip term_id="kube-apiserver" text="API-сервера">}}
11+
(например, командой `kubectl drain`). В результате будет создан объект `Eviction`,
12+
который запустит процесс контролируемого завершения работы Pod'а.
13+
14+
Вытеснения, инициированные через API, учитывают настройки [`PodDisruptionBudget`](/docs/tasks/run-application/configure-pdb/)
15+
и [`terminationGracePeriodSeconds`](/docs/concepts/workloads/pods/pod-lifecycle#pod-termination).
16+
17+
Создание с помощью API объекта Eviction для Pod'а аналогично выполнению
18+
[операции `DELETE`](/docs/reference/kubernetes-api/workload-resources/pod-v1/#delete-delete-a-pod)
19+
для этого Pod'а, которая контролируется политикой.
20+
21+
## Вызов API Eviction
22+
23+
Для доступа к API Kubernetes и создания объекта `Eviction` можно воспользоваться [клиентской библиотекой](/docs/tasks/administer-cluster/access-cluster-api/#programmatic-access-to-the-api). Необходимая операция оформляется в виде POST-запроса (см. пример ниже):
24+
25+
{{< tabs name="Eviction_example" >}}
26+
{{% tab name="policy/v1" %}}
27+
{{< note >}}
28+
Вытеснение с версией `policy/v1` доступно начиная с v1.22. Для более ранних релизов используйте `policy/v1beta1`.
29+
{{< /note >}}
30+
31+
```json
32+
{
33+
"apiVersion": "policy/v1",
34+
"kind": "Eviction",
35+
"metadata": {
36+
"name": "quux",
37+
"namespace": "default"
38+
}
39+
}
40+
```
41+
{{% /tab %}}
42+
{{% tab name="policy/v1beta1" %}}
43+
{{< note >}}
44+
Признана устаревшей в v1.22; заменена на `policy/v1`.
45+
{{< /note >}}
46+
47+
```json
48+
{
49+
"apiVersion": "policy/v1beta1",
50+
"kind": "Eviction",
51+
"metadata": {
52+
"name": "quux",
53+
"namespace": "default"
54+
}
55+
}
56+
```
57+
{{% /tab %}}
58+
{{< /tabs >}}
59+
60+
Также можно попытаться выполнить операцию вытеснения,
61+
обратившись к API с помощью `curl` или `wget`, как показано в следующем примере:
62+
63+
```bash
64+
curl -v -H 'Content-type: application/json' https://your-cluster-api-endpoint.example/api/v1/namespaces/default/pods/quux/eviction -d @eviction.json
65+
```
66+
67+
## Как работает вытеснение, инициированное через API
68+
69+
При вытеснении, инициированном через API, сервер API выполняет admission-проверки
70+
и отвечает одним из следующих способов:
71+
72+
* `200 OK`: вытеснение разрешено, подресурс `Eviction` создан,
73+
Pod удален (аналогично отправке запроса `DELETE` на URL Pod'а).
74+
* `429 Too Many Requests`: вытеснение в данный момент не разрешено из-за настроек
75+
{{<glossary_tooltip term_id="pod-disruption-budget" text="PodDisruptionBudget">}}.
76+
Попытку вытеснения можно повторить позже. Такой ответ также может быть вызван
77+
работой механизма по ограничению частоты запросов к API.
78+
* `500 Internal Server Error`: вытесение запрещено из-за неправильной конфигурации;
79+
например, несколько PodDisruptionBudget'ов могут ссылаться на один и тот же Pod.
80+
81+
Если Pod, предназначенный для вытеснения, не является частью рабочей нагрузки
82+
с настроенным PodDisruptionBudget'ом, сервер API всегда возвращает `200 OK` и
83+
разрешает вытеснение.
84+
85+
В случае, если вытеснение разрешено, процесс удаления Pod'а выглядит следующим образом:
86+
87+
1. К ресурсу `Pod` на сервере API добавляется метка времени удаления,
88+
после чего сервер API считает ресурс Pod завершенным (terminated). Ресурс `Pod` также помечается
89+
настроенным grace-периодом.
90+
1. {{<glossary_tooltip term_id="kubelet" text="kubelet">}} на узле, где запущен
91+
локальный Pod, замечает, что ресурс `Pod` помечен на удаление, и приступает к
92+
корректному завершению работы локального Pod'а.
93+
1. Пока kubelet завершает работу Pod'а, управляющий слой удаляет Pod из объектов
94+
{{<glossary_tooltip term_id="endpoint" text="Endpoint">}} и
95+
{{<glossary_tooltip term_id="endpoint-slice" text="EndpointSlice">}}.
96+
В результате контроллеры больше не рассматривают Pod как валидный объект.
97+
1. После истечения периода корректного завершения работы (grace-периода) kubelet
98+
принудительно завершает работу локального Pod'а.
99+
1. kubelet передает API-серверу информацию о необходимости удалить ресурс `Pod`.
100+
1. Сервер API удаляет ресурс `Pod`.
101+
102+
## Зависшие вытеснения
103+
104+
В некоторых ситуациях сбой приводит к тому, что API Eviction начинает возвращать
105+
исключительно ответы `429` или `500`. Такое может случиться, если, например,
106+
за создание Pod'ов для приложения отвечает ReplicaSet, однако новые Pod'ы не
107+
переходят в состояние `Ready`. Подобное поведение также может наблюдаться в случаях,
108+
когда у последнего вытесненного Pod'а слишком долгий период завершения работы (grace-период).
109+
110+
Одно из следующих решений может помочь решить проблему:
111+
112+
* Прервите или приостановите автоматическую операцию, вызвавшую сбой.
113+
Перед повторным запуском операции внимательно изучите сбойное приложение.
114+
* Подождите некоторое время, затем напрямую удалите Pod из управляющего слоя
115+
кластера вместо того, чтобы пытаться удалить его с помощью Eviction API.
116+
117+
## {{% heading "whatsnext" %}}
118+
119+
* Обеспечение работоспособности приложений с помощью [Pod Disruption Budget](/docs/tasks/run-application/configure-pdb/).
120+
* [Вытеснение из-за дефицита ресурсов на узле](/docs/concepts/scheduling-eviction/node-pressure-eviction/).
121+
* [Приоритет Pod'а и приоритизация](/docs/concepts/scheduling-eviction/pod-priority-preemption/).
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
title: Вытеснение, инициированное через API
3+
id: api-eviction
4+
date: 2021-04-27
5+
full_link: /docs/concepts/scheduling-eviction/api-eviction/
6+
short_description: >
7+
Вытеснение, инициированное через API — процесс, при котором с помощью Eviction API создается объект Eviction,
8+
который запускает корректное завершение работы Pod'а.
9+
aka:
10+
tags:
11+
- operation
12+
---
13+
Вытеснение, инициированное через API — процесс, при котором с помощью [Eviction API](/docs/reference/generated/kubernetes-api/{{<param "version">}}/#create-eviction-pod-v1-core)
14+
создается объект `Eviction`, который запускает корректное ��авершение работы Pod'а.
15+
16+
<!--more-->
17+
18+
Вытеснение можно запросить через Eviction API, обратившись к нему напрямую, либо программно (через клиент API-сервера — например, с помощью команды `kubectl drain`). При этом будет создан объект `Eviction`, на основании которого API-сервер завершит работу Pod'а.
19+
20+
Вытеснения, инициированные через API, учитывают заданные параметры [`PodDisruptionBudget`](/docs/tasks/run-application/configure-pdb/) (минимальное количество реплик, которые должны быть доступны для данного развертывания в любой момент времени) и [`terminationGracePeriodSeconds`](/docs/concepts/workloads/pods/pod-lifecycle#pod-termination) (период ожидания корректного завершения работы Pod'а).
21+
22+
Обратите внимание: вытеснение, инициированное через API — не то же самое, что вытеснение из-за [дефицита ресурсов на узле](/docs/concepts/scheduling-eviction/node-pressure-eviction/).
23+
24+
* Дополнительная информация доступна в разделе ["Вытеснение, инициированное API"](/docs/concepts/scheduling-eviction/api-eviction/).
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
id: pod-disruption
3+
title: Нарушение работы Pod'ов
4+
full_link: /docs/concepts/workloads/pods/disruptions/
5+
date: 2021-05-12
6+
short_description: >
7+
Процесс, в ходе которого происходит плановое или принудительное завершение работы Pod'ов на узлах.
8+
9+
aka:
10+
related:
11+
- pod
12+
- container
13+
tags:
14+
- operation
15+
---
16+
17+
[Нарушение работы Pod'ов (Pod disruption)](/docs/concepts/workloads/pods/disruptions/) — процесс,
18+
в ходе которого происходит плановое или внеплановое (принудительное) завершение работы Pod'ов на узлах.
19+
20+
<!--more-->
21+
22+
Плановое завершение работы Pod'ов инициируется владельцами приложений или администраторами
23+
кластера. Внеплановое завершение работы обычно вызвано непредвиденными обстоятельствами различной природы,
24+
например, с недостатком ресурсов на узлах или случайными удалениями.

0 commit comments

Comments
 (0)