С помощью этого руководства вы научитесь автоматически развертывать инфраструктуру в облаке Cloud.ru Evolution при помощи инструмента Terraform на примере создания кластера Managed Kubernetes.
Вы будете использовать следующие сервисы:
«Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина.
Managed Kubernetes — сервис управления кластерами Kubernetes на вычислительных ресурсах облака.
Terraform — инструмент для управления IaC.
Шаги:
Зарегистрируйтесь в личном кабинете Cloud.ru.
Если вы уже зарегистрированы, войдите под своей учетной записью.
Создайте ключ доступа и сохраните Key ID (логин) и Key Secret (пароль). Это данные для аутентификации и подключения к сервисам Cloud.ru вашего проекта.
Создайте сервисный аккаунт для интеграции с другими сервисами облака Evolution вашего проекта.
Установите инструмент для работы с кодом, например Visual Studio Code, или используйте стандартный терминал, например bash, cmd или PowerShell.
Установите Terraform-провайдер.
Шаг с командой terraform init пока пропустите.
Проверьте, что установка прошла корректно:
terraform --version
Должна отобразиться версия Terraform.
Создайте локальную папку для проекта.
В папке проекта создайте файл main.tf и добавьте в него код:
terraform {required_providers {cloudru = {source = "cloud.ru/cloudru/cloud"version = "2.0.0"}}}provider "cloudru" {project_id = "<your-project-id>"auth_key_id = "<your-key-id>"auth_secret = "<your-key-secret>"endpoints = {iam_endpoint = "iam.api.cloud.ru:443"compute_endpoint = "compute.api.cloud.ru:443"mk8s_endpoint = "mk8s.api.cloud.ru:443"}}
Где:
<your-project-id> — идентификатор проекта.
<your-key-id> — логин ключа доступа, который вы создали перед началом работы.
<your-key-secret> — пароль ключа доступа, который вы создали перед началом работы.
Сохраните файл main.tf. С помощью него вы задали конфигурацию для провайдера Terraform и точки обращения к сервисам Cloud.ru.
В терминале перейдите в папку проекта и выполните команду:
terraform init
Если все прошло успешно, вы увидите похожий текст:
Terraform has been successfully initialized!You may now begin working with Terraform. Try running "terraform plan" to seeany changes that are required for your infrastructure. All Terraform commandsshould now work.If you ever set or change modules or backend configuration for Terraform,rerun this command to reinitialize your working directory. If you forget, othercommands will detect it and remind you to do so if necessary.
На этом шаге вы создадите файл конфигурации и примените его.
В каталоге проекта создайте файл конфигурации kuber.tf и добавьте в него код:
data "cloudru_evolution_compute_flavor_collection" "datasource_flavor" {project_id = "<your-project-id>"}data "cloudru_evolution_compute_zone_collection" "datasource_zone" {project_id = "<your-project-id>"}resource "cloudru_evolution_mk8s_cluster" "kuber" {project_id = "<your-project-id>"name = "tf-cluster"identity_configuration = {cluster_sa_id = "<your-sa-id>"}sizing_configuration = {master_count = 1flavor_id = data.cloudru_evolution_compute_flavor_collection.datasource_flavor.flavors[index(data.cloudru_evolution_compute_flavor_collection.datasource_flavor.flavors.*.name, "lowcost10-2-4")].id}control_plane_zones = [data.cloudru_evolution_compute_zone_collection.datasource_zone.zones[index(data.cloudru_evolution_compute_zone_collection.datasource_zone.zones.*.name, "ru.AZ-2")].id]control_plane_version = "v1.34.1"network_configuration_request = {services_subnet_cidr = "10.96.0.0/12"pods_subnet_cidr = "10.1.0.0/16"kube_api_internet = falseprivate_vip_subnet_id = "<your-private-vip-id>"}}resource "cloudru_evolution_mk8s_node_pool" "kuber_nodepool" {name = "tf-worker-pool"cluster_id = cloudru_evolution_mk8s_cluster.kuber.idmachine_configuration_request = {flavor_id = data.cloudru_evolution_compute_flavor_collection.datasource_flavor.flavors[index(data.cloudru_evolution_compute_flavor_collection.datasource_flavor.flavors.*.name, "lowcost10-2-4")].iddisk = {type_name = "SSD"size = 30}}scale_policy = {fixed_scale = {count = 1}}network_configuration_request = {nodes_subnet_id = "<your-nodes-subnet-id>"}version = "v1.34.1"update_configuration = {strategy = "NODE_POOL_UPDATE_STRATEGY_ROLLING_UPDATE"}depends_on = [cloudru_evolution_mk8s_cluster.kuber]}
Где:
<your-project-id> — идентификатор проекта.
<your-sa-id> — сервисный аккаунт, который вы создали перед началом работы.
<your-private-vip-id> — идентификатор подсети, из которой будет выделен внутренний IP-адрес.
<your-nodes-subnet-id> — идентификатор подсети, из которой для узлов будут назначаться IP-адреса.
С помощью этой конфигурации вы создадите новые ресурсы:
кластер Managed Kubernetes с одним мастер-узлом;
одну группу узлов с одним узлом.
Сохраните файл kuber.tf.
В терминале перейдите в папку проекта и выполните команду:
terraform validate
Если все прошло успешно, вы увидите похожий текст:
Success! The configuration is valid.
При необходимости устраните ошибки в конфигурации.
Выполните команду:
terraform apply
Убедитесь, что Terraform планирует добавить два ресурса, введите «yes» и нажмите Enter.
Если развертывание прошло успешно, вы увидите следующее сообщение:
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Перейдите в личный кабинет Cloud.ru Evolution и проверьте, что все созданные ресурсы отображаются.
Подключитесь к кластеру и выполните команду:
kubectl cluster-info
Команда выведет информацию о вашем кластере.
Вы познакомились с механизмом развертывания облачных ресурсов Terraform и научились работать с инструментами в рамках концепции Infrastructure as Code.