OpenStack изнутри
Евгений Потапов
Евгений Потапов
10 лет опыта веб-разработки
5 лет опыта использования облачных
технологий
генеральный директор компании
«Сумма АйТи»
Стартовали в 2008 году в Иркутске
Поддержка высоконагруженных веб-сайтов
140 миллионов посетителей в сутки
1000+ серверов на поддержке
40 специалистов
внутренние задачи
внутренние задачи
тестирование failover-планов
(быстро переключились на резервную архитектуру)
развертывание бэкапов
(накатили свежий бэкап и убедились что он работает)
тестирование новых версий ПО
(выкатили новую версию и убедились что она не падает)
тестирование новых решений
(mongo db is web scale)
разработка внутренних проектов
(доработки мониторинга, машины для девелоперов и тд)
удобно и просто
(не залезая в консоль можно сделать виртуалку, использовать и удалить)
о парке хост-машин думать не надо
(не нужно думать о том что на хост-машине может полететь рейд-массив)
что используем за то и платим
(платим только за то, что используем)
+
на самом деле
нужно следить за AWS постоянно
закончил таск – выключи инстанс
(AWS – дорогая штука при оплате за месяц)
работа на паузе – останови инстанс
(не дай бог что-то было в ephemeral)
надо что-то запустить – дважды подумай
(может не стоит запускать эту фигню на две недели на m1.xlarge?)
-
а может ?
о нем много говорят
(большое комьюнити, будет нормальная поддержка)
навсегда забыть об остановках инстансов
ради экономии при этом также удобно как
AWS
(пусть себе работает до тех пор пока не потребуются ресурсы)
вообще в целом - дешевле
(на hetzner Xeon E5-1650 64GB RAM стоит 99 евро)
да и просто интересно
(тренды нужно знать)
Не специализируемся на OpenStack
Личный опыт (+опыт друзей и коллег)
Доклад на стыке системного
администрирования и менеджмента,
но есть хардкор 
OpenStack - структура
http://www.openstack.org/software/
“The diagram below, illustrates the most common
architecture of an OpenStack-based cloud”
http://www.solinea.com/blog/openstack-grizzly-architecture-revisited
OpenStack - структура
Nova – контроллер виртуализации
Neutron (Quantum) – управление сетевой
инфраструктурой
Cinder – управление дисковой
инфраструктурой
Glance – управление образами
Keystone – служба идентификации
Horizon – Dashboard
OpenStack - структура
http://ilearnstack.com/tag/openstack/
OpenStack Nova
Nova – контроллер виртуализации
Службы Nova:
API – интерфейс к Nova
AMPQ – служба очередей
Compute – взаимодействие с гипервизором
Conductor – интерфейс взаимодействия с
БД для Compute
Scheduler – выбор узла для выполнения
запроса из очереди
OpenStack Nova
OpenStack Nova
1. Запрос на создание инстанса приходит в
Nova API
2. Nova API записывает в очередь запрос к
Nova Scheduler о том, что надо выполнить
такой запрос
3. Nova Scheduler получает запрос из очереди,
выбирает узел на котором надо выполнить
запрос.
4. Nova Scheduler шлет запрос в очередь для
Nova Compute о том, что надо запустить
инстанс
OpenStack Nova
OpenStack Nova
5. Nova Compute получает из очереди запрос
о том что надо получить инстанс.
6. …но Nova Compute не знает о том, какие у
инстанса параметры – так как с параметрами
в базе общается Nova Conductor
7. Nova Compute отправляет запрос в
очередь к Nova Conductor о том что надо
получить параметры инстанса
OpenStack Nova
OpenStack Nova
8. Nova Conductor делает запрос в БД о
свойствах инстанса и отдает в очередь ответ
с информацией о свойствах запускаемого
инстанса
9.Nova Compute запускает инстанс с
заданными свойствами.
OpenStack Nova
OpenStack Nova
БД – MySQL
Очередь – QIPD или RabbitMQ
7 демонов
те или иные ошибки возникают регулярно
OpenStack Nova
«Race condition возникает в момент запуска и
одновременного с этим удаления инстанса,
если на инстансы назначена одна и та же
security group»
https://bugs.launchpad.net/nova/+bug/1202449
OpenStack Nova
«Невозможно запустить инстанс, если
существуют несколько security group с одним
и тем же именем (например, в других
проектах), и эта security group назначена на
этот инстанс»
https://bugs.launchpad.net/nova/+bug/1203413
OpenStack Nova
«Инстансы в состоянии suspend нельзя
вывести из этого состояния после
перезагрузки host-машины»
- “My lessons learned are: NEVER PUT YOUR INSTANCE IN
SUSPEND STATE!!!”
https://bugs.launchpad.net/nova/+bug/1052
696
https://twitter.com/lusis/status/436697765679468544
Neutron
«Neutron это система для управления сетями и IP
адресами».
«Neutron позволяет вам быть уверенным в том, что
сеть – не будет узким местом или лимитирующим
фактором в вашей облачной среде»
http://en.wikipedia.org/wiki/OpenStack
Neutron
http://openstack.redhat.com/Netw
orking_in_too_much_detail
Neutron
1. Виртуальная машина получает информацию об IP-
адресе своего интерфейса по DHCP (об этом позже)
[itsumma@cloud ~]$ cat /etc/sysconfig/network-
scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
пусть, назначен адрес 10.0.0.12
Neutron
2. Сетевой интерфейс виртуальной машины
соединяется с TAP-устройством хост-машины
Neutron
3. На TAP-девайс, связанный с данной виртуальной
машиной, навешаны iptables чейны, в которых
прописаны правила назначенной на машину
секьюрити-группы
Neutron
4. TAP-девайс соединен с интерфейсом br-int,
реализованном через Open vSwitch.
«Open vSwitch – программный многоуровневый
коммутатор с открытым исходным кодом,
предназначенный для работы в гипервизорах и на
компьютерах с виртуальными машинами»
http://openvswitch.org/
Neutron
5. Интерфейс br-int соединяется с интерфейсом br-ext,
который уже доступен хост-машине, но это не все 
Neutron
6. DHCP на виртуальные машины раздается через
приложение dnsmasq, работающее внутри network
namespace – службы linux, которая позволяет
запустить собственный сетевой стэк для группы
процессов
Neutron
[root@openstack itsumma]# ip netns exec qrouter-89f090d0-aa1e-4189-bfd8-
b8381de2cc97 iptables -t nat -S
-A neutron-l3-agent-OUTPUT -d x.x.x.126/32 -j DNAT --to-destination 10.0.0.16
-A neutron-l3-agent-OUTPUT -d x.x.x.123/32 -j DNAT --to-destination 10.0.0.18
-A neutron-l3-agent-OUTPUT -d x.x.x.245/32 -j DNAT --to-destination 10.0.0.13
-A neutron-l3-agent-OUTPUT -d x.x.x.124/32 -j DNAT --to-destination 10.0.0.19
-A neutron-l3-agent-OUTPUT -d x.x.x.244/32 -j DNAT --to-destination 10.0.0.9
-A neutron-l3-agent-OUTPUT -d x.x.x.125/32 -j DNAT --to-destination 10.0.0.20
-A neutron-l3-agent-OUTPUT -d x.x.x.122/32 -j DNAT --to-destination 10.0.0.17
Хватит безумия, выводы
На развертывание системы с нуля уходит от двух
недель до двух месяцев
На хостинге должна быть возможность просто сделать
OS Reload – это обязательно потребуется в первое
время, несколько раз
Целесообразность экономии при использовании
одной машины неочевидна – у нас ушло полтора
месяца работы одного человека
Для небольших деплойментов – лучше подождать
пару лет
Евгений Потапов
http://itsumma.ru
eapotapov@itsumma.ru
http://twitter.com/eapotapov
OpenStack изнутри

