Поиск по сайту:

Используйте Terraform для управления кластером OpenStack.


Terraform — это декларативный язык, который может служить образцом инфраструктуры, над которой вы работаете.

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

Terraform — это программный инструмент «Инфраструктура как код» (IaC) с открытым исходным кодом, используемый для подготовки сетей, серверов, облачных платформ и многого другого. Terraform — это декларативный язык, который может служить образцом инфраструктуры, над которой вы работаете. Вы можете управлять им с помощью Git, и у него есть хороший вариант использования GitOps.

В этой статье рассматриваются основы управления кластером OpenStack с помощью Terraform. Я воссоздаю демонстрационный проект OpenStack, используя Terraform.

Установить Терраформ

Я использую CentOS в качестве хоста перехода, на котором запускаю Terraform. Согласно официальной документации, первым шагом является добавление репозитория Hashicorp:

$ sudo dnf config-manager \
--add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

Затем установите Terraform:

$ sudo dnf install terraform -y

Проверьте установку:

$ terraform –version

Если вы видите в ответ номер версии, вы установили Terraform.

Создайте скрипт Terraform для провайдера OpenStack.

В Terraform вам нужен провайдер. Поставщик — это преобразователь, который Terraform вызывает для преобразования вашего .tf в вызовы API для платформы, которую вы оркестрируете.

Существует три типа поставщиков: официальные, партнерские и сообщества.

  • Официальными поставщиками являются Hashicorp.
  • Поставщиков-партнеров обслуживают технологические компании, сотрудничающие с Hashicorp.
  • Поставщики сообщества поддерживаются членами сообщества открытого исходного кода.

По этой ссылке есть хороший поставщик сообщества для OpenStack. Чтобы использовать этого поставщика, создайте файл .tf и назовите его main.tf.

$ vi main.tf

Добавьте следующий контент в main.tf:

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "1.49.0"
    }
  }
}

provider "openstack" {
  user_name   = “OS_USERNAME”
  tenant_name = “OS_TENANT”
  password    = “OS_PASSWORD”
  auth_url    = “OS_AUTH_URL”
  region      = “OS_REGION”
}

Вам необходимо изменить OS_USERNAME, OS_TENANT, OS_PASSWORD, OS_AUTH_URL и OS_REGION. переменные, чтобы это работало.

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

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

В этом примере предоставляются варианты, маршрутизатор, подключенный к внешней сети, тестовый образ, профиль клиента и пользователь.

Сначала создайте каталог AdminTF для ресурсов подготовки:

$ mkdir AdminTF

$ cd AdminTF

В main.tf добавьте следующее:

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "1.49.0"
    }
  }
}

provider "openstack" {
  user_name   = “OS_USERNAME”
  tenant_name = “admin”
  password    = “OS_PASSWORD”
  auth_url    = “OS_AUTH_URL”
  region      = “OS_REGION”
}

resource "openstack_compute_flavor_v2" "small-flavor" {
  name      = "small"
  ram       = "4096"
  vcpus     = "1"
  disk      = "0"
  flavor_id = "1"
  is_public = "true"
}

resource "openstack_compute_flavor_v2" "medium-flavor" {
  name      = "medium"
  ram       = "8192"
  vcpus     = "2"
  disk      = "0"
  flavor_id = "2"
  is_public = "true"
}

resource "openstack_compute_flavor_v2" "large-flavor" {
  name      = "large"
  ram       = "16384"
  vcpus     = "4"
  disk      = "0"
  flavor_id = "3"
  is_public = "true"
}

resource "openstack_compute_flavor_v2" "xlarge-flavor" {
  name      = "xlarge"
  ram       = "32768"
  vcpus     = "8"
  disk      = "0"
  flavor_id = "4"
  is_public = "true"
}

resource "openstack_networking_network_v2" "external-network" {
  name           = "external-network"
  admin_state_up = "true"
  external       = "true"
  segments {
    network_type     = "flat"
    physical_network = "physnet1"
  }
}

