Перейти к основному содержимому
Работа с Terraform

Работа с Terraform

Разворачивать облачную инфраструктуру в Selectel и управлять ей можно с помощью утилиты Terraform от HashiCorp.

Через Terraform можно работать с продуктами:

Инфраструктура и ее компоненты описываются на языке HashiCorp Configuration Language (HCL) в конфигурационных файлах с расширением .tf — манифестах.

Для работы с услугами Selectel используется два Terraform-провайдера:

  • OpenStack-провайдер (документация на Terraform Registry и GitHub) для управления ресурсами OpenStack, например облачными серверами, дисками, сетями;
  • Selectel-провайдер (документация на Terraform Registry и GitHub), который взаимодействует с API Selectel, для управления проектами и квотами, пользователями, их ролями и токенами, DNS, кластерами и группами нод Managed Kubernetes, облачными базами данных.

Установить Terraform

Перед началом работы установите Terraform на облачном сервере или локальном компьютере.

Используйте инструкцию на официальном сайте Terraform в зависимости от операционной системы.

Начать работу

Для начала работы с Terraform вы можете:

Описание примера

Если вы используете этот пример, вы создадите проект облачной платформы с пользователем, а также инфраструктуру в пуле ru-9, которая будет содержать:

  • отказоустойчивый кластер Managed Kubernetes с одной группой нод: две ноды в группе с произвольной конфигурацией с 2 vCPU, 4 ГБ RAM и локальным диском объемом 32 ГБ;
  • приватную сеть с подсетью;
  • облачный роутер, подключенный к внешней сети.

План описан в двух файлах — vars.tf и main.tf. В первом объявлены переменные для создания инфраструктуры, во втором — инициализированы провайдеры и модули для создания ресурсов.

Создать кластер

  1. Для использования модулей локально клонируйте репозиторий Selectel.

  2. Получите ключ API (токен аккаунта) и скопируйте его.

  3. Перейдите в файл с примером из репозитория Selectel, который вы клонировали на шаге 1 (terraform-examples/examples/mks/cluster_one_nodegroup_with_net_infra/)

  4. В файле vars.tf обновите параметр sel_token:

    variable "sel_token" {
    default = "<selectel_api_key>"
    }

    Укажите <selectel_api_key> — токен аккаунта (ключ API), который вы скопировали на шаге 2.

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

Файл vars.tf
variable "sel_token" {}

variable "os_auth_url" {
default = "https://api.selvpc.ru/identity/v3/auth/"
}

variable "user_name" {
default = "tf-user"
}

variable "user_password" {}

variable "project_name" {
default = "tf-project"
}

variable "cluster_name" {
default = "tf-cluster"
}

variable "region" {
default = "ru-9"
}

variable "subnet_cidr" {
default = "10.222.0.0/16"
}

variable "enable_autorepair" {
default = true
}

variable "enable_patch_version_auto_upgrade" {
default = true
}

variable "network_id" {
default = ""
}

variable "subnet_id" {
default = ""
}

variable "maintenance_window_start" {
default = ""
}

variable "availability_zone" {
default = "ru-9a"
}

variable "nodes_count" {
default = 2
}

variable "keypair_name" {
default = ""
}

variable "affinity_policy" {
default = ""
}

variable "cpus" {
default = 2
}

variable "ram_mb" {
default = 4096
}

variable "volume_gb" {
default = 32
}

variable "labels" {
default = {
"label1":"value1",
"label2":"value2"
}
}

variable "taints" {
type = list(object({
key = string
value = string
effect =string
}))
default =[ {
effect = "NoSchedule"
key = "key3"
value = "value3"
},
{
effect = "NoSchedule"
key = "key2"
value = "value2"
} ]
}

Здесь:

  • sel_token — токен аккаунта (ключ Selectel API), создается автоматически вместе с проектом;
  • os_auth_url — адрес конечной точки (endpoint);
  • user_name — имя пользователя OpenStack, который будет привязан к проекту Облачной платформы;
  • user_password — пароль пользователя, создается автоматически вместе с проектом;
  • project_name — имя проекта Облачной платформы;
  • cluster_name — имя кластера;
  • regionпул, в котором будет развернута инфраструктура;
  • subnet_cidr— CIDR приватной подсети, в которую будут объединены все ноды кластера;
  • enable_autorepairавтовосстановление нод кластера: True — включить или False — выключить;
  • enable_patch_version_auto_upgradeавтообновление патч-версий кластера: True — включить или False — выключить;
  • network_id — сеть кластера, создается автоматически вместе с проектом;
  • subnet_id — подсеть кластера, создается автоматически вместе с проектом;
  • maintenance_window_startокно обслуживания кластера: время UTC в формате hh:mm:ss;
  • availability_zone — сегмент пула, в котором будут располагаться все ноды в группе;
  • nodes_count — количество нод в группе;
  • keypair_name — имя SSH-ключа для безопасного подключения к нодам, ключ можно создать в панели управления или с помощью OpenStack CLI командами ssh-keygen -t rsa и openstack keypair create --public-key ~/.ssh/id_rsa.pub <ssh_name>;
  • affinity_policy — правила размещения ВМ на нодах кластера;
  • cpus — количество vCPU у каждой ноды в группе;
  • ram_mb — объем оперативной памяти в МБ у каждой ноды в группе;
  • volume_gb — объем локального диска в ГБ у каждой ноды в группе;
  • labelsметки группы нод;
  • taintsтейнты группы нод.
  1. В файле terraform-examples/modules/vpc/os_lb_env/main.tf (строка 23) укажите SSH-ключ, который будет добавлен на рабочие ноды:

    public_key = file("~/.ssh/id_rsa.pub")
  2. Вернитесь в файл с примером из репозитория Selectel, который вы клонировали на шаге 1 (terraform-examples/examples/mks/cluster_one_nodegroup_with_net_infra/).

    В процессе создания кластера вы также создадите пароль для нового пользователя OpenStack. Пароль должен содержать:

    • латинские буквы разных регистров;
    • цифры;
    • не менее 8 знаков.

Создать инфраструктуру

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

  1. Инициализируйте Terraform-окружение:

    terraform init
  2. Проверьте, что план составлен без ошибок:

    terraform plan

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

  3. Разверните инфраструктуру и создайте ресурсы:

    terraform apply
  4. Подтвердите создание — введите yes и нажмите Enter. Созданные ресурсы автоматически отобразятся в панели управления.

Редактировать ресурсы

Чтобы изменить уже созданную инфраструктуру или ее компоненты, достаточно отредактировать манифест — Terraform определит, что нужно дополнительно создать или удалить.

Если вы внесли изменения в инфраструктуру через панель управления, в манифестах они не отобразятся.

Для изменения инфраструктуры отредактируйте манифест и затем примените изменения:

terraform apply

Удалить ресурсы

Если вы удалили ресурсы через панель управления, это не отобразится в манифестах.

  1. Чтобы удалить ресурсы, в директории с манифестами выполните:

    terraform destroy
  2. Будет выведен список удаляемых ресурсов. Подтвердите удаление — введите yes и нажмите Enter.