🏗 KVM + Terraform: Поднимаем виртуалки как код Мы научились управлять KVM через virsh, но если вам нужно поднять 10 одинаковых серверов для тестов, а …
Мы научились управлять KVM через virsh, но если вам нужно поднять 10 одинаковых серверов для тестов, а потом удалить их одной командой - ручной ввод утомляет.
На сцену выходит Terraform. Обычно его ассоциируют с облаками (AWS, Azure), но он прекрасно работает и с «железным» гипервизором через провайдер libvirt.
🛠 Что нам понадобится?
1. Установленный Terraform.
2. Плагин-провайдер dmacvicar/libvirt (стандарт де-факто для KVM).
3. Образ системы (Cloud Image), например, Ubuntu Cloud.
📄 Пишем рецепт (main.tf)
Создайте папку, положите туда файл main.tf и опишите желаемое состояние:
terraform {
required_providers {
libvirt = {
source = "dmacvicar/libvirt"
}
}
}
# 1. Подключаемся к локальному KVM
provider "libvirt" {
uri = "qemu:///system"
}
# 2. Скачиваем образ диска (или берем локальный)
resource "libvirt_volume" "ubuntu_base" {
name = "ubuntu-base.qcow2"
pool = "default"
# Ссылка на официальный Cloud-образ
source = "https://cloud-images.ubuntu.com/minimal/releases/jammy/release/ubuntu-22.04-minimal-cloudimg-amd64.img"
format = "qcow2"
}
# 3. Описываем Виртуальную Машину
resource "libvirt_domain" "my_web_server" {
name = "terraform-vm-01"
memory = "1024"
vcpu = 1
network_interface {
network_name = "default" # NAT сеть libvirt
}
disk {
volume_id = libvirt_volume.ubuntu_base.id
}
console {
type = "pty"
target_port = "0"
target_type = "serial"
}
graphics {
type = "spice"
listen_type = "address"
autoport = true
}
}
🚀 Запускаем магию
В терминале переходим в папку с файлом и выполняем три команды:
1. terraform init - Скачает провайдер libvirt.
2. terraform plan - Покажет, что именно он собирается создать (DRY RUN).
3. terraform apply - Boom! Скачивается образ, создается диск, запускается VM.
🤔 А как удалить?
Не нужно вспоминать имена машин и удалять диски вручную. Просто введите:
terraform destroy
И Terraform аккуратно зачистит за собой всё, что создал.
💡 Почему это круто?
🔸 Воспроизводимость: Вы можете отправить этот файл коллеге, и он поднимет точно такую же среду.
🔸 Git: Вы храните конфигурацию инфраструктуры в репозитории. Видна история изменений.
🔸 Cloud-Init: В Terraform можно добавить конфигурацию cloud-init (создать пользователя, добавить SSH-ключ, установить пакеты при первом старте), чтобы получить полностью готовый сервер, в который даже не нужно заходить.
#sysadmin #devops #terraform #kvm #iac #automation
👉 @sysadminof