Интеграция с Crossplane
Crossplane — надстройка для Kubernetes с открытым исходным кодом, которая позволяет собрать решения от разных поставщиков в единую инфраструктуру и предоставить разработчикам приложений доступ к ней через высокоуровневые API. С помощью Crossplane пользователи могут управлять сторонними сервисами так же, как ресурсами Kubernetes.
Чтобы создать виртуальную машину Yandex Compute Cloud с помощью приложения Crossplane, установленного в кластере Kubernetes:
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Установите утилиту потоковой обработки JSON-файлов
jq
.
Создайте ресурсы Managed Service for Kubernetes
-
Создайте кластер и группу узлов Kubernetes.
ВручнуюС помощью Terraform-
Если у вас еще нет сети, создайте ее.
-
Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Kubernetes и группа узлов.
-
- С ролью editor на каталог, в котором создается кластер Kubernetes. От его имени будут создаваться ресурсы, необходимые кластеру Kubernetes.
- С ролью container-registry.images.puller. От его имени узлы будут скачивать из реестра необходимые Docker-образы.
Совет
Вы можете использовать один и тот же сервисный аккаунт для управления кластером Kubernetes и его группами узлов.
-
Создайте кластер Kubernetes и группу узлов любой подходящей конфигурации.
-
Если у вас еще нет Terraform, установите его.
-
Скачайте файл с настройками провайдера. Поместите его в отдельную рабочую директорию и укажите значения параметров.
-
Скачайте в ту же рабочую директорию файл конфигурации кластера k8s-cluster.tf. В файле описаны:
- Сеть.
- Подсеть.
- Группа безопасности и правила, необходимые для работы кластера Managed Service for Kubernetes, группы узлов и контейнера Yandex Container Registry:
- Правила для служебного трафика.
- Правила для доступа к API Kubernetes и управления кластером с помощью
kubectl
через порты 443 и 6443.
- Кластер Kubernetes.
- Сервисный аккаунт, необходимый для работы кластера и группы узлов Managed Service for Kubernetes.
-
Укажите в файле конфигурации:
- Идентификатор каталога.
- Версию Kubernetes для кластера и групп узлов Kubernetes.
- CIDR кластера Kubernetes.
- Имя сервисного аккаунта кластера Managed Service for Kubernetes.
-
Выполните команду
terraform init
в директории с конфигурационными файлами. Эта команда инициализирует провайдер, указанный в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.
-
-
-
Установите kubectl и настройте его на работу с созданным кластером.
-
Включите NAT в интернет для подсети узлов кластера Kubernetes.
Создайте ресурсы с помощью 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
, будут удалены. -
-