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

927a6bddddd749fbbe4c6d091e0765ff.jpg

Привет Хабр! Я опубликовал уже три части из цикла статей (раз, два, три), а тут часть 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. Я ищу разработчиков в стартап, подробности у меня в профиле.

© Habrahabr.ru