Top.Mail.Ru
поддержка 24/7
поддержка 24/7

Управление облаком с помощью Terraform

Экспертный материал  

Михаил Ястребов | Системный администратор

Одним из самых популярных инструментов для развертывания множества виртуальных машин в облаке является Terraform. Давайте рассмотрим, что это такое и зачем он нужен.

Terraform – это инструмент для развертывания инфраструктуры в коде. Фактически это язык программирования инфраструктуры, позволяющий в кратчайшие сроки развернуть группу виртуальных машин в большинстве популярных облачных провайдеров (Yandex, Google, Amazon, Alibaba, Microsoft, VMware) и выполнить необходимые базовые настройки сети. 

Terraform выделяется на фоне большинства подобных инструментов благодаря ряду преимуществ:

Высокая скорость развертывания тенантов (они же – пользовательские виртуальные среды). Обычно чем больше клиентов, тем выше нагрузка на техподдержку, которая отвечает за публикацию новых ресурсов. С Terraform же пользователи сами меняют параметры виртуальных машин без привлечения инженеров.

Моментальная проверка плана активации теннанта. С помощью описания кода инфраструктуры можно сразу же уточнить всю информацию о состоянии виртуальной машины.

Управление ресурсами в большинстве популярных облаков: от Yandex, Google, Amazon, Alibaba, Microsoft до частных платформ на базе VMware vCloud Director, предлагающих услуги IaaS, SaaS и PaaS.

Управление сразу несколькими облаками. Для повышения отказоустойчивости можно распространять инфраструктуру между платформами, используя лишь одну конфигурацию для создания, диагностики и настройки.

Удобное создания демо-стендов для тестирования и отладки ПО. Можно параллельно проверять ПО в разных средах, моментально изменять и удалять ресурсы лишь с одним планом построения ресурсов.

Если вы используете другую среду виртуализации, вы можете самостоятельно написать файл конфигурации для вашей инфраструктуры.

Подготовка облака для работы с Terraform

Для работы с Terraform вам понадобится логин и пароль администратора вашего аккаунта, точки входа Api и Provider файл, который вы можете скачать у своего облачного провайдера или на официальном сайте Terraform .

Скриншот terraform 

Мы будем использовать VMware Cloud Director Provider, с которым можно ознакомиться  по ссылке.

Для добавления provider внесите в манифест (например, файл main.tf)  строки указанные  «use provider».

добавления provider

Данные ресурсы не доступны без VPN на территории РФ.

Установка Terraform для разных OS

Установка Terraform на Windows

Перейдите на сайт https://www.terraform.io/downloads

Выберите Windows и скачайте исполнительный файл Terraform.

Скопируйте скачанный файл в директорию, из которой вы планируете его запускать.

Перейдите в System Variables (Панель управления --> Система --> Дополнительные параметры системы --> Переменные среды) и укажите папку, в которой расположен .exe файл Terraform.

Установка Terraform на macOS

Для установки в macOS по упрощённому сценарию предварительно установите Homebrew введя команду

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

Выполните команду «brew update»

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

Установка terraform на Linux

Для ubuntu/Debian

wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

Centos

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform

Fedora

sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
sudo dnf -y install terraform

Amazon linux

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform

Или можно так же воспользоваться пакетным менеджером Homebrew:

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

Инструкции по установке для других операционных систем вы можете найти на сайте www.terraform.io в разделе downloads.

Настраиваем конфигурацию

При необходимости обновите Terraform. Для этого достаточно заменить файл Terraform на более позднюю версию в папке его расположения. На операционных системах macOs можно выполнить команду «brew update terraform» .

Выберите удобный для вас текстовый редактор, для написания файла конфигурации. Это может быть стандартный Блокнот, Notepad++, Atom, TextEdit, Vi, Vim, Nano, а также любая IDE с модулями для Terraform, упрощающие написание кода, как Visual Studio Code и другие.

Для подключения к инфраструктуре создайте файлmain.tf со следующим содержимым:

provider "vcd" {
  user               = "ваш пользователь в vcd"
  password       = "ваш пароль"
  org                = "название организации в vcd  org-organization"
  url                  = "https://vcd.combocloud.ru/cloudapi"
}

Выполните команду «terraform init» и Terraform скачает все необходимые файлы для работы. (Команду необходимо выполнять с включенным VPN).

terraform init

Initializing the backend...

Initializing provider plugins...
- Reusing previous version of vmware/vcd from the dependency lock file
- Using previously-installed vmware/vcd v3.4.0

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should 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, other
commands will detect it and remind you to do so if necessary.

Вы увидите сообщение следующего содержания. Это значит, что Provider файл обновлен успешно.

Выполните команду «terraform plan» и вы увидите какие ресурсы будут созданы или удалены Terraform.

