---
title: "Создать отказоустойчивый кластер Managed Kubernetes через Terraform"
sidebar_label: "Создать отказоустойчивый кластер"
description: "Как создать отказоустойчивый кластер Managed Kubernetes на облачном сервере с одной группой нод и сетевой инфраструктурой"
sidebar_position: 2
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import ConfigureProviders from '@site/terraform/_partials/common/configure-providers.mdx'
import ConfigureProvidersConfig from '@site/terraform/_partials/common/configure-providers-config.mdx'
import CreateRouter from '@site/terraform/_partials/cloud-networks/create-router.mdx'
import CreateNetworks from '@site/terraform/_partials/managed-kubernetes/create-networks.mdx'
import CreateResourcesAlert from '@site/terraform/_partials/common/create-resources-alert.mdx'
import {TabItemLabel} from '@selectel/docux/components'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'

# Создать отказоустойчивый кластер Managed Kubernetes через Terraform

<CreateResourcesAlert />

<br />

1. Опционально: [настройте провайдеры](#configure-providers).
2. [Создайте приватную сеть и подсеть](#create-networks).
3. [Создайте облачный роутер, подключенный к интернету](#create-router).
4. [Создайте отказоустойчивый кластер](#create-high-availability-cluster).
5. [Создайте группу нод с сетевым диском](#create-node-group).

## Конфигурационные файлы \{#config}

<details>
  <summary>Пример файла для настройки провайдеров</summary>

  <ConfigureProvidersConfig />
</details>

<details>
  <summary>Пример файла для отказоустойчивого кластера с нодами произвольной конфигурации</summary>

  ```hcl
  resource "openstack_networking_network_v2" "network_1" {
    name           = "private-network"
    admin_state_up = "true"
  }

  resource "openstack_networking_subnet_v2" "subnet_1" {
    name       = "private-subnet"
    network_id = openstack_networking_network_v2.network_1.id
    cidr       = "192.168.199.0/24"
  }

  data "openstack_networking_network_v2" "external_network_1" {
    external = true
  }

  resource "openstack_networking_router_v2" "router_1" {
    name                = "router"
    external_network_id = data.openstack_networking_network_v2.external_network_1.id
  }

  resource "openstack_networking_router_interface_v2" "router_interface_1" {
    router_id = openstack_networking_router_v2.router_1.id
    subnet_id = openstack_networking_subnet_v2.subnet_1.id
  }

  data "selectel_mks_kube_versions_v1" "versions" {
    project_id = selectel_vpc_project_v2.project_1.id
    region     = "ru-9"
  }

  resource "selectel_mks_cluster_v1" "cluster_1" {
    name                     = "high-availability-cluster"
    project_id               = selectel_vpc_project_v2.project_1.id
    region                   = "ru-9"
    kube_version             = data.selectel_mks_kube_versions_v1.versions.latest_version
    network_id               = openstack_networking_network_v2.network_1.id
    subnet_id                = openstack_networking_subnet_v2.subnet_1.id
    maintenance_window_start = "00:00:00"
  }

  resource "selectel_mks_nodegroup_v1" "nodegroup_1" {
    cluster_id                   = selectel_mks_cluster_v1.cluster_1.id
    project_id                   = selectel_mks_cluster_v1.cluster_1.project_id
    region                       = selectel_mks_cluster_v1.cluster_1.region
    availability_zone            = "ru-9a"
    nodes_count                  = "2"
    cpus                         = 2
    ram_mb                       = 4096
    volume_gb                    = 32
    volume_type                  = "fast.ru-9a"
    install_nvidia_device_plugin = false
    labels                       = {
      "label-key0": "label-value0",
      "label-key1": "label-value1",
      "label-key2": "label-value2",
    }
  }
  ```
</details>

<details>
  <summary>Пример файла для отказоустойчивого кластера с нодами фиксированной конфигурации (флейворами)</summary>

  ```hcl
  resource "openstack_networking_network_v2" "network_1" {
    name           = "private-network"
    admin_state_up = "true"
  }

  resource "openstack_networking_subnet_v2" "subnet_1" {
    network_id = openstack_networking_network_v2.network_1.id
    cidr       = "192.168.199.0/24"
  }

  data "openstack_networking_network_v2" "external_network_1" {
    external = true
  }

  resource "openstack_networking_router_v2" "router_1" {
    name                = "router"
    external_network_id = data.openstack_networking_network_v2.external_network_1.id
  }

  resource "openstack_networking_router_interface_v2" "router_interface_1" {
    router_id = openstack_networking_router_v2.router_1.id
    subnet_id = openstack_networking_subnet_v2.subnet_1.id
  }

  data "selectel_mks_kube_versions_v1" "versions" {
    project_id = selectel_vpc_project_v2.project_1.id
    region     = "ru-9"
  }

  resource "selectel_mks_cluster_v1" "cluster_1" {
    name                     = "high-availability-cluster"
    project_id               = selectel_vpc_project_v2.project_1.id
    region                   = "ru-9"
    kube_version             = data.selectel_mks_kube_versions_v1.versions.latest_version
    network_id               = openstack_networking_network_v2.network_1.id
    subnet_id                = openstack_networking_subnet_v2.subnet_1.id
    maintenance_window_start = "00:00:00"
  }

  resource "selectel_mks_nodegroup_v1" "nodegroup_1" {
    cluster_id                   = selectel_mks_cluster_v1.cluster_1.id
    project_id                   = selectel_mks_cluster_v1.cluster_1.project_id
    region                       = selectel_mks_cluster_v1.cluster_1.region
    availability_zone            = "ru-9a"
    nodes_count                  = "2"
    flavor_id                    = "1013"
    volume_gb                    = 32
    volume_type                  = "fast.ru-9a"
    install_nvidia_device_plugin = false
    labels                       = {
      "label-key0": "label-value0",
      "label-key1": "label-value1",
      "label-key2": "label-value2",
    }
  }

  ```
</details>

## 1. Опционально: настроить провайдеры \{#configure-providers}

Если вы [настроили провайдеры](/terraform/configure-terraform-environment/#configure-providers) Selectel и OpenStack, пропустите этот шаг.

<ConfigureProviders />

## 2. Создать приватную сеть и подсеть \{#create-networks}

<CreateNetworks />

## 3. Создать облачный роутер, подключенный к интернету \{#create-router}

<CreateRouter />

## 4. Создать отказоустойчивый кластер \{#create-high-availability-cluster}

```hcl
data "selectel_mks_kube_versions_v1" "versions" {
  project_id = selectel_vpc_project_v2.project_1.id
  region     = "ru-9"
}

resource "selectel_mks_cluster_v1" "cluster_1" {
  name                     = "high-availability-cluster"
  project_id               = selectel_vpc_project_v2.project_1.id
  region                   = "ru-9"
  kube_version             = data.selectel_mks_kube_versions_v1.versions.latest_version
  network_id               = openstack_networking_network_v2.network_1.id
  subnet_id                = openstack_networking_subnet_v2.subnet_1.id
  maintenance_window_start = "00:00:00"
}
```

Здесь:

* `name` — имя кластера, максимум 32 символа — латинские буквы, цифры и дефисы;

* `region` — [пул](/infrastructure/locations/#pool), в котором будет создан кластер, например `ru-9`. Список доступных пулов можно посмотреть в инструкции [Доступность продуктов в локациях](/infrastructure/product-availability-by-location/).

Посмотрите подробное описание ресурса [selectel\_mks\_cluster\_v1](/terraform/selectel-provider-reference/resources/mks_cluster_v1/).

## 5. Создать группу нод с сетевым диском \{#create-node-group}

<Tabs queryString="create-node-group">
  <TabItem value="flavors" default>
    <TabItemLabel>
      Фиксированные конфигурации
    </TabItemLabel>

    ```hcl
    resource "selectel_mks_nodegroup_v1" "nodegroup_1" {
      cluster_id                   = selectel_mks_cluster_v1.cluster_1.id
      project_id                   = selectel_mks_cluster_v1.cluster_1.project_id
      region                       = selectel_mks_cluster_v1.cluster_1.region
      availability_zone            = "ru-9a"
      nodes_count                  = "2"
      flavor_id                    = "1013"
      volume_gb                    = 32
      volume_type                  = "fast.ru-9a"
      install_nvidia_device_plugin = false
      labels                       = {
        "label-key0": "label-value0",
        "label-key1": "label-value1",
        "label-key2": "label-value2",
      }
    }
    ```

    Здесь:

    * `availability_zone` — [сегмент пула](/infrastructure/locations/#pool), в котором будет находиться группа нод, например `ru-9a`;

    * `nodes_count` — количество рабочих нод в группе нод. Максимальное количество нод — 15;

    * `flavor_id` — ID флейвора. Флейворы соответствуют [конфигурациям облачного сервера](/cloud-servers/create/configurations/) и определяют количество vCPU, RAM и размер локального диска (опционально) ноды. Например, `3031` — флейвор для создания ноды с конфигурацией линейки GPU Line с 4 vCPU, 32 ГБ RAM. Вы можете [посмотреть список флейворов в определенном пуле в OpenStack CLI](/managed-kubernetes/node-groups/create-node-group/#view-flavors-pool-list);

    * `volume_gb` — размер диска в ГБ. Если размер диска указан в конфигурации, которую вы выбрали в аргументе `flavor_id`, то аргумент `volume_gb` не нужно указывать. Лимиты доступных значений можно посмотреть в таблице [Сравнение конфигураций нод на облачном сервере](/managed-kubernetes/node-groups/configurations/#comparing-node-configurations);

    * `volume_type` — тип диска в формате `<type>.<pool_segment>`, например `basic.ru-9a`:

      * `<type>` — `basic`, `universal` или `fast`;
      * `<pool_segment>` — [сегмент пула](/infrastructure/locations/#pool), в котором будет создан сетевой диск, например `ru-9a`;

    * `install_nvidia_device_plugin` — подтверждает или отменяет установку драйверов GPU и NVIDIA® Device Plugin:

      * `true` — для флейворов с GPU подтверждает установку драйверов GPU и NVIDIA® Device Plugin;
      * `false` — для флейворов с GPU и без GPU отменяет установку драйверов GPU и NVIDIA® Device Plugin. Вы можете самостоятельно [установить драйверы для групп нод с GPU](/managed-kubernetes/node-groups/gpu-drivers/#install-gpu-drivers).

    Посмотрите подробное описание ресурса [selectel\_mks\_nodegroup\_v1](/terraform/selectel-provider-reference/resources/mks_nodegroup_v1/).
  </TabItem>

  <TabItem value="custom">
    <TabItemLabel>
      Произвольная конфигурация
    </TabItemLabel>

    ```hcl
    resource "selectel_mks_nodegroup_v1" "nodegroup_1" {
      cluster_id                   = selectel_mks_cluster_v1.cluster_1.id
      project_id                   = selectel_mks_cluster_v1.cluster_1.project_id
      region                       = selectel_mks_cluster_v1.cluster_1.region
      availability_zone            = "ru-9a"
      nodes_count                  = "2"
      cpus                         = 2
      ram_mb                       = 4096
      volume_gb                    = 32
      volume_type                  = "fast.ru-9a"
      install_nvidia_device_plugin = false
      labels                       = {
        "label-key0": "label-value0",
        "label-key1": "label-value1",
        "label-key2": "label-value2",
      }
    }
    ```

    Здесь:

    * `availability_zone` — [сегмент пула](/infrastructure/locations/#pool), в котором будет находиться группа нод, например `ru-9a`;

    * `nodes_count` — количество рабочих нод в группе нод. Максимальное количество нод — 15;

    * `cpus` — количество vCPU для каждой ноды;

    * `ram_mb` — количество RAM для каждой ноды в МБ;

    * `volume_gb` — размер диска в ГБ;

    * `volume_type` — тип диска в формате `<type>.<pool_segment>`, например `basic.ru-9a`:

      * `<type>` — `basic`, `universal` или `fast`;
      * `<pool_segment>` — [сегмент пула](/infrastructure/locations/#pool), в котором будет создан сетевой диск, например `ru-9a`;

    * `install_nvidia_device_plugin` — подтверждает или отменяет установку драйверов GPU и NVIDIA® Device Plugin:

      * `true` — для флейворов с GPU подтверждает установку драйверов GPU и NVIDIA® Device Plugin;
      * `false` — для флейворов с GPU и без GPU отменяет установку драйверов GPU и NVIDIA® Device Plugin. Вы можете самостоятельно [установить драйверы для групп нод с GPU](/managed-kubernetes/node-groups/gpu-drivers/#install-gpu-drivers).

    Посмотрите подробное описание ресурса [selectel\_mks\_nodegroup\_v1](/terraform/selectel-provider-reference/resources/mks_nodegroup_v1/).
  </TabItem>
</Tabs>

<Formbricks />
