Написать в техподдержку Позвонить нам
Админпанель Выход

Содержание статьи:

    Terraform для MCS

    На данный момент MCS поддерживает сразу 2 Terraform провайдера: OpenStack для управления IaaS-сервисами и собственный MCS Terraform Provider для управления PaaS-сервисами. Для того, чтобы управлять кластерами Kubernetes в облаке Mail.ru Cloud Solutions потребуется подключить одновременно OpenStack terraform provider и MCS terraform provider.

    Детальная инструкция по провайдеру MCS для Terraform доступна по этой ссылке https://mcs.mail.ru/terraform/docs 

    Для начала использования MCS Terrafom Provider нужно выполнить следующие шаги:

    Установка terraform

    Скачать terraform на официальном ресурсе и воспользоваться инструкцией по его установке.

    Настройка провайдера

    Для начала использования провайдера terraform MCS следует выполнить следующие действия:

    Примечание

    MCS Terraform Provider опубликован в официальном репозитории Terraform. Документация и примеры использования доступны на сайте Terraform.

    1. Создать директорию, в которой будут храниться конфигурационные файлы, например, `mcs_terraform`.
    2. Перейти в директорию `mcs_terraform` и создать в ней файл `main.tf`, а для использования переменных при создании ресурсов также создать файл `vars.tf`.
    3. Скачать конфигурационные файл OpenStack Terraform Provider и MCS Terraform Provider по следующей ссылке, доступной в личном кабинете после авторизации, сохранить оба файла в папку `mcs_terraform`
    4. В файлах `mcs_provider.tf` и `openstack_provider.tf` указать пароль от учетной записи в поле `password`

    Внимание

    Для корректной работы обоих провайдеров необходимо убедиться, что в переменных окружения не установлена переменная `OS_USER_DOMAIN_ID`. Ее также можно убрать, выполнив команду:

    unset OS_USER_DOMAIN_ID

             5. В файле "main.tf" добавить следующий блок:

    terraform {
        required_providers {
            mcs = {
                source  = "MailRuCloudSolutions/mcs"
                version = "~> 0.3.0"
            }
            openstack = {
                source = "terraform-provider-openstack/openstack"
            }
        }
    }

    Создание ресурсов 

    Для создания и управления ресурсами требуется выполнить следующие шаги:

    Описать в файле `main.tf` ресурсы для создания. Например, для создания кластера с группой узлов вставить следующее:

    data "mcs_kubernetes_clustertemplate" "ct1" {
    # версия кластера Kubernetes
      version = "1.20.4"
    }
    data "openstack_compute_flavor_v2" "k8s" {
    #тип виртуальной машины
    name = "Standard-2-4-40"
    }
    #описывает сам кластер
    resource "mcs_kubernetes_cluster" "mycluster" {
      cluster_template_id = data.mcs_kubernetes_clustertemplate.ct1.id
      subnet_id = "your_subnet_id"
      network_id = "your_network_id"
      master_flavor = data.openstack_compute_flavor_v2.k8s.id
      keypair = "your_keypair_name"
    }
    
    #описывает Node Group кластера. У одного кластера может быть много Node Groups, но в крайнем случае может и не быть ни одной Node Group
    resource "mcs_kubernetes_node_group" "myng" {
      cluster_id = mcs_kubernetes_cluster.mycluster.id
      node_count = 1
    }

    Примечание

    Для удобства заполнения некоторых `id` можно использовать `data sources`. Они начинаются с метки data и читают уже существующие ресурсы.


    Создание или использование keypair (ключевой пары):

    # Прочитает существующую ключевую пару. Для доступа к атрибутам используйте `data.openstack_compute_keypair_v2.kp`
    data "openstack_compute_keypair_v2" "kp" {
     name = "my-keypair"
    }
    
    
    # Сгенерирует пару ключей
    resource "openstack_compute_keypair_v2" "test-keypair" {
     name = "my-keypair"
    }
     
    # Создание с существующей парой ключей
    resource "openstack_compute_keypair_v2" "test-keypair" {
     name       = "my-keypair"
     public_key = "ssh-rsa your_public_key"
    }

    Создания новых сетевых сущностей или чтения существующих:

    # Чтение существующих ресурсов
    data "openstack_networking_network_v2" "k8s_network" {
     name = "your_network_name"
    }
     
    data "openstack_networking_subnet_v2" "k8s_subnet" {
     name = "your_subnet_name"
    }
    
    
    # Создание новых ресурсов
    resource "openstack_networking_network_v2" "k8s" {
     name           = "k8s-net"
     admin_state_up = true
    }
     
    resource "openstack_networking_subnet_v2" "k8s-subnetwork" {
     name            = "k8s-subnet"
     network_id      = openstack_networking_network_v2.k8s.id
     cidr            = "192.168.0.0/24"
     ip_version      = 4
     dns_nameservers = ["8.8.8.8", "8.8.4.4"]
    }
     
    data "openstack_networking_network_v2" "extnet" {
     name = "ext-net"
    }
     
    resource "openstack_networking_router_v2" "k8s" {
     name                = "k8s-router"
     admin_state_up      = true
     external_network_id = data.openstack_networking_network_v2.extnet.id
    }
     
    resource "openstack_networking_router_interface_v2" "k8s" {
     router_id = openstack_networking_router_v2.k8s.id
     subnet_id = openstack_networking_subnet_v2.k8s-subnetwork.id
    }

    Применение конфигурации

    1. Выполнить команду:
      terraform init
    2. Для того чтобы увидеть, какие ресурсы будут созданы, выполнить
      terraform plan
    3. Для применения выбранной конфигурации выполнить
      terraform apply

      и ввести `yes`.

    Удаление ресурсов

    Выполнить команду:

    terraform destroy

    и ввести `yes`.

    Полезна ли была эта статья?