Skip to content

Commit 12238df

Browse files
committed
[ru] Localization of concepts/extend-kubernetes/operator.md
Signed-off-by: Anastasia Prasolova <[email protected]>
1 parent 1160f48 commit 12238df

File tree

2 files changed

+142
-0
lines changed

2 files changed

+142
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: Расширения Kubernetes
3+
weight: 110
4+
---
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
---
2+
title: Паттерн "Оператор"
3+
content_type: concept
4+
weight: 30
5+
---
6+
7+
<!-- overview -->
8+
9+
Операторы — это программные расширения для Kubernetes,
10+
которые используют [Custom Resources](/ru/docs/concepts/extend-kubernetes/api-extension/custom-resources/),
11+
чтобы управлять приложениями (или их компонентами).
12+
Операторы следуют принципам Kubernetes,
13+
в особенности, принципу [цикла управления](/ru/docs/concepts/architecture/controller).
14+
15+
<!-- body -->
16+
17+
## Зачем это нужно
18+
19+
_Паттерн "Оператор"_ пытается воспроизвести основную цель оператора —
20+
человека, который управляет сервисом (или их группой).
21+
Поскольку операторы поддерживают приложения и сервисы и знакомы с их спецификой,
22+
у них есть глубокое понимание того,
23+
как приложения должны работать,
24+
как их разворачивать и как решать возникающие с ними проблемы.
25+
26+
Зачастую инженеры, использующие Kubernetes, автоматизируют повторяющиеся задачи.
27+
Паттерн "Оператор" дает возможность писать код для автоматизации специфических задач,
28+
когда это не получается сделать средствами самого Kubernetes.
29+
30+
## Операторы в Kubernetes
31+
32+
Kubernetes создан для автоматизации:
33+
из коробки вы получаете множество встроенной автоматизации.
34+
Вы можете использовать Kubernetes, чтобы автоматизировать развертывание и запуск приложений,
35+
но *кроме того*, можно доработать Kubernetes собственными автоматизациями.
36+
37+
{{< glossary_tooltip text="Паттерн \"Оператор\"" term_id="operator-pattern" >}} позволяет расширить возможности кластера,
38+
не меняя код Kubernetes;
39+
достаточно привязать {{< glossary_tooltip text="контроллеры" term_id="controller" >}} к вашим ресурсам.
40+
Операторы — это клиенты Kubernetes API,
41+
которые выполняют роль контроллеров для [Custom Resources](/ru/docs/concepts/extend-kubernetes/api-extension/custom-resources/).
42+
43+
## Пример оператора {#example}
44+
45+
Ниже приведены примеры задач,
46+
которые вы можете автоматизировать с помощью операторов:
47+
48+
* развернуть приложение по запросу;
49+
* создать бэкап состояния этого приложения или восстановиться из бэкапа;
50+
* обновить код приложения одновременно с сопутствующими изменениями (например, с обновлением схемы БД или конфигурации);
51+
* анонсировать сервис для приложений, которые не поддерживают Kubernetes API, чтобы они смогли обнаружить его самостоятельно;
52+
* смоделировать отказ кластера или его частей, чтобы проверить их отказоустойчивость;
53+
* выбрать лидера в распределенном приложении, не инициируя внутренний процесс голосования за лидера.
54+
55+
Как именно может выглядеть оператор? Рассмотрим на примере:
56+
57+
1. Есть Custom Resource под названием SampleDB, который вы подготовили для кластера.
58+
2. Есть деплоймент; он поддерживает работу пода, в котором содержится контроллерная часть оператора.
59+
3. Есть образ контейнера с кодом оператора.
60+
4. Код контроллера делает запросы к управляющему слою,
61+
чтобы узнать, какие ресурсы настроены для SampleDB .
62+
5. Ядром оператора является код, который сообщает серверу API, как ресурсам достичь желаемого состояния:
63+
* Когда вы добавляете новый узел SampleDB,
64+
оператор создает PersistentVolumeClaims, чтобы предоставить долговременное хранилище данных,
65+
StatefulSet для запуска SampleDB и
66+
Job, который займется изначальной конфигурацией.
67+
* Когда вы удалите этот узел, оператор создаст снимок его состояния,
68+
после чего убедится, что StatefulSet и тома также удалены.
69+
6. Кроме того, оператор управляет созданием бэкапов.
70+
Для каждого запущенного узла SampleDB оператор запускает под,
71+
который подсоединяется к базе данных и создает бэкап.
72+
За данными для подключения к БД поды обращаются к ConfigMap или секретам.
73+
7. Поскольку цель оператора — это предоставить простую автоматизацию для ресурса, которым он управляет,
74+
в нем может быть еще какой-нибудь полезный код.
75+
В нашем примере этот код проверяет, запущена ли база данных нужной версии,
76+
и, если это не так, создает Job, чтобы ее обновить.
77+
78+
## Развертывание операторов
79+
80+
Чтобы развернуть оператор в кластере,
81+
обычно создают Custom Resource Definition и соответствующий контроллер.
82+
Как правило, контроллер запускается как обычное контейнеризованное приложение,
83+
то есть, вне {{< glossary_tooltip text="управляющего слоя" term_id="control-plane" >}};
84+
например, его можно запустить как деплоймент.
85+
86+
## Использование операторов {#using-operators}
87+
88+
Когда оператор развернут, вы можете им пользоваться,
89+
добавляя, изменяя или удаляя те сущности, которыми он управляет.
90+
В примере с оператором, ранее развернутым как деплоймент,
91+
вы можете выполнить команды:
92+
93+
```shell
94+
kubectl get SampleDB # найдем ранее настроенную базу данных
95+
96+
kubectl edit SampleDB/example-database # вручную изменим ее настройки
97+
```
98+
99+
&hellip;И все готово: оператор позаботится о том, чтобы применить изменения;
100+
в то же время он продолжит поддерживать работу уже запущенного приложения.
101+
102+
## Создание собственного оператора {#writing-operator}
103+
104+
Если в существующей экосистеме еще нет оператора,
105+
который делает то, что вам нужно,
106+
вы можете написать свой собственный.
107+
108+
Вы можете реализовать оператор (контроллер, если быть точнее) на любом языке или в любой среде,
109+
которые могут быть [клиентами Kubernetes API](/ru/docs/reference/using-api/client-libraries/).
110+
111+
Вы можете использовать библиотеки и инструменты ниже, чтобы написать свой Cloud Native-оператор.
112+
113+
{{% thirdparty-content %}}
114+
115+
* [Charmed Operator Framework](https://juju.is/)
116+
* [Java Operator SDK](https://github.com/operator-framework/java-operator-sdk)
117+
* [Kopf](https://github.com/nolar/kopf) (Kubernetes Operator Pythonic Framework)
118+
* [kube-rs](https://kube.rs/) (Rust)
119+
* [kubebuilder](https://book.kubebuilder.io/)
120+
* [KubeOps](https://buehler.github.io/dotnet-operator-sdk/) (SDK для написания операторов на .NET)
121+
* [Mast](https://docs.ansi.services/mast/user_guide/operator/)
122+
* [Metacontroller](https://metacontroller.github.io/metacontroller/intro.html) вместе с веб-хуками, которые вы реализуете самостоятельно
123+
* [Operator Framework](https://operatorframework.io)
124+
* [shell-operator](https://github.com/flant/shell-operator)
125+
126+
## {{% heading "whatsnext" %}}
127+
128+
129+
* Прочтите статью
130+
[Operator White Paper](https://github.com/cncf/tag-app-delivery/blob/163962c4b1cd70d085107fc579e3e04c2e14d59c/operator-wg/whitepaper/Operator-WhitePaper_v1-0.md)
131+
от {{< glossary_tooltip text="CNCF" term_id="cncf" >}}
132+
* Узнайте больше про [Custom Resources](/ru/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
133+
* Поищите готовые операторы, которые подходят вашим задачам, на [OperatorHub.io](https://operatorhub.io/)
134+
* [Поделитесь](https://operatorhub.io/) вашим оператором с другими
135+
* Прочтите [статью](https://web.archive.org/web/20170129131616/https://coreos.com/blog/introducing-operators.html),
136+
в которой впервые описан паттерн "Оператор", на сайте CoreOS (это архивная версия изначальной статьи)
137+
* Прочтите [статью](https://cloud.google.com/blog/products/containers-kubernetes/best-practices-for-building-kubernetes-operators-and-stateful-apps)
138+
о подходах к созданию операторов от Google Cloud

0 commit comments

Comments
 (0)