Как я знакомился с OpenStack и прострелил себе колени, голову и сердце.

Все-таки торт или не торт?
Все-таки торт или не торт?

Начиная углубляться в те или иные вопросы, ненароком заглядываешь и на Хабр. Так и я будучи начинающим опенстакером специалистом по облачным вычислениям однажды забрел сюда в поисках понимания: "Что же такое современный 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 (взято из открытых источников)

Перепробовал получается различные его версии с хаба. Может опыта было маловато, больше так и не пробовал его развернуть. Поделитесь в комментариях что думаете о DevStack и получилось ли у вас его развернуть.

MicroStack

MicroStack - по своей сути, это тот же DevStack, но с некоторыми отличиями, такими как:

  • Все процессы автоматизированы и все что необходимо для установки завернуто в snap-пакет;

  • Поддерживается Canonical;

  • По словам Canonical - "годен к проду" в том виде, каком есть;

  • Горизонтально масштабируем.

То есть, такой DevStack на максималках. Вот не поверите, его я тоже не могу развернуть. Как так вышло? До сих пор не могу понять. Рассказываю: имеется чистая ВМ с 32Gb RAM, 500Gb HDD, 8vCPU на которой я произвожу установку snap пакета из первой строчки сайта MicroStack. Идет установка минут 20, задает иногда какие то доп. вопросы - отвечаю, все ок. После завершения установки запрашиваю пароль админа и иду в дашборд.

О чудо! Вижу лого OpenStack!

Страница авторизации Horizon
Страница авторизации Horizon

Все вроде бы замечательно, ввожу логин и пароль, тыкаю Войти - ничего не происходит. Открываю консоль браузера, и вижу миллионы кроваво-красных месседжей с отрицательным результатом выполнения действий на стороне Horizon. Да боже ты мой, система же чистая, ставил snap-пакет, причем от Canonical, причем в дефолтном комплекте. Погодите ка, в дефолтном.... И тут я подумал, что может быть перепробовать остальные разновидности snap-пакетов microstack? Ну точно, надо действовать!
И как вы думаете чем это кончилось? Ничем. Ставил пакет, вычищал, снова ставил, снова вычищал, тестировал различные аргументы, которые советовал StackOverflow. Все мимо.

Вы можете у��е начинать кидаться камнями, мол "рукоПоп", "все там нормально ставится". Только поясните, что именно я делал не так?

Учи матчасть!

Я после попыток установки OpenStack "из коробки"
Я после попыток установки OpenStack "из коробки"

Загнав себя в мучительно-депрессивное состояние, я заметил, что в голову мне начали приходить действительно гениальные мысли, что типа: "А может доку почитать?". Нет, я конечно знал список модулей стэка, как происходит их взаимодействие, для чего они нужны и пр. общую информацию. Хотелось почувствовать еще больше боли. И я полез в официальные туториалы по подготовке окружения для дальнейшей установки OpenStack. Конечно это все было от безысходности, но с другой стороны.. да елки-палки! Почему я перед попытками установки не начал курить доку? Понятно дело, что она не совсем напрямую относится к тому же микростэку, но все же. Там тебе и примеры конфигов, там и подробное разжевывание выполняемых для установки команд. [но на самом деле, на момент написания статьи, считаю, что доки по установке OpenStack - полное днище].

Здравствуй OpenStack #1: Singlenode

И вот, спустя некоторое время безрезультатных экспериментов и изучения документации по устройству модулей и туториалов по установке, я принялся вручную накатывать модуль за модулем на свежесозданную виртуалку под убунтой. Тогда я думал: - "Ну если вот сейчас ничего не сработает, значит признаю полное фиаско в развертывании мной опенстэка". Действительно грозила прям серьезная психологическая травма :)

Кстати, устанавливал модули в следующей последовательности:

  1. keystone

  2. glance

  3. placement

  4. nova-controller

  5. nova-compute

  6. neutron-controller

  7. neutron-compute

  8. cinder-controller

  9. cinder-storage

  10. horizon-dashboard

