Провайдер Yandex Cloud для Kubernetes® Cluster API
cluster-api-provider-yandex
— провайдер для развертывания кластера Kubernetes в облачной инфраструктуре Yandex Cloud с помощью Kubernetes Cluster API.
Кластер разворачивается на базе виртуальных машин Yandex Compute Cloud и L7-балансировщика Yandex Application Load Balancer.
Преимущества создания кластера с помощью провайдера Yandex Cloud
- интеграция с API Yandex Cloud;
- декларативный подход к созданию и управлению кластером;
- кластер как CustomResourceDefinition;
- широкий спектр параметров для конфигурации вычислительных ресурсов кластера;
- пользовательские образы операционных систем для мастера и узлов;
- пользовательский Control Plane;
- альтернатива Terraform в CI-процессах.
Совместимость провайдера с Cluster API
Версия провайдера |
Версия Cluster API |
Совместимость |
v1alpha1 |
v1beta1 (v1.x) |
✓ |
Чтобы развернуть кластер Kubernetes в Yandex Cloud с помощью Cluster API:
- Подготовьте облако к работе.
- Настройте окружение.
- Подготовьте образ ОС для узлов кластера.
- Получите Docker-образ с провайдером Yandex Cloud.
- Установите провайдер Yandex Cloud и провайдер Kubernetes Cluster API.
- Сформируйте манифесты кластера.
- Разверните кластер.
- Подключитесь к кластеру.
- Установите в созданный кластер CCM.
- Установите в созданный кластер CNI.
- Проверьте связь управляющего кластера с созданным.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
-
Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
-
На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE
или TRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.
Подробнее об облаках и каталогах
Платные ресурсы
В стоимость поддержки инфраструктуры кластера входят:
Подготовьте инфраструктуру
-
Настройте сервисный аккаунт Yandex Cloud:
- Создайте сервисный аккаунт, от имени которого будут создаваться ресурсы кластеры.
- Назначьте сервисному аккаунту роли compute.editor и alb.editor на каталог.
- Получите авторизованный ключ для сервисного аккаунта в формате JSON.
-
Если в вашем каталоге еще нет облачной сети Virtual Private Cloud, создайте ее. Также создайте подсеть.
-
Инфраструктуре создаваемого кластера в Virtual Private Cloud назначается группа безопасности по умолчанию. Добавьте в эту группу следующие правила для входящего трафика:
Протокол |
Диапазон портов |
Тип источника |
Источник |
Описание |
TCP |
0-65535 |
Группа безопасности |
Balancer |
Проверки состояния L7-балансировщиком |
Any |
8443 |
CIDR |
0.0.0.0/0 |
Доступ к Kubernetes API |
-
Создаваемый кластер будет доступен в облачной сети по внутреннему IP-адресу. Чтобы обеспечить удаленный доступ в кластер, создайте вспомогательную ВМ в той же сети, в которой будет развернут кластер, и с той же группой безопасности. Установите на ВМ kubectl.
-
Создайте управляющий кластер и группу узлов Yandex Managed Service for Kubernetes. Из этого кластера будут осуществляться развертывание нового кластера с помощью Cluster API и управление кластерной инфраструктурой.
Также вы можете развернуть управляющий кластер локально, например с помощью утилиты kind.
[!IMPORTANT]
Чтобы иметь возможность загружать Docker-образы c компонентами, которые будут развернуты внутри управляющего и создаваемого кластеров, у этих кластеров должен быть доступ в интернет. Например, вы можете настроить NAT-шлюз в подсетях кластеров.
Настройте окружение
-
Установите следующие инструменты:
-
Настройте для kubectl
доступ к управляющему кластеру Kubernetes:
-
Склонируйте репозиторий cluster-api-provider-yandex
и перейдите в директорию с проектом:
git clone https://github.com/yandex-cloud/cluster-api-provider-yandex.git
cd cluster-api-provider-yandex
Подготовьте образ ОС для узлов кластера
Образ ОС, который будет развернут на узлах создаваемого кластера, должен быть подготовлен для работы с Kubernetes Cluster API, а также совместим с Compute Cloud.
Вы можете использовать готовый образ ОС на основе Ubuntu 24.04, подготовленный нами для работы с Kubernetes версии 1.31.4. Для этого при формировании манифеста кластера в переменной YANDEX_CONTROL_PLANE_MACHINE_IMAGE_ID
укажите идентификатор образа fd8a3kknu25826s8hbq3
.
[!IMPORTANT]
Образ создан исключительно в ознакомительных целях, использовать его в промышленной эксплуатации не рекомендуется.
Вы можете подготовить собственный образ ОС, следуя инструкции ниже:
-
Соберите образ ОС с помощью утилиты Image Builder.
См. также Подготовить образ диска для Compute Cloud.
-
Загрузите образ в Compute Cloud и сохраните его идентификатор.
Получите Docker-образ с провайдером Yandex Cloud
Вы можете использовать готовый Docker-образ с провайдером Yandex Cloud из публичного реестра Yandex Container Registry или собрать его самостоятельно из исходного кода.
Использовать готовый Docker-образ
-
Аутентифицируйтесь в реестре Container Registry с помощью Docker credential helper.
-
Добавьте в переменную окружения IMG
путь к Docker-образу с провайдером Yandex Cloud в публичном реестре:
export IMG=cr.yandex/crpsjg1coh47p81vh2lc/capy/cluster-api-provider-yandex:latest
Собрать Docker-образ из исходного кода
-
Создайте реестр Container Registry и сохраните его идентификатор.
-
Аутентифицируйтесь в реестре Container Registry с помощью Docker credential helper.
-
Добавьте в переменную окружения IMG
путь, по которому собранный Docker-образ будет сохранен в реестре:
export IMG=cr.yandex/<идентификатор_реестра>/cluster-api-provider-yandex:<тег>
-
Если вы собираете Docker-образ на компьютере с архитектурой, отличной от AMD64, отредактируйте в Makefile блок docker-build
:
docker build --platform linux/amd64 -t ${IMG} .
-
Запустите Docker daemon.
-
Соберите Docker-образ и загрузите его в реестр:
make docker-build docker-push
Установите провайдер Yandex Cloud и провайдер Kubernetes Cluster API
-
Инициализируйте управляющий кластер:
clusterctl init
В управляющий кластер будут установлены основные компоненты Kubernetes Cluster API, а также cert-manager.
-
Создайте в управляющем кластере CustomResourceDefinitions для создаваемого кластера:
make install
-
Получите список установленных CRD:
kubectl get crd | grep cluster.x-k8s.io
Чтобы получить манифест конкретного CRD, выполните команду:
kubectl get crd <имя_CRD> \
--output yaml
-
Создайте пространство имен для провайдера Yandex Cloud:
kubectl create namespace capy-system
-
Создайте секрет с авторизованным ключом сервисного аккаунта Yandex Cloud:
kubectl create secret generic yc-sa-key \
--from-file=key=<путь_к_файлу_с_авторизованным_ключом> \
--namespace capy-system
-
Установите провайдер Yandex Cloud:
make deploy
Сформируйте манифесты кластера
-
Выберите зону доступности, в которой вы хотите развернуть кластер.
-
Получите идентификаторы ресурсов Yandex Cloud для развертывания кластера:
-
Передайте идентификаторы ресурсов в переменные окружения:
export YANDEX_CONTROL_PLANE_MACHINE_IMAGE_ID=<идентификатор_образа>
export YANDEX_FOLDER_ID=<идентификатор_каталога>
export YANDEX_NETWORK_ID=<идентификатор_сети>
export YANDEX_SUBNET_ID=<идентификатор_подсети>
export YANDEX_ZONE_ID=<идентификатор_зоны_доступности>
-
Сформируйте манифесты кластера:
clusterctl generate cluster <имя_создаваемого_кластера> \
--from templates/cluster-template.yaml > /tmp/capy-cluster.yaml
По умолчанию согласно сгенерированному манифесту, для доступа в кластер будет развернут L7-балансировщик Application Load Balancer c динамическим внутренним IP-адресом. Вы можете присвоить L7-балансировщику фиксированный IP-адрес.
[!IMPORTANT]
После создания кластера, присвоить L7-балансировщику фиксированный IP-адрес будет нельзя.
Согласно сгенерированному манифесту будут развернуты три узла с Control Plane. Если вы хотите также сразу развернуть узлы для рабочей нагрузки, выполните команду:
clusterctl generate cluster <имя_создаваемого_кластера> \
--worker-machine-count <количество_узлов_для_рабочей_нагрузки> \
--from templates/cluster-template.yaml > /tmp/capy-cluster.yaml
(Опционально) Настройте эндпоинт API-сервера
Задайте в манифесте YandexCluster
следующие параметры для L7-балансировщика:
loadBalancer:
listener:
address: <фиксированный_IP-адрес_из_диапазона_подсети>
subnet:
id: <идентификатор_подсети>
Разверните кластер
kubectl apply -f /tmp/capy-cluster.yaml
За процессом развертывания кластера можно следить в консоли управления Yandex Cloud, а также в логах пода capy-controller-manager
:
kubectl logs <имя_пода_с_capy-controller-manager> \
--namespace capy-system \
--follow
Подключитесь к кластеру
Реквизиты для подключения к новому кластеру будут созданы в управляющем кластере в секрете <имя_создаваемого_кластера>-kubeconfig
.
-
Получите данные из секрета:
kubectl get secret <имя_создаваемого_кластера>-kubeconfig \
--output yaml | yq -r '.data.value' | base64 \
--decode > capy-cluster-config
-
Передайте на ВМ, находящейся в той же сети, в которой расположен новый кластер, файл с конфигурацией для kubectl
:
scp <путь_к_файлу_capy-cluster-config_на_локальном_компьютере> \
<имя_пользователя>@<публичный_IP-адрес_ВМ>:/home/<имя_пользователя>/.kube/config
-
Подключитесь к ВМ по SSH.
-
Подключитесь к новому кластеру:
kubectl cluster-info
Установите в созданный кластер CCM
Для обеспечения связи между ресурсами кластера и ресурсами Yandex Cloud, установите в созданный кластер Cloud Controller Manager, например Kubernetes Cloud Controller Manager for Yandex Cloud.
[!IMPORTANT]
Если вы хотите использовать решение Kubernetes Cloud Controller Manager for Yandex Cloud, добавьте в пример манифеста yandex-cloud-controller-manager.yaml для DaemonSet
актуальную версию Docker-образа и переменную окружения YANDEX_CLUSTER_NAME
с именем созданного кластера в значении.
Установите в созданный кластер CNI
Чтобы обеспечить сетевую функциональность для подов в новом кластере, установите в него Container Network Interface, например Cilium или Calico.
Подробнее см. в документации:
Проверьте связь управляющего кластера с созданным
-
На ВМ, находящейся в той же сети, в которой расположен новый кластер, убедитесь, что все поды с необходимыми системными компонентами развернуты в кластере:
kubectl get pods --all-namespaces
Пример вывода:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-695bcfd99c-rcc42 1/1 Running 0 3h55m
kube-system calico-node-9qhxj 1/1 Running 0 3h55m
kube-system coredns-7c65d6cfc9-52tvn 1/1 Running 0 4h50m
kube-system coredns-7c65d6cfc9-dpgvg 1/1 Running 0 4h50m
kube-system etcd-capy-cluster-control-plane-p646q 1/1 Running 0 4h50m
kube-system kube-apiserver-capy-cluster-control-plane-p646q 1/1 Running 0 4h50m
kube-system kube-controller-manager-capy-cluster-control-plane-p646q 1/1 Running 0 4h50m
kube-system kube-proxy-wb7jr 1/1 Running 0 4h50m
kube-system kube-scheduler-capy-cluster-control-plane-p646q 1/1 Running 0 4h50m
kube-system yandex-cloud-controller-manager-nwhwv 1/1 Running 0 26s
-
На локальном компьютере проверьте связь управляющего кластера с созданным:
clusterctl describe cluster <имя_созданного_кластера>
Пример вывода:
NAME READY SEVERITY REASON SINCE MESSAGE
Cluster/capy-cluster True 10s
├─ClusterInfrastructure - YandexCluster/capy-cluster
└─ControlPlane - KubeadmControlPlane/capy-cluster-control-plane True 10s
└─3 Machines... True 3m9s See capy-cluster-control-plane-cf72l, capy-cluster-control-plane-g9jw7, ...
Как удалить созданные ресурсы
Удалите кластер
kubectl delete -f /tmp/capy-cluster.yaml
Удалите CRD из управляющего кластера
make uninstall
Удалите контроллер провайдера Yandex Cloud из управляющего кластера
make undeploy
Удалите вспомогательные ресурсы Yandex Cloud
Чтобы перестать платить за вспомогательные ресурсы, если вы их создавали, удалите:
См. также