Как я знакомился с OpenStack и прострелил себе колени, голову и сердце.
![Все-таки торт или не торт? Все-таки торт или не торт?](https://habrastorage.org/getpro/habr/upload_files/216/be0/9d0/216be09d0904666c52d90dfe32b95ef9.png)
Начиная углубляться в те или иные вопросы, ненароком заглядываешь и на Хабр. Так и я будучи начинающим опенстакером специалистом по облачным вычислениям однажды забрел сюда в поисках понимания: "Что же такое современный OpenStack?" Но к моему великому сожалению, найти свежую статью не удалось - август 2020 года самая актуалочка [поправьте меня, если есть материал поновее]. А то и вовсе попадаются 2010-х годов. По меркам IT, два года все-таки прям срок. И вот я решил поделиться с вами своим мнением об OpenStack: какой он в 2022 и как мы его используем.
Предыстория
Свою историю знакомства с OpenStack я начал с 2021 года, когда он уже как лет этак десять был мейнстримом. Тогда еще устраиваясь на свою текущую основную работу я в общем то и понятия не имел что это такое и с чем едят. В самом начале деятельности я получил серверные мощности (1 сервер: старенькие Xeonы на 128 vCPU, 256Gb RAM, и сколько то там HDD) в общем: "Надо дербанить" - подумал я и принялся изучать вопрос о разбиении сего чуда на более мелкие тачки. К слову, с крупными мощностями (а на то время для меня это был крупный хост такой) я еще не работал. Был достаточно обширный опыт работы в администрировании Linux, тесно взаимодействовал с докером, Gitlab CI\CD ну и так по мелочи - до виртуализации подобного плана дело не доходило. И вот пробил мой час.
Наш основной инвестор - гик чистой воды и достаточно неплохо разбирается в серверном оборудовании. С самого начала нашего знакомства он все время говорил о CEPH и OpenStack: какие они прекрасные и как много можно на них интересного построить. К сожалению, тогда к его словам мы не отнеслись должным образом и отложили идею с развертыванием стэка и уж тем более цефа до лучших времен.
Ну и по итогу я накатил на этот самый сервер Proxmox VE, о чем кстати особо не пожалел в том время. Также успешно развернул всю внутреннюю инфраструктуру: центральный прокси, виртуалочки с самым "полезнейшим" self-hosted софтом ну и dev\prod машины соответственно. После деплоя наших репозиториев все работало хорошо, даже замечательно, но мысль о лучших временах мне все не давала покоя и я решил пробовать. Нарезал себе ВМ и решил запустить тут DevStack.
DevStack
DevStack - это некая коробка с сюрпризами основными преднастроенными и донастраиваемыми модулями OpenStack для развертывания под локальную разработку \ тестирование. И блин, вот ситуация - у меня не вышло. Сыпало кучей ошибок, мол то этого нет, то того, то это отсутствует. Вручную ставил различные нехватающие библиотеки и прочие системные элементы, что ни к чему ни привело.
![Пример ошибок при установке DevStack (взято из открытых источников) Пример ошибок при установке DevStack (взято из открытых источников)](https://habrastorage.org/getpro/habr/upload_files/cd3/5a9/343/cd35a93433c1235f90d5846601f74c2c.png)
Перепробовал получается различные его версии с хаба. Может опыта было маловато, больше так и не пробовал его развернуть. Поделитесь в комментариях что думаете о DevStack и получилось ли у вас его развернуть.
MicroStack
MicroStack - по своей сути, это тот же DevStack, но с некоторыми отличиями, такими как:
Все процессы автоматизированы и все что необходимо для установки завернуто в snap-пакет;
Поддерживается Canonical;
По словам Canonical - "годен к проду" в том виде, каком есть;
Горизонтально масштабируем.
То есть, такой DevStack на максималках. Вот не поверите, его я тоже не могу развернуть. Как так вышло? До сих пор не могу понять. Рассказываю: имеется чистая ВМ с 32Gb RAM, 500Gb HDD, 8vCPU на которой я произвожу установку snap пакета из первой строчки сайта MicroStack. Идет установка минут 20, задает иногда какие то доп. вопросы - отвечаю, все ок. После завершения установки запрашиваю пароль админа и иду в дашборд.
О чудо! Вижу лого OpenStack!
![Страница авторизации Horizon Страница авторизации Horizon](https://habrastorage.org/getpro/habr/upload_files/61a/19d/959/61a19d959fe0d18546800aec53708382.png)
Все вроде бы замечательно, ввожу логин и пароль, тыкаю Войти - ничего не происходит. Открываю консоль браузера, и вижу миллионы кроваво-красных месседжей с отрицательным результатом выполнения действий на стороне Horizon. Да боже ты мой, система же чистая, ставил snap-пакет, причем от Canonical, причем в дефолтном комплекте. Погодите ка, в дефолтном.... И тут я подумал, что может быть перепробовать остальные разновидности snap-пакетов microstack? Ну точно, надо действовать!
И как вы думаете чем это кончилось? Ничем. Ставил пакет, вычищал, снова ставил, снова вычищал, тестировал различные аргументы, которые советовал StackOverflow. Все мимо.
Вы можете уже начинать кидаться камнями, мол "рукоПоп", "все там нормально ставится". Только поясните, что именно я делал не так?
Учи матчасть!
![Я после попыток установки OpenStack "из коробки" Я после попыток установки OpenStack "из коробки"](https://habrastorage.org/getpro/habr/upload_files/04e/ffa/627/04effa627779005210fb88078230bda4.jpeg)
Загнав себя в мучительно-депрессивное состояние, я заметил, что в голову мне начали приходить действительно гениальные мысли, что типа: "А может доку почитать?". Нет, я конечно знал список модулей стэка, как происходит их взаимодействие, для чего они нужны и пр. общую информацию. Хотелось почувствовать еще больше боли. И я полез в официальные туториалы по подготовке окружения для дальнейшей установки OpenStack. Конечно это все было от безысходности, но с другой стороны.. да елки-палки! Почему я перед попытками установки не начал курить доку? Понятно дело, что она не совсем напрямую относится к тому же микростэку, но все же. Там тебе и примеры конфигов, там и подробное разжевывание выполняемых для установки команд. [но на самом деле, на момент написания статьи, считаю, что доки по установке OpenStack - полное днище].
Здравствуй OpenStack #1: Singlenode
И вот, спустя некоторое время безрезультатных экспериментов и изучения документации по устройству модулей и туториалов по установке, я принялся вручную накатывать модуль за модулем на свежесозданную виртуалку под убунтой. Тогда я думал: - "Ну если вот сейчас ничего не сработает, значит признаю полное фиаско в развертывании мной опенстэка". Действительно грозила прям серьезная психологическая травма :)
Кстати, устанавливал модули в следующей последовательности:
keystone
glance
placement
nova-controller
nova-compute
neutron-controller
neutron-compute
cinder-controller
cinder-storage
horizon-dashboard
И вот, я установил последний по списку модуль стэка Horizon. Дрожащими руками открываю браузер, ввожу пароль в форму авторизации, нажимаю войти и вдруг открывается дашборд. Рабочий, настоящий дашборд. Я был просто счастлив в тот момент, это же означало, что у меня получилось! Естественно первым делом я хочу создать тестовый инстанс. Преднастроил типы инстансов, загрузил Cirros в список образов, ввел нужные данные в форме создания и кликнул Создать. После чего у меня в списке инстансов появился мой свежесозданный плацдарм в состоянии Сопоставление блочного устройства.
![Ох уж этот Cinder Ох уж этот Cinder](https://habrastorage.org/getpro/habr/upload_files/4b3/e7a/20d/4b3e7a20dbca4df877c3650f4c83e13f.png)
И в итоге, в конце я получил ошибку этого самого "сопоставления". При изучении логов, оказалось, что проблема связана с отсутствием связи с iSCSI при обращении Cinder к хранилищу. Над этой темой я сидел больше недели, но пофиксить так и не смог.
Здравствуй OpenStack #2: Multinode
Далее задача набрала еще более серьезный оборот. Показав руководству, что я криво-косо развернул OpenStack, им, как ни странно, понравилось. Понравилось потому, как оказалось, что у них некоторое время назад были в штате какие-то айтишники, которые в общем-то не смогли ни единого модуля толком развернуть, а уж тем более показать. У меня было странное ощущение: вроде бы развернул то, что мои предшественники не смогли развернуть, но развернул так, что оно не работает. Максимально идиотское ощущение. Следом как раз и прозвучала идея руководства: "Слушай, мы тут тебе мощности выдадим размером в двенадцать блейд-серверов, попробуй развернуть вычислительный кластер". Вот на этом моменте я прям осел. Сам думаю, блин, и так ниче не работает на одной машине, а тут целый кластер. Но на самом деле интересно было все сделать "как правильно", чтобы была максимально распределенная и независимая система [сейчас я уже понял, что "как правильно" не существует и для каждой конечной цели есть свой первоначальный подход]. И вот я сел рисовать схему.
![Первая версия схемы OpenStack-кластера на 12 блейд-серверов Первая версия схемы OpenStack-кластера на 12 блейд-серверов](https://habrastorage.org/getpro/habr/upload_files/9eb/1ff/962/9eb1ff962f8b0ff2cf28e2111186a865.png)
И вы знаете, схема оказалась пригодной к жизни. Спустя пять дней я развернул эту свою идею и оно даже заработало с первого раза и даже так как надо. Тестирования прошли успешно, я был доволен. Но тут подъехал новый сюжет в виде еще 12 блейдов.
Здравствуй OpenStack #3: Kolla Ansible multinode
Снова тратить целую недели на ручное развертывание этого прекрасного продукта, прямо говоря, не хотелось. Да и звучит это глупо как то. Я начал гуглить и был удивлен насколько много в интернете костылей придумали люди, чтобы автоматически развернуть стэк. Естественно пару минут спустя, я полез искать ансибл плейбук для автоматического и самое главное правильного деплоя. Тут я и нашел Kolla Ansible. Оказывается далеко ходить и не надо было. Почему я сразу его не нашел? Может и к лучшему. Пораскинув мозгами я решил модернизировать старую схему под новые реалии и затереть то что разворачивал пять дней.
![Новая модернизированная схема Новая модернизированная схема](https://habrastorage.org/getpro/habr/upload_files/8e5/baf/9e7/8e5baf9e75baab6ca7e588c85545348a.png)
Стянув на прокси-ноду репозиторий kolla-ansible я быстро по доке все настроил и запустил процесс деплоя. Спустя минут 20 плейбук кончился и выполнение было успешным. Я побежал проверять - все работало и работало как надо. Самое интересное, местами даже быстрее чем ожидалось.
Основным плюсом для меня является то, что развертывание было автоматическим, без предварительной ручной подготовки машин, а также то, что кластер можно быстро ребутнуть, переинициализировать, обновить, расширить и прочие массовые манипуляции в одну команду.
Что имеем по итогу?
Счастливый я, счастливое руководство, рабочий кластер, прострелянные колени и опыт в ручном развертывание OpenStack, негативчик в пользу коробочных стэков, понимание для себя "как надо".