VK Cloud logo
Обновлена 25 апреля 2024 г. в 12:05

Создание кластера Spark

В статье приведен пример создания кластера Cloud Spark при помощи Terraform.

При создании кластера используются:

Перед созданием инстанса

  1. Ознакомьтесь с доступными ресурсами и квотами для региона, в котором планируется создать инстанс. Для разных регионов могут быть настроены разные квоты.

    Если вы хотите увеличить квоты, обратитесь в техническую поддержку.

  2. Установите Terraform и настройте провайдер, если этого еще не сделано.

  3. Для работы потребуется провайдер версии 0.7.0 или выше. Убедитесь, что версия провайдера в файле vkcs_provider.tf не ниже. Если версия провайдера ниже, обновите провайдер.

1. Создайте файл с описанием кластера

В примере ниже кластер создается в следующей конфигурации:

  • регион по умолчанию, зона доступности GZ1;
  • минамальное количеств worker-узлов — 2, максимальное количество worker-узлов — 100;
  • режим работы кластера — DEV;
  • переход кластера в спящий режим через 120 минут неактивности;
  • удаление кластера через 1440 минут неактивности.

Создайте файл конфигурации Terraform main.tf с содержимым:

locals {  spark_configuration = {    "spark.eventLog.dir"     = "s3a://spark-bucket"    "spark.eventLog.enabled" = "true"  }  spark_environment_variables = {    "ENV_VAR_1" : "env_var_1_value"    "ENV_VAR_2" : "env_var_2_value"  }}resource "vkcs_mlplatform_spark_k8s" "spark_k8s" {  name              = "tf-example"  availability_zone = "GZ1"  network_id        = vkcs_networking_network.app.id  subnet_id         = vkcs_networking_subnet.app.id  node_groups = [    {      node_count          = 2      flavor_id           = data.vkcs_compute_flavor.basic.id      autoscaling_enabled = true      min_nodes           = 2      max_nodes           = 100    }  ]  cluster_mode = "DEV"  registry_id  = vkcs_mlplatform_k8s_registry.k8s_registry.id  ip_pool      = data.vkcs_networking_network.extnet.id  suspend_after_inactive_min = 120  delete_after_inactive_min  = 1440  spark_configuration   = yamlencode(local.spark_configuration)  environment_variables = yamlencode(local.spark_environment_variables)}

Здесь:

  • network_id — идентификатор сети, в которой будет размещен кластер. Кластер может быть размещен в существующей сети или в новой. Идентификатор можно указать в манифесте, получить из источника данных или ресурса.

  • flavor_id — идентификатор типа ВМ. Идентификатор можно прописать в манифесте или получить из источника данных.

  • registry_id — идентификатор реестра Docker, образы из которого будут использоваться при запуске заданий Spark. Можно создать новый реестр или использовать существующий.

  • ip_pool — идентификатор внешней сети для пула IP-адресов кластера.

  • spark_configuration — перечень свойств (properties), отвечающих за конфигурацию Spark.

  • environment_variables — перечень переменных среды окружения для Spark.

2. Создайте файл с описанием инстанса K8S Docker Registry

Создайте файл конфигурации Terraform registry.tf c описанием инстанса K8S Docker Registry:

resource "vkcs_mlplatform_k8s_registry" "k8s_registry" {  name              = "tf-example"  admin_name        = "admin"  admin_password    = "Password12!Password"  flavor_id         = data.vkcs_compute_flavor.basic.id  availability_zone = "GZ1"  boot_volume = {    volume_type = "ceph-ssd"  }  networks = [    {      network_id = vkcs_networking_network.app.id      ip_pool = data.vkcs_networking_network.extnet.id    },  ]}

Здесь:

  • flavor_id — идентификатор типа ВМ. Идентификатор можно прописать в манифесте или получить из источника данных.

  • network_id — идентификатор сети, в которой будет размещен инстанс. Инстанс может быть размещен в существующей сети или в новой. Идентификатор можно указать в манифесте, получить из источника данных или ресурса.

  • ip_pool — идентификатор внешней сети для пула IP-адресов кластера.

3. (Опционально) Создайте файл с описанием источника данных для типа ВМ

Создайте файл конфигурации Terraform flavor.tf c описанием нужного типа ВМ:

data "vkcs_compute_flavor" "basic" {  name = "STD2-4-4"}

Указанный в файле тип ВМ будет использоваться для создания инстансов в вашем проекте Terraform.

4. (Опционально) Создайте файл с описанием сетевой инфраструктуры для кластера

Создайте файл конфигурации Terraform network.tf с описанием сетевой инфраструктуры для кластера:

Пример описания источника данных для существующей в проекте сети:

data "vkcs_networking_network" "default" {  name = "default"  sdn = "neutron"}

5. Создайте необходимые ресурсы с помощью Terraform

  1. Поместите файлы конфигурации Terraform в одну директорию:

    • vkcs_provider.tf;
    • main.tf;
    • registry.tf;
    • flavor.tf (если создавался);
    • network.tf(если создавался).
  2. Перейдите в эту директорию.

  3. Убедитесь, что конфигурационные файлы корректны и содержат нужные изменения:

    terraform validate && terraform plan
  4. Примените изменения:

    terraform apply

    При запросе подтверждения введите yes.

  5. Дождитесь завершения операции.

6. Проверьте применение конфигурации

Убедитесь, что кластер Spark был успешно создан:

  1. Перейдите в личный кабинет VK Cloud.
  2. Перейдите в раздел ML PlatformИнстансы. Убедитесь, что кластер Spark создан и активен.

Удалите неиспользуемые ресурсы

Если созданные с помощью Terraform ресурсы вам больше не нужны, удалите их:

  1. Перейдите в директорию с файлами конфигурации Terraform.

  2. Выполните команду:

    terraform destroy

    При запросе подтверждения введите yes.

  3. Дождитесь завершения операции.