Работа с 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 вы можете:
- подготовить манифесты, используя документацию провайдера Selectel (Terraform Registry и GitHub);
- использовать готовые примеры, изменив в них необходимые параметры. Мы рекомендуем использовать готовые примеры, потому что это сокращает время подготовки манифестов. Ниже вы можете посмотреть описание одного примера и инструкцию по созданию кластера с его использованием.
Описание примера
Если вы используете этот пример, вы создадите проект облачной платформы с пользователем, а также инфраструктуру в пуле ru-9, которая будет содержать:
- отказоустойчивый кластер Managed Kubernetes с одной группой нод: две ноды в группе с произвольной конфигурацией с 2 vCPU, 4 ГБ RAM и локальным диском объемом 32 ГБ;
- приватную сеть с подсетью;
- облачный роутер, подключенный к внешней сети.
План описан в двух файлах — vars.tf
и main.tf
. В первом объявлены переменные для создания инфраструктуры, во втором — инициализированы провайдеры и модули для создания ресурсов.
Создать кластер
Для использования модулей локально клонируйте репозиторий Selectel.
Получите ключ API (токен аккаунта) и скопируйте его.
Перейдите в файл с примером из репозитория Selectel, который вы клонировали на шаге 1 (
terraform-examples/examples/mks/cluster_one_nodegroup_with_net_infra/
)В файле
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
— тейнты группы нод.
В файле
terraform-examples/modules/vpc/os_lb_env/main.tf
(строка 23) укажите SSH-ключ, который будет добавлен на рабочие ноды:public_key = file("~/.ssh/id_rsa.pub")
Вернитесь в файл с примером из репозитория Selectel, который вы клонировали на шаге 1 (
terraform-examples/examples/mks/cluster_one_nodegroup_with_net_infra/
).В процессе создания кластера вы также создадите пароль для нового пользователя OpenStack. Пароль должен содержать:
- латинские буквы разных регистров;
- цифры;
- не менее 8 знаков.
Создать инфраструктуру
Выполните следующие команды в директории, в которой находятся созданные манифесты.
Инициализируйте Terraform-окружение:
terraform init
Проверьте, что план составлен без ошибок:
terraform plan
Если ошибок в описании нет, будет выведен список ресурсов, готовых к созданию. Если ошибки есть — их нужно устранить.
Разверните инфраструктуру и создайте ресурсы:
terraform apply
Подтвердите создание — введите yes и нажмите Enter. Созданные ресурсы автоматически отобразятся в панели управления.
Редактировать ресурсы
Чтобы изменить уже созданную инфраструктуру или ее компоненты, достаточно отредактировать манифест — Terraform определит, что нужно дополнительно создать или удалить.
Если вы внесли изменения в инфраструктуру через панель управления, в манифестах они не отобразятся.
Для изменения инфраструктуры отредактируйте манифест и затем примените изменения:
terraform apply
Удалить ресурсы
Если вы удалили ресурсы через панель управления, это не отобразится в манифестах.
Чтобы удалить ресурсы, в директории с манифестами выполните:
terraform destroy
Будет выведен список удаляемых ресурсов. Подтвердите удаление — введите yes и нажмите Enter.