Системный Администратор (Сисадмин)
14.2K subscribers
1.85K photos
1.82K videos
92 files
1.96K links
Настройка серверов Windows, Linux, сетевое оборудование Cisco Systems, D-Link, HP, Huawei, Juniper, MikroTik. Книги и мануалы для сисадминов.
По всем вопросам @evgenycarter

РКН clck.ru/3KoGJ3
Download Telegram
☁️ KVM + Cloud-Init: Настройка сервера «без рук»

В продолжение поста. Мы научились поднимать "железо" через Terraform. Но что толку от запущенной VM, если в нее нужно заходить через VNC-консоль, вручную создавать пользователя, прописывать пароли и ставить nginx?

Это медленно и небезопасно.

Решение Cloud-Init. Это стандарт де-факто для инициализации облачных инстансов (AWS, Azure, DigitalOcean), который прекрасно работает и на локальном KVM.

🎯 Задача

При команде terraform apply:

1. Создать VM.
2. Автоматически создать пользователя admin.
3. Закинуть туда ваш публичный SSH-ключ (чтобы заходить без пароля).
4. Установить Nginx и Docker.

📝 Шаг 1. Пишем конфиг (cloud_init.cfg)

Создайте файл cloud_init.cfg. Это обычный YAML, который описывает, что нужно сделать внутри ОС при первом старте.


#cloud-config
hostname: my-web-server
fqdn: my-web-server.local
manage_etc_hosts: true

users:
- name: admin
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3Nza... (ваш публичный ключ id_rsa.pub)

packages:
- nginx
- htop
- git

runcmd:
- [ systemctl, enable, nginx ]
- [ systemctl, start, nginx ]
- [ echo, "Hello from Cloud-Init!", >, /var/www/html/index.html ]



🔗 Шаг 2. Подключаем к Terraform

В наш файл main.tf (из прошлого поста) добавляем ресурс диска Cloud-Init. Terraform создаст маленький ISO-образ с нашим конфигом и подключит его как CD-ROM к виртуалке.


# 1. Читаем конфиг
data "template_file" "user_data" {
template = file("${path.module}/cloud_init.cfg")
}

# 2. Создаем диск с настройками
resource "libvirt_cloudinit_disk" "commoninit" {
name = "commoninit.iso"
user_data = data.template_file.user_data.rendered
}

# 3. Цепляем к машине
resource "libvirt_domain" "vm" {
# ... остальные настройки ...

# Самая важная строчка:
cloudinit = libvirt_cloudinit_disk.commoninit.id

# ...
}



🚀 Результат: Вы запускаете terraform apply.
Через 30 секунд у вас есть поднятый сервер с установленным Nginx. Вы просто пишете:
ssh admin@<ip-address>
...и сразу попадаете внутрь. Никаких паролей, никаких ручных установок.


💡 Важный нюанс: Cloud-Init работает только на специальных Cloud Images (например, Ubuntu Cloud, CentOS GenericCloud, Debian Cloud).
Если вы попытаетесь скормить ему обычный установочный ISO (Desktop/Server installer), магии не произойдет, там нет демона cloud-init, который читает конфиг при загрузке.

Коллеги, а вы используете Cloud-Init или по старинке Ansible/Chef/Puppet накатываете настройки уже после того, как машина загрузилась?

#sysadmin #cloudinit #terraform #kvm #devops #automation #linux

📲 Мы в MAX

👉 @sysadminof
4👍3🤨2🔥1