191 lines
10 KiB
Markdown
191 lines
10 KiB
Markdown
---
|
||
title: Диспетчер облачных контроллеров
|
||
content_type: concept
|
||
weight: 40
|
||
---
|
||
|
||
<!-- overview -->
|
||
|
||
{{< feature-state state="beta" for_k8s_version="v1.11" >}}
|
||
|
||
Технологии облачной инфраструктуры позволяют запускать Kubernetes в общедоступных, частных и гибридных облаках. Kubernetes верит в автоматизированную, управляемую API инфраструктуру без жесткой связи между компонентами.
|
||
|
||
{{< glossary_definition term_id="cloud-controller-manager" length="all" prepend="Диспетчер облачных контроллеров">}}
|
||
|
||
Диспетчер облачных контроллеров спроектирован с использованием механизма плагинов, которые позволяют различным облачным провайдерам интегрировать свои платформы с Kubernetes.
|
||
|
||
|
||
|
||
<!-- body -->
|
||
|
||
## Дизайн
|
||
|
||

|
||
|
||
Диспетчер облачных контроллеров работает в панели управления как реплицированный набор процессов (обычно это контейнер в Pod-ах). Каждый диспетчер облачных контроллеров реализует множество {{< glossary_tooltip text="контроллеров" term_id="controller" >}} в единственном процессе.
|
||
|
||
|
||
{{< note >}}
|
||
Вы также можете запустить диспетчер облачных контроллеров как {{< glossary_tooltip text="дополнение" term_id="addons" >}} Kubernetes, а не как часть панели управления.
|
||
{{< /note >}}
|
||
|
||
## Функции диспетчера облачных контроллеров {#functions-of-the-ccm}
|
||
|
||
Контроллеры внутри диспетчера облачных контроллеров включают в себя:
|
||
|
||
### Контроллер узла
|
||
|
||
Контроллер узла отвечает за создание объектов {{< glossary_tooltip text="узла" term_id="node" >}} при создании новых серверов в вашей облачной инфраструктуре. Контроллер узла получает информацию о работающих хостах внутри вашей арендуемой инфраструктуры облачного провайдера.
|
||
Контроллер узла выполняет следующие функции:
|
||
|
||
1. Инициализация объектов узла для каждого сервера, которые контроллер получает через API облачного провайдера.
|
||
2. Аннотирование и маркировка объектов узла специфичной для облака информацией, такой как регион узла и доступные ему ресурсы (процессор, память и т.д.).
|
||
3. Получение имени хоста и сетевых адресов.
|
||
4. Проверка работоспособности узла. В случае, если узел перестает отвечать на запросы, этот контроллер проверяет с помощью API вашего облачного провайдера, был ли сервер деактивирован / удален / прекращен. Если узел был удален из облака, контроллер удаляет объект узла из вашего Kubernetes кластера.
|
||
|
||
Некоторые облачные провайдеры реализуют его разделение на контроллер узла и отдельный контроллер жизненного цикла узла.
|
||
|
||
### Контроллер маршрута
|
||
|
||
Контроллер маршрута отвечает за соответствующую настройку маршрутов в облаке, чтобы контейнеры на разных узлах кластера Kubernetes могли взаимодействовать друг с другом.
|
||
|
||
В зависимости от облачного провайдера, контроллер маршрута способен также выделять блоки IP-адресов для сети Pod-ов.
|
||
|
||
### Контроллер сервисов
|
||
|
||
{{< glossary_tooltip text="Сервисы" term_id="service" >}} интегрируются с компонентами облачной инфраструктуры, такими как управляемые балансировщики нагрузки, IP-адреса, фильтрация сетевых пакетов и проверка работоспособности целевых объектов. Контроллер сервисов взаимодействует с API вашего облачного провайдера для настройки требуемых балансировщиков нагрузки и других компонентов инфраструктуры, когда вы объявляете ресурсы сервисов.
|
||
|
||
## Авторизация
|
||
|
||
В этом разделе разбирается доступ к различным объектам API, который нужен облачным контроллерам для выполнения своих операций.
|
||
|
||
### Контроллер узла {#authorization-node-controller}
|
||
|
||
Контроллер узла работает только с объектом узла. Он требует полного доступа на чтение и изменение объектов узла.
|
||
|
||
`v1/Node`:
|
||
|
||
- Get
|
||
- List
|
||
- Create
|
||
- Update
|
||
- Patch
|
||
- Watch
|
||
- Delete
|
||
|
||
### Контроллер маршрута {#authorization-route-controller}
|
||
|
||
Контроллер маршрута прослушивает создание объектов узла и соответствующим образом настраивает маршруты. Для этого требуется получить доступ к объектам узла.
|
||
|
||
`v1/Node`:
|
||
|
||
- Get
|
||
|
||
### Контроллер сервисов {#authorization-service-controller}
|
||
|
||
Контроллер сервисов прослушивает события Create, Update и Delete объектов служб, а затем соответствующим образом настраивает конечные точки для соответствующих сервисов.
|
||
|
||
Для доступа к сервисам требуется доступ к событиям List и Watch. Для обновления сервисов требуется доступ к событиям Patch и Update.
|
||
|
||
Чтобы настроить ресурсы конечных точек для сервисов, требуется доступ к событиям Create, List, Get, Watch и Update.
|
||
|
||
`v1/Service`:
|
||
|
||
- List
|
||
- Get
|
||
- Watch
|
||
- Patch
|
||
- Update
|
||
|
||
### Другие {#authorization-miscellaneous}
|
||
|
||
Реализация ядра диспетчера облачных контроллеров требует доступ для создания объектов событий, а для обеспечения безопасной работы требуется доступ к созданию сервисных учетных записей (ServiceAccounts).
|
||
|
||
`v1/Event`:
|
||
|
||
- Create
|
||
- Patch
|
||
- Update
|
||
|
||
`v1/ServiceAccount`:
|
||
|
||
- Create
|
||
|
||
{{< glossary_tooltip term_id="rbac" text="RBAC" >}} ClusterRole для диспетчера облачных контроллеров выглядит так:
|
||
|
||
```yaml
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: ClusterRole
|
||
metadata:
|
||
name: cloud-controller-manager
|
||
rules:
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- events
|
||
verbs:
|
||
- create
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- nodes
|
||
verbs:
|
||
- '*'
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- nodes/status
|
||
verbs:
|
||
- patch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- services
|
||
verbs:
|
||
- list
|
||
- patch
|
||
- update
|
||
- watch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- serviceaccounts
|
||
verbs:
|
||
- create
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- persistentvolumes
|
||
verbs:
|
||
- get
|
||
- list
|
||
- update
|
||
- watch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- endpoints
|
||
verbs:
|
||
- create
|
||
- get
|
||
- list
|
||
- watch
|
||
- update
|
||
```
|
||
|
||
|
||
## {{% heading "whatsnext" %}}
|
||
|
||
[Администрирование диспетчера облачных контроллеров](/docs/tasks/administer-cluster/running-cloud-controller/#cloud-controller-manager)
|
||
содержит инструкции по запуску и управлению диспетчером облачных контроллеров.
|
||
|
||
Хотите знать, как реализовать свой собственный диспетчер облачных контроллеров или расширить проект?
|
||
|
||
Диспетчер облачных контроллеров использует интерфейсы Go, которые позволяют реализовать подключение из любого облака. В частности, он использует интерфейс `CloudProvider`, который определен в [`cloud.go`](https://github.com/kubernetes/cloud-provider/blob/release-1.21/cloud.go#L42-L69) из [kubernetes/cloud-provider](https://github.com/kubernetes/cloud-provider).
|
||
|
||
Реализация общих контроллеров, описанных в этом документе (Node, Route, и Service), а также некоторые другие вспомогательные конструкции, вместе с общим интерфейсом облачного провайдера являются частью ядра Kubernetes. Особые реализации для облачных провайдеров находятся вне ядра Kubernetes и реализуют интерфейс `CloudProvider`.
|
||
|
||
Дополнительные сведения о разработке плагинов см. в разделе [Разработка диспетчера облачных контроллеров](/docs/tasks/administer-cluster/developing-cloud-controller-manager/).
|