Модуль cloud-provider-yandex управляет взаимодействием с облачными ресурсами Yandex Cloud. Он позволяет модулю node-manager использовать ресурсы Yandex Cloud при заказе узлов для описанной группы узлов.
Подробнее с описанием модуля можно ознакомиться в соответствующем разделе документации.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля cloud-provider-yandex на уровне 2 модели C4 и его взаимодействия с другими компонентами Deckhouse Kubernetes Platform (DKP) изображены на следующей диаграмме:

Компоненты модуля
Модуль состоит из следующих компонентов:
-
Сloud-controller-manager — реализация Сloud сontroller manager для Yandex Cloud. Обеспечивает взаимодействие с облаком Yandex Cloud и выполняет следующие функции:
-
реализует связь 1:1 между объектом узла в Kubernetes (Node) и виртуальной машиной в облачном провайдере. Для этого:
- заполняет поля
spec.providerIDиnodeInfoресурса Node; - проверяет наличие виртуальной машины в облаке и при ее отсутствии удаляет ресурс Node в кластере.
- заполняет поля
- при создании ресурса Service типа LoadBalancer в Kubernetes создаёт балансировщик в облаке, который направляет трафик извне к узлам кластера;
- создает сетевые маршруты для сети
PodNetworkна стороне Yandex Cloud.
Подробнее о cloud-controller-manager можно почитать в документации Kubernetes.
Состоит из одного контейнера:
- yandex-cloud-controller-manager.
-
-
Cloud-data-discoverer — отвечает за сбор данных из API облачного провайдера и предоставление их в виде секрета
kube-system/d8-cloud-provider-discovery-data. Этот секрет содержит параметры конкретного облака, которые используется другими компонентами модуляcloud-provider-yandex.Состоит из следующих контейнеров:
- cloud-data-discoverer — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам контейнера cloud-data-discoverer.
-
Cloud-metrics-exporter — экспортирует метрики сервисов облака Yandex Cloud.
Состоит из следующих контейнеров:
- cloud-metrics-exporter — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам, получаемым от cloud-metrics-exporter.
-
CSI-драйвер (yandex) — реализация CSI-драйвера для Yandex Cloud. С типовой архитектурой CSI-драйвера, используемого в модулях
cloud-provider-*DKP, можно ознакомиться на соответствующей странице документации.CSI-драйвер (yandex) не поддерживает работу со снимками. По этой причине в поде
csi-controllerотсутствует сайдкар-контейнер snapshotter (external-snapshotter).
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
-
Kube-apiserver:
- мониторинг ресурсов PersistentVolumeClaim, VolumeAttachment;
- создание секрета
kube-system/d8-cloud-provider-discovery-data; - синхронизация узлов Kubernetes с виртуальными машинами в облаке;
- мониторинг сервисов типа LoadBalancer;
- авторизация запросов на получение метрик.
-
Yandex Cloud:
- получение параметров облака;
- получение
ProviderIDи прочей информации о виртуальных машинах, которые являются узлами кластера; - управление балансировщиками;
- управление дисками;
- создание сетевых маршрутов для сети
PodNetwork; - получение метрик сервисов облака.
С модулем взаимодействуют следующие внешние компоненты:
-
Prometheus-main:
- сбор метрик cloud-data-discoverer;
- сбор метрик сервисов облака через cloud-metrics-exporter.
Непрямые взаимодействия:
-
Модуль
cloud-provider-yandexпредоставляет модулюnode-managerследующие артефакты:- шаблоны для создания кастомных ресурсов для конкретного провайдера, которые
cloud-provider-yandexиспользует для создания виртуальных машин в облаке; - секрет
kube-system/d8-node-manager-cloud-provider, в котором содержатся все необходимые настройки для подключения к облаку и создания CloudEphemeral-узлов. Эти настройки прописываются в кастомных ресурсах, созданных на основе упомянутых выше шаблонов и учитывающих особенности провайдера.
- шаблоны для создания кастомных ресурсов для конкретного провайдера, которые
-
Модуль
cloud-provider-yandexпредоставляет компоненты Terraform/OpenTofu для Yandex Cloud, которые используются при сборке исполняемого файла утилиты dhctl в модулеterraform-manager, такие как:- Terraform/OpenTofu-провайдер;
- Terraform-модули;
-
layouts — набор схем размещения в облаке, определяющих, как создается базовая инфраструктура, как и с какими дополнительными характеристиками для данного размещения должны создаваться узлы. Например, в одной схеме узлы могут иметь публичные IP-адреса, а в другой — нет. Каждый layout включает три модуля:
base-infrastructure— базовая инфраструктура (например, создание сетей), может быть пустым;master-node;static-node.