И вот, я установил последний по списку модуль стэка Horizon. Дрожащими руками открываю браузер, ввожу пароль в форму авторизации, нажимаю войти и вдруг открывается дашборд. Рабочий, настоящий дашборд. Я был просто счастлив в тот момент, это же означало, что у меня получилось! Естественно первым делом я хочу создать тестовый инстанс. Преднастроил типы инстансов, загрузил Cirros в список образов, ввел нужные данные в форме создания и кликнул Создать. После чего у меня в списке инстансов ��оявился мой свежесозданный плацдарм в состоянии Сопоставление блочного устройства.

Ох уж этот Cinder
Ох уж этот Cinder

И в итоге, в конце я получил ошибку этого самого "сопоставления". При изучении логов, оказалось, что проблема связана с отсутствием связи с iSCSI при обращении Cinder к хранилищу. Над этой темой я сидел больше недели, но пофиксить так и не смог.

Здравствуй OpenStack #2: Multinode

Далее задача набрала еще более серьезный оборот. Показав руководству, что я криво-косо развернул OpenStack, им, как ни странно, понравилось. Понравилось потому, как оказалось, что у них некоторое время назад были в штате какие-то айтишники, которые в общем-то не смогли ни единого модуля толком развернуть, а уж тем более показать. У меня было странное ощущение: вроде бы развернул то, что мои предшественники не смогли развернуть, но развернул так, что оно не работает. Максимально идиотское ощущение. Следом как раз и прозвучала идея руководства: "Слушай, мы тут тебе мощности выдадим размером в двенадцать блейд-серверов, попробуй развернуть вычислительный кластер". Вот на этом моменте я прям осел. Сам думаю, блин, и так ниче не работает на одной машине, а тут целый кластер. Но на самом деле интересно было все сделать "как правильно", чтобы была максимально распределенная и независимая система [сейчас я уже понял, что "как правильно" не существует и для каждой конечной цели есть свой первоначальный подход]. И вот я сел рисовать схему.

Первая версия схемы OpenStack-кластера на 12 блейд-серверов
Первая версия схемы OpenStack-кластера на 12 блейд-серверов

И вы знаете, схема оказалась пригодной к жизни. Спустя пять дней я развернул эту свою идею и оно даже заработало с первого раза и даже так как надо. Тестирования прошли успешно, я был доволен. Но тут подъехал новый сюжет в виде еще 12 блейдов.

Здравствуй OpenStack #3: Kolla Ansible multinode

Снова тратить целую недели на ручное развертывание этого прекрасного продукта, прямо говоря, не хотелось. Да и звучит это глупо как то. Я начал гуглить и был удивлен насколько много в интернете костылей придумали люди, чтобы автоматически развернуть стэк. Естественно пару минут спустя, я полез искать ансибл плейбук для автоматического и самое главное правильного деплоя. Тут я и нашел Kolla Ansible. Оказывается далеко ходить и не надо было. Почему я сразу его не нашел? Может и к лучшему. Пораскинув мозгами я решил модернизировать старую схему под новые реалии и затереть то что разворачивал пять дней.

Новая модернизированная схема
Новая модернизированная схема

Стянув на прокси-ноду репозиторий kolla-ansible я быстро по доке все настроил и запустил процесс деплоя. Спустя минут 20 плейбук кончился и выполнение было успешным. Я побежал проверять - все работало и работало как надо. С��мое интересное, местами даже быстрее чем ожидалось.

Основным плюсом для меня является то, что развертывание было автоматическим, без предварительной ручной подготовки машин, а также то, что кластер можно быстро ребутнуть, переинициализировать, обновить, расширить и прочие массовые манипуляции в одну команду.

Что имеем по итогу?

Счастливый я, счастливое руководство, рабочий кластер, прострелянные колени и опыт в ручном развертывание OpenStack, негативчик в пользу коробочных стэков, понимание для себя "как надо".