Интеграция с Crossplane
Crossplane
Чтобы создать виртуальную машину Yandex Compute Cloud с помощью приложения Crossplane, установленного в кластере Kubernetes:
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
-
Если у вас еще нет интерфейса командной строки 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
и настройте его на работу с созданным кластером.
Создайте ресурсы с помощью Crossplane
-
Создайте манифест Crossplane
providerconfig.yml
:apiVersion: yandex-cloud.jet.crossplane.io/v1alpha1 kind: ProviderConfig metadata: name: yc-config spec: credentials: source: Secret secretRef: name: yc-creds namespace: <пространство_имен_для_Crossplane> key: credentials
-
Создайте манифест-шаблон
vm-instance-template.yml
, в котором описаны сеть, подсеть и ВМcrossplane-vm
, создаваемые с помощью Crossplane:apiVersion: vpc.yandex-cloud.jet.crossplane.io/v1alpha1 kind: Network metadata: name: <NET_NAME> annotations: crossplane.io/external-name: <NET_ID> spec: deletionPolicy: Orphan forProvider: name: <NET_NAME> folderId: <FOLDER_ID> --- apiVersion: vpc.yandex-cloud.jet.crossplane.io/v1alpha1 kind: Subnet metadata: name: <SUBNET_NAME> annotations: crossplane.io/external-name: <SUBNET_ID> spec: deletionPolicy: Orphan forProvider: name: <SUBNET_NAME> networkIdRef: name: <NET_NAME> v4CidrBlocks: - <SUBNET_PREFIX> zone: <ZONE_ID> folderId: <FOLDER_ID> --- apiVersion: compute.yandex-cloud.jet.crossplane.io/v1alpha1 kind: Instance metadata: name: <VM_NAME> spec: forProvider: name: <VM_NAME> platformId: standard-v2 zone: <ZONE_ID> resources: - cores: 2 memory: 4 bootDisk: - initializeParams: # LEMP stack # yc compute image get --folder-id standard-images --name=lemp-v20220606 --format=json | jq -r .id - imageId: <IMAGE_ID> networkInterface: - subnetIdRef: name: <SUBNET_NAME> folderId: <FOLDER_ID>
Где:
ZONE_ID
— зона доступности.VM_NAME
— имя ВМ, которая будет создана средствами Crossplane.NET_NAME
— имя облачной сети кластера Kubernetes.SUBNET_NAME
— имя подсети узлов кластера Kubernetes.SUBNET_ID
— идентификатор подсети.NET_ID
— идентификатор сети.SUBNET_PREFIX
— CIDR подсети.FOLDER_ID
— идентификатор каталога.IMAGE_ID
— идентификатор загрузочного образа ВМ. Его можно получить вместе со списком образов. В данном примере используется образ LEMP.
-
Примените манифест
providerconfig.yml
:kubectl apply -f providerconfig.yml
-
Примените манифест
vm-instance.yml
:kubectl apply -f vm-instance.yml
-
Проверьте состояние созданных ресурсов:
kubectl get network kubectl get subnet kubectl get instance
-
Убедитесь, что созданная ВМ
crossplane-vm
появилась в каталоге:yc compute instance list
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
Удалите
crossplane-vm
:kubectl delete instance crossplane-vm
-
Удалите остальные ресурсы:
ВручнуюTerraform-
В командной строке перейдите в директорию, в которой расположен актуальный конфигурационный файл Terraform с планом инфраструктуры.
-
Удалите конфигурационный файл
k8s-cluster.tf
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Все ресурсы, которые были описаны в конфигурационном файле
k8s-cluster.tf
, будут удалены. -
-