Привет! Я опубликовал уже три части из цикла статей (раз, два, три), а тут часть 0, как снег на голову. Как же так? Всё дело в том, что виртуализация является опциональной при построении нашего
Всё что я буду рассказывать может выполнить обычный программист в течение 5 минут, просто запустив набор сценариев для Ansible, которые я подготовил специально для вас и выложил на GitHub.
Содержание
- Часть 0: Виртуализация
- Часть 1: Ansible, Docker, Docker Swarm
- Часть 2: Service Discovery
- Часть 3: Consul, Registrator, Consul-Template
- ...
Подготовка
Скачиваем набор сценариев или клонируем репозиторий:
» 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. Я ищу разработчиков в стартап, подробности у меня в профиле.
Автор: vladkozlovski