resource "openstack_networking_subnet_v2" "external-subnet" {
  name            = "external-subnet"
  network_id      = openstack_networking_network_v2.external-network.id
  cidr            = "10.0.0.0/8"
  gateway_ip      = "10.0.0.1"
  dns_nameservers = ["10.0.0.254", "10.0.0.253"]
  allocation_pool {
    start = "10.0.0.1"
    end   = "10.0.254.254"
  }
}

resource "openstack_networking_router_v2" "external-router" {
  name                = "external-router"
  admin_state_up      = true
  external_network_id = openstack_networking_network_v2.external-network.id
}

resource "openstack_images_image_v2" "cirros" {
  name             = "cirros"
  image_source_url = "https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img"
  container_format = "bare"
  disk_format      = "qcow2"

  properties = {
    key = "value"
  }
}

resource "openstack_identity_project_v3" "demo-project" {
  name = "Demo"
}

resource "openstack_identity_user_v3" "demo-user" {
  name               = "demo-user"
  default_project_id = openstack_identity_project_v3.demo-project.id
  password = "demo"
}

Создайте файл Tenant Terraform.

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

В этом примере используется пользователь, созданный выше с помощью файла администратора.

Сначала создайте каталог TenantTF для подготовки, связанной с арендатором:

$ mkdir TenantTF
$ cd TenantTF

В main.tf добавьте следующее:

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "1.49.0"
    }
  }
}

provider "openstack" {
  user_name   = “demo-user”
  tenant_name = “demo”
  password    = “demo”
  auth_url    = “OS_AUTH_URL”
  region      = “OS_REGION”
}

resource "openstack_compute_keypair_v2" "demo-keypair" {
  name       = "demo-key"
  public_key = "ssh-rsa ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
}


resource "openstack_networking_network_v2" "demo-network" {
  name           = "demo-network"
  admin_state_up = "true"
}

resource "openstack_networking_subnet_v2" "demo-subnet" {
  network_id = openstack_networking_network_v2.demo-network.id
  name       = "demo-subnet"
  cidr       = "192.168.26.0/24"
}

resource "openstack_networking_router_interface_v2" "demo-router-interface" {
  router_id = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”
  subnet_id = openstack_networking_subnet_v2.demo-subnet.id
}

resource "openstack_compute_instance_v2" "demo-instance" {
  name            = "demo"
  image_id        = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
  flavor_id       = "3"
  key_pair        = "demo-key"
  security_groups = ["default"]

  metadata = {
    this = "that"
  }

  network {
    name = "demo-network"
  }
}

Инициализируйте свой Terraform

После создания файлов Terraform вам необходимо инициализировать Terraform.

Для администратора:

$ cd AdminTF

$ terraform init

$ terraform fmt

Для Арендаторов:

$ cd TenantTF

$ terraform init

$ terraform fmt

Объяснение команды:

  • terraform init загружает поставщика из реестра, чтобы использовать его при подготовке этого проекта.
  • terraform fmt форматирует файлы для использования в репозиториях.

Создайте план Терраформирования

Затем создайте план, чтобы увидеть, какие ресурсы будут созданы.

Для администратора:

$ cd AdminTF

$ terraform validate

$ terraform plan

Для Арендаторов:

$ cd TenantTF

$ terraform validate

$ terraform plan

Объяснение команды:

  • terraform validate проверяет правильность синтаксиса .tf.
  • terraform plan создает файл плана в кеше, где можно отслеживать все управляемые ресурсы при создании и уничтожении.

Примените свой первый ТФ

Чтобы развернуть ресурсы, используйте команду terraform apply. Эта команда применяет все состояния ресурсов в файле плана.

Для администратора:

$ cd AdminTF

$ terraform apply

Для Арендаторов:

$ cd TenantTF

$ terraform apply

Следующие шаги

Ранее я написал статью о развертывании минимального кластера OpenStack на Raspberry Pi. Вы можете узнать, как получить более подробные конфигурации Terraform и Ansible и реализовать некоторые CI/CD с помощью GitLab.

Статьи по данной тематике: