Свій хмарний хостинг за 5 хвилин. Частина 0: Віртуалізація



Привіт Хабр! Я вже опублікував три частини з циклу статей (раз, два, три), а тут частину 0, як сніг на голову. Як же так? Вся справа в тому, що віртуалізація є опціональною при побудові нашого хостингу. Ця стаття — самодостатня, вона не пов'язана з іншими частинами циклу. Ви взагалі можете не читати, якщо просто хочете розділити ваш виділений сервер на кілька віртуальних машин.

Все що я буду розповідати може виконати звичайний програміст протягом 5 хвилин, просто запустивши набір сценаріїв для Ansible, які я підготував спеціально для вас і виклав на GitHub.

Зміст

Підготовка
Викачуємо набір сценаріїв або клонируем репозиторій:

» git clone https://github.com/vkozlovski/ansible-virtualization
» git checkout v1.x
» cd ansible-virtualization

На цьому підготовчі роботи можна вважати закінченими.

Ах так, трохи не забув, вам знадобиться як мінімум один виділений сервер з авторизацією по ключу.

Налаштування
Конфігурацію ми будемо виконувати на прикладі Hetzner. Всі конфігураційні файли, які ми будемо редагувати, знаходяться в директорії host_vars:

  • dc16-host1-vm1.yml – конфігурація віртуальної машини №1
  • dc16-host1-vm2.yml – конфігурація віртуальної машини №2
  • ..
  • dc16-host1.yml – конфігурація хост-машини
У нашому прикладі ми створюємо 6 віртуальних машин, рівно стільки одиночних IP адрес на один сервер може видати Hetzner. Давайте розберемо, що тут у нас в конфігураційних файлах:

dc16-host1.yml

Конфігурація хост-машини:

# Host 1

ansible_ssh_host: 5.9.45.106 # IPv4 адреса хост-машини
ansible_ssh_user: root # Користувач хост-машини

# net
vm_bridge: virbr0

ipv4: true
ipv4_address: 5.9.45.106/27 # IPv4 адреса і маска хост-машини
ipv4_gateway: 5.9.45.97 # IPv4 шлюз хост-машини
ipv4_dns: 213.133.100.100 213.133.98.98 213.133.99.99 # Hetzner IPv4 DNS

ipv6: true
ipv6_address: 2a01:4f8:163:326a::2 # IPv6 адреса хост-машини
ipv6_mask: 64
ipv6_gateway: fe80::1 # IPv6 шлюз хост-машини
ipv6_dns: 2a01:4f8:0:a0a1::add:1010 2a01:4f8:0:a102::add:9999 2a01:4f8:0:a111::add:9898 # Hetzner IPv6 DNS

# apt
apt_host: ftp.de.debian.org

Hetzner надсилає IPv4 IPv6 адреси в листі при замовленні сервера. Інші значення змінних ви можете глянути в особистому кабінеті. IPv4 IPv6 адреса DNS-серверів я взяв у wiki Hetzner'а.

dc16-host1-vm1.yml

Конфігурація віртуальної машини №1:

# Debian 1

# kvm-host
ansible_ssh_host: 5.9.45.106 # IP адреса хост (не гостьовий) машини
ansible_ssh_user: root # Користувач хостової (не гостьовий) машини

# vnc (port: 5900)
vnc_password: "kBz4Yp3UyVEPMr" # Пароль для підключення до сервера VNC

# vm
vm_num: 1 # uniq 0-15
vm_name: debian1 # Унікальне ім'я віртуальної машини
vm_hdd_size: 10G # Диск 10 гігабайт
vm_memory: 2048 # Пам'ять в мегабайтах
vm_swap_size: 2048 # Розмір файлу підкачки в мегабайтах
vm_cpu: 2 # Кількість ядер
vm_bridge: virbr0
vm_root_password: "3yMAqs3yTcuKvZ" # Пароль для користувача root віртуальної машини

# net
vm_ipv4: true
vm_ipv4_address: 5.9.244.210 # IPv4 адреса гостьовий машини
vm_ipv4_mask: 29
vm_ipv4_gateway: 5.9.244.209 # IPv4 шлюз гостьовий машини
vm_ipv4_dns: 213.133.98.98 213.133.99.99 213.133.100.100 # Hetzner IPv4 DNS

vm_ipv6: true
vm_ipv6_address: 2a01:4f8:163:326a::d1 # IPv6 адресу гостьовий машини
vm_ipv6_mask: 64
vm_ipv6_gateway: fe80::1 # IPv6 шлюз гостьовий машини
vm_ipv6_dns: 2a01:4f8:0:a0a1::add:1010 2a01:4f8:0:a102::add:9999 2a01:4f8:0:a111::add:9898 # Hetzner IPv6 DNS

vm_mac: 00:52:54:56:88:88

Значення змінних vm_ipv4_address, vm_ipv4_mask vm_ipv4_gateway Hetzner надсилає при замовленні додаткового IP-адреси. IPv4 IPv6 адреса DNS-серверів такі ж, як і у хост-машини. Додатковий IPv4 адресу ви можете замовити в особистому кабінеті. Hetzner просить вказувати мету, з якою вам потрібен додатковий адресу, я пишу туди одне слово – «Virtualization».

З приводу IPv6: кожен сервер отримує підмережа /64. Відповідно ви можете взяти будь-які адреси з неї. Наприклад, 2a01:4f8:163:326a:: / 64:

  • 2a01:4f8:163:326a::d1
  • 2a01:4f8:163:326a::d2
  • ...
  • 2a01:4f8:163:326a::d6
Що б вказати значення змінної vm_mac, вам необхідно отримати окремий MAC-адреса для зазначеного IP. Це можна зробити в особистому кабінеті.

На цьому все, можна приступати до запуску.

Запуск
Запуск проводиться двома командами. Перша встановлює необхідні пакети та конфігурує хостовую машину:

$ ansible-playbook -i prod kvm.yml

Друга команда створює, конфігурує і запускає віртуальні машини:

$ ansible-playbook -i prod guests.yml

Після запуску і виконання цих двох команд ваші віртуальні машини повинні бути запущені і доступні зовні. Ваш публічний ключ був скопійований на всі виртуалки, тому авторизація буде відбуватися по ключу.

Разом
Ми використовуємо цей набір сценаріїв досить довго і все відпрацьовує, як годиться. Це значно спростило життя і дозволило швидко додавати нові обчислювальні ресурси в наше скромне хмара. Якщо у вас виникнуть якісь питання- ласкаво просимо в коментарі.

На цьому все. Всім дякую за увагу. Стабільних вам хмар і удачі!

Підписуйтесь на мене в Twitter, я розповідаю про роботу у стартапі, своїх помилках і правильних рішеннях, про python і всім, що стосується веб-розробки.

P. S. Я шукаю розробників в стартап, подробиці у мене в профілі.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.