terraform plan

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # vcd_vapp.terraform will be created
  + resource "vcd_vapp" "terraform" {
      + href        = (known after apply)
      + id          = (known after apply)
      + name        = "terraform"
      + power_on    = false
      + status      = (known after apply)
      + status_text = (known after apply)
    }

  # vcd_vapp_org_network.terraform-net will be created
  + resource "vcd_vapp_org_network" "terraform-net" {
      + id                    = (known after apply)
      + is_fenced             = false
      + org_network_name      = "LAN-Yastrebov"
      + retain_ip_mac_enabled = false
      + vapp_name             = "terraform"
    }

  # vcd_vapp_vm.centos7 will be created
  + resource "vcd_vapp_vm" "centos7" {
      + accept_all_eulas               = true
      + catalog_name                   = "Templates"
      + computer_name                  = (known after apply)
      + cpu_cores                      = (known after apply)
      + cpu_hot_add_enabled            = false
      + cpus                           = 4
      + description                    = (known after apply)
      + expose_hardware_virtualization = false
      + hardware_version               = (known after apply)
      + href                           = (known after apply)
      + id                             = (known after apply)
      + internal_disk                  = (known after apply)
      + memory                         = 2048
      + memory_hot_add_enabled         = false
      + name                           = "centos7"
      + os_type                        = (known after apply)
      + power_on                       = true
      + prevent_update_power_off       = false
      + sizing_policy_id               = (known after apply)
      + storage_profile                = (known after apply)
      + template_name                  = "CentOS-7-x86_64-minimal"
      + vapp_name                      = "terraform"
      + vm_type                        = (known after apply)

      + customization {
          + admin_password                      = (sensitive value)
          + allow_local_admin_password          = (known after apply)
          + auto_generate_password              = (known after apply)
          + change_sid                          = (known after apply)
          + enabled                             = (known after apply)
          + force                               = (known after apply)
          + initscript                          = (known after apply)
          + join_domain                         = (known after apply)
          + join_domain_account_ou              = (known after apply)
          + join_domain_name                    = (known after apply)
          + join_domain_password                = (sensitive value)
          + join_domain_user                    = (known after apply)
          + join_org_domain                     = (known after apply)
          + must_change_password_on_first_login = (known after apply)
          + number_of_auto_logons               = (known after apply)
        }

      + network {
          + adapter_type       = (known after apply)
          + connected          = true
          + ip                 = (known after apply)
          + ip_allocation_mode = "POOL"
          + is_primary         = (known after apply)
          + mac                = (known after apply)
          + name               = "LAN-Yastrebov"
          + type               = "org"
        }
    }

Plan: 3 to add, 0 to change, 0 to destroy.

───────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't

Подготавливаем план инфраструктуры и сценарий использования

Под планом инфраструктуры в данном описании будет подразумеваться создание одной тестовой ВМ, подключенной к сети. Для примера, создадим vApp и ВМ. Для этого в том же файле main.tf можно дописать следующее:

Создадим vApp

#Create vApp terraform
resource "vcd_vapp" "terraform" {
  name = "terraform"

  metadata = {

  }
}

Подключим vapp к сети

resource "vcd_vapp_org_network" "terraform-net" {
  vapp_name = vcd_vapp.terraform.name
  org_network_name = "имя routed сети"
}

Создадим vm

resource "vcd_vapp_vm" "centos7" {

  vapp_name = "укажите имя vapp"
  name = "centos7"
  catalog_name = "Templates"
  template_name = "CentOS-7-x86_64-minimal"
  memory = 2048
  cpus = 2
  network {
    name               = "LAN-Yastrebov"
    type               = "org"
    ip_allocation_mode = "POOL"
          }
  }

Выполнив команду «terraform apply», вы получите следующий результат:

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Что означает успешное выполнение команды 1 ресурс создан, 0 изменено и 0 удалено. После выполнения данной команды в Cloud Director создалась 1 виртуальная машина с указанными параметрами: 2 CPU, 2048 оперативная память в указанном в параметрах vApp и IP адресом полученным из пула сети в вашем облаке.

Для удаления ресурсов введите команду «terraform destroy»

Данная команда удалит всю вашу инфраструктуру с помощью Terraform. Все сервера, что вы создали ранее с помощью Terraform, будут удалены. Для частичного удаления ресурсов используйте Terraform Count в файле конфигурации. (Данное решение может быть изложено в дальнейшем).

После проделанных манипуляций в Cloud Director была создана 1 виртуальная машина с указанными параметрами: 2 CPU, 2048 оперативная память в указанном в параметрах vApp.

В облаке Сorpsoft24, как и у большинства популярных облачных провайдеров, вы можете использовать Terraform для быстрого развертывания инфраструктуры или ее свертывания. Terraform позволяет мгновенно создать, трансформировать или уничтожить инфраструктуру.

Получить доступ к облачной инфраструктуре Corpsoft24

Загрузка ...