Интеграция с Crossplane
Crossplane
Чтобы создать виртуальную машину Yandex Compute Cloud с помощью приложения Crossplane, установленного в кластере Kubernetes:
- Подготовьте облако к работе.
- Создайте ресурсы Managed Service for Kubernetes.
- Создайте ресурсы Yandex Cloud с помощью Crossplane.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Установите утилиту потоковой обработки JSON-файлов
jq
.
Создайте ресурсы Managed Service for Kubernetes
-
Создайте кластер и группу узлов Kubernetes.
ВручнуюTerraform-
Если у вас еще нет сети, создайте ее.
-
Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Kubernetes и группа узлов.
-
- Сервисный аккаунт с ролями
k8s.clusters.agent
иvpc.publicAdmin
на каталог, в котором создается кластер Kubernetes. От его имени будут создаваться ресурсы, необходимые кластеру Kubernetes. - Сервисный аккаунт с ролью container-registry.images.puller. От его имени узлы будут скачивать из реестра необходимые Docker-образы.
Совет
Вы можете использовать один и тот же сервисный аккаунт для управления кластером Kubernetes и его группами узлов.
- Сервисный аккаунт с ролями
-
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте кластер Kubernetes и группу узлов любой подходящей конфигурации. При создании укажите группы безопасности, подготовленные ранее.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации кластера k8s-cluster.tf
. В файле описаны:-
Сеть.
-
Кластер Kubernetes.
-
Сервисный аккаунт, необходимый для работы кластера и группы узлов Managed Service for Kubernetes.
-
Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
-
Укажите в файле конфигурации:
- Идентификатор каталога.
- Версию Kubernetes для кластера и групп узлов Kubernetes.
- CIDR кластера Kubernetes.
- Имя сервисного аккаунта кластера Managed Service for Kubernetes.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
-
-
Установите kubectl
и настройте его на работу с созданным кластером.
Создайте ресурсы Yandex Cloud с помощью Crossplane
-
Определите, какие ресурсы вы хотите создать с помощью Crossplane. Чтобы получить список доступных ресурсов, выполните команду:
kubectl get crd | grep yandex-cloud.jet.crossplane.io
-
Определите параметры этих ресурсов. Чтобы посмотреть доступные параметры для конкретного ресурса, выполните команду:
kubectl describe crd <имя_ресурса>
-
Создайте манифест-шаблон
vm-instance-template.yml
, в котором описаны существующие в каталоге сеть и подсеть, а также новая ВМcrossplane-vm
, создаваемая с помощью Crossplane:# Добавление в конфигурацию существующей сети apiVersion: vpc.yandex-cloud.jet.crossplane.io/v1alpha1 kind: Network metadata: name: <имя_существующей_сети> annotations: # Указать провайдеру на существующую сеть crossplane.io/external-name: <идентификатор_существующей_сети> spec: # Запретить удаление существующей сети deletionPolicy: Orphan forProvider: name: <имя_существующей_сети> providerConfigRef: name: default --- # Добавление в конфигурацию существующей подсети apiVersion: vpc.yandex-cloud.jet.crossplane.io/v1alpha1 kind: Subnet metadata: name: <имя_существующей_подсети> annotations: # Указать провайдеру на существующую подсеть crossplane.io/external-name: <идентификатор_существующей_подсети> spec: # Запретить удаление существующей подсети deletionPolicy: Orphan forProvider: name: <имя_существующей_подсети> networkIdRef: name: <имя_существующей_сети> v4CidrBlocks: - <IPv4_CIDR_существующей_подсети> providerConfigRef: name: default --- # Создание ВМ apiVersion: compute.yandex-cloud.jet.crossplane.io/v1alpha1 kind: Instance metadata: name: crossplane-vm spec: forProvider: name: crossplane-vm platformId: standard-v1 zone: ru-central1-a resources: - cores: 2 memory: 4 bootDisk: - initializeParams: - imageId: fd80bm0rh4rkepi5ksdi networkInterface: - subnetIdRef: name: <имя_существующей_подсети> # Автоматически предоставить ВМ публичный IP-адрес nat: true metadata: ssh-keys: "<публичный_ключ_SSH>" providerConfigRef: name: default # Записать реквизиты для подключения к ВМ в секрет writeConnectionSecretToRef: name: instance-conn namespace: default
В блоке с конфигурацией ВМ:
zone: ru-central1-a
— зона доступности, в которой будет развернута ВМ.name: crossplane-vm
— имя ВМ, которая будет создана средствами Crossplane.imageId: fd80bm0rh4rkepi5ksdi
— идентификатор загрузочного образа ВМ. Его можно получить вместе со списком образов. В данном примере используется образ Ubuntu 22.04 LTS.
Примеры конфигурации ресурсов Yandex Cloud см. в репозитории провайдера на GitHub
. -
Примените манифест
vm-instance-template.yml
:kubectl apply -f vm-instance-template.yml
-
Проверьте состояние созданных ресурсов:
kubectl get network kubectl get subnet kubectl get instance
-
Убедитесь, что созданная ВМ
crossplane-vm
появилась в каталоге:yc compute instance list
-
Чтобы получить из секрета данные для подключения к ВМ, выполните команду:
kubectl get secret instance-conn -o json | jq -r '.data | map_values(@base64d)'
Ожидаемый результат:
{ "external_ip": "<публичный_IP-адрес>", "fqdn": "<полное_доменное_имя>", "internal_ip": "<внутренний_IP-адрес>" }
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
Удалите ВМ
crossplane-vm
:kubectl delete instance crossplane-vm
-
Удалите остальные ресурсы:
ВручнуюTerraform-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
-