Евгений Потапов (Сумма Айти)

  • 1.
  • 2.
    Евгений Потапов 10 летопыта веб-разработки 5 лет опыта использования облачных технологий генеральный директор компании «Сумма АйТи»
  • 3.
    Стартовали в 2008году в Иркутске Поддержка высоконагруженных веб-сайтов 140 миллионов посетителей в сутки 1000+ серверов на поддержке 40 специалистов
  • 5.
  • 6.
    внутренние задачи тестирование failover-планов (быстропереключились на резервную архитектуру) развертывание бэкапов (накатили свежий бэкап и убедились что он работает) тестирование новых версий ПО (выкатили новую версию и убедились что она не падает) тестирование новых решений (mongo db is web scale) разработка внутренних проектов (доработки мониторинга, машины для девелоперов и тд)
  • 7.
    удобно и просто (незалезая в консоль можно сделать виртуалку, использовать и удалить) о парке хост-машин думать не надо (не нужно думать о том что на хост-машине может полететь рейд-массив) что используем за то и платим (платим только за то, что используем) +
  • 8.
    на самом деле нужноследить за AWS постоянно закончил таск – выключи инстанс (AWS – дорогая штука при оплате за месяц) работа на паузе – останови инстанс (не дай бог что-то было в ephemeral) надо что-то запустить – дважды подумай (может не стоит запускать эту фигню на две недели на m1.xlarge?) -
  • 9.
    а может ? онем много говорят (большое комьюнити, будет нормальная поддержка) навсегда забыть об остановках инстансов ради экономии при этом также удобно как AWS (пусть себе работает до тех пор пока не потребуются ресурсы) вообще в целом - дешевле (на hetzner Xeon E5-1650 64GB RAM стоит 99 евро) да и просто интересно (тренды нужно знать)
  • 11.
    Не специализируемся наOpenStack Личный опыт (+опыт друзей и коллег) Доклад на стыке системного администрирования и менеджмента, но есть хардкор 
  • 12.
  • 13.
    “The diagram below,illustrates the most common architecture of an OpenStack-based cloud” http://www.solinea.com/blog/openstack-grizzly-architecture-revisited
  • 14.
    OpenStack - структура Nova– контроллер виртуализации Neutron (Quantum) – управление сетевой инфраструктурой Cinder – управление дисковой инфраструктурой Glance – управление образами Keystone – служба идентификации Horizon – Dashboard
  • 15.
  • 16.
    OpenStack Nova Nova –контроллер виртуализации Службы Nova: API – интерфейс к Nova AMPQ – служба очередей Compute – взаимодействие с гипервизором Conductor – интерфейс взаимодействия с БД для Compute Scheduler – выбор узла для выполнения запроса из очереди
  • 17.
  • 18.
    OpenStack Nova 1. Запросна создание инстанса приходит в Nova API 2. Nova API записывает в очередь запрос к Nova Scheduler о том, что надо выполнить такой запрос 3. Nova Scheduler получает запрос из очереди, выбирает узел на котором надо выполнить запрос. 4. Nova Scheduler шлет запрос в очередь для Nova Compute о том, что надо запустить инстанс
  • 19.
  • 20.
    OpenStack Nova 5. NovaCompute получает из очереди запрос о том что надо получить инстанс. 6. …но Nova Compute не знает о том, какие у инстанса параметры – так как с параметрами в базе общается Nova Conductor 7. Nova Compute отправляет запрос в очередь к Nova Conductor о том что надо получить параметры инстанса
  • 21.
  • 22.
    OpenStack Nova 8. NovaConductor делает запрос в БД о свойствах инстанса и отдает в очередь ответ с информацией о свойствах запускаемого инстанса 9.Nova Compute запускает инстанс с заданными свойствами.
  • 23.
  • 24.
    OpenStack Nova БД –MySQL Очередь – QIPD или RabbitMQ 7 демонов те или иные ошибки возникают регулярно
  • 25.
    OpenStack Nova «Race conditionвозникает в момент запуска и одновременного с этим удаления инстанса, если на инстансы назначена одна и та же security group» https://bugs.launchpad.net/nova/+bug/1202449
  • 26.
    OpenStack Nova «Невозможно запуститьинстанс, если существуют несколько security group с одним и тем же именем (например, в других проектах), и эта security group назначена на этот инстанс» https://bugs.launchpad.net/nova/+bug/1203413
  • 27.
    OpenStack Nova «Инстансы всостоянии suspend нельзя вывести из этого состояния после перезагрузки host-машины» - “My lessons learned are: NEVER PUT YOUR INSTANCE IN SUSPEND STATE!!!” https://bugs.launchpad.net/nova/+bug/1052 696
  • 28.
  • 29.
    Neutron «Neutron это системадля управления сетями и IP адресами». «Neutron позволяет вам быть уверенным в том, что сеть – не будет узким местом или лимитирующим фактором в вашей облачной среде» http://en.wikipedia.org/wiki/OpenStack
  • 30.
  • 31.
    Neutron 1. Виртуальная машинаполучает информацию об IP- адресе своего интерфейса по DHCP (об этом позже) [itsumma@cloud ~]$ cat /etc/sysconfig/network- scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes пусть, назначен адрес 10.0.0.12
  • 32.
    Neutron 2. Сетевой интерфейсвиртуальной машины соединяется с TAP-устройством хост-машины
  • 33.
    Neutron 3. На TAP-девайс,связанный с данной виртуальной машиной, навешаны iptables чейны, в которых прописаны правила назначенной на машину секьюрити-группы
  • 34.
    Neutron 4. TAP-девайс соединенс интерфейсом br-int, реализованном через Open vSwitch. «Open vSwitch – программный многоуровневый коммутатор с открытым исходным кодом, предназначенный для работы в гипервизорах и на компьютерах с виртуальными машинами» http://openvswitch.org/
  • 35.
    Neutron 5. Интерфейс br-intсоединяется с интерфейсом br-ext, который уже доступен хост-машине, но это не все 
  • 36.
    Neutron 6. DHCP навиртуальные машины раздается через приложение dnsmasq, работающее внутри network namespace – службы linux, которая позволяет запустить собственный сетевой стэк для группы процессов
  • 37.
    Neutron [root@openstack itsumma]# ipnetns exec qrouter-89f090d0-aa1e-4189-bfd8- b8381de2cc97 iptables -t nat -S -A neutron-l3-agent-OUTPUT -d x.x.x.126/32 -j DNAT --to-destination 10.0.0.16 -A neutron-l3-agent-OUTPUT -d x.x.x.123/32 -j DNAT --to-destination 10.0.0.18 -A neutron-l3-agent-OUTPUT -d x.x.x.245/32 -j DNAT --to-destination 10.0.0.13 -A neutron-l3-agent-OUTPUT -d x.x.x.124/32 -j DNAT --to-destination 10.0.0.19 -A neutron-l3-agent-OUTPUT -d x.x.x.244/32 -j DNAT --to-destination 10.0.0.9 -A neutron-l3-agent-OUTPUT -d x.x.x.125/32 -j DNAT --to-destination 10.0.0.20 -A neutron-l3-agent-OUTPUT -d x.x.x.122/32 -j DNAT --to-destination 10.0.0.17
  • 38.
    Хватит безумия, выводы Наразвертывание системы с нуля уходит от двух недель до двух месяцев На хостинге должна быть возможность просто сделать OS Reload – это обязательно потребуется в первое время, несколько раз Целесообразность экономии при использовании одной машины неочевидна – у нас ушло полтора месяца работы одного человека Для небольших деплойментов – лучше подождать пару лет
  • 39.