Как я знакомился с 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 и получилось ли у вас его развернуть.
MicroStack
MicroStack - по своей сути, это тот же DevStack, но с некоторыми отличиями, такими как:
Все процессы автоматизированы и все что необходимо для установки завернуто в snap-пакет;
Поддерживается Canonical;
По словам Canonical - "годен к проду" в том виде, каком есть;
Горизонтально масштабируем.
То есть, такой DevStack на максималках. Вот не поверите, его я тоже не могу развернуть. Как так вышло? До сих пор не могу понять. Рассказываю: имеется чистая ВМ с 32Gb RAM, 500Gb HDD, 8vCPU на которой я произвожу установку snap пакета из первой строчки сайта MicroStack. Идет установка минут 20, задает иногда какие то доп. вопросы - отвечаю, все ок. После завершения установки запрашиваю пароль админа и иду в дашборд.
О чудо! Вижу лого OpenStack!
Все вроде бы замечательно, ввожу логин и пароль, тыкаю Войти - ничего не происходит. Открываю консоль браузера, и вижу миллионы кроваво-красных месседжей с отрицательным результатом выполнения действий на стороне Horizon. Да боже ты мой, система же чистая, ставил snap-пакет, причем от Canonical, причем в дефолтном комплекте. Погодите ка, в дефолтном.... И тут я подумал, что может быть перепробовать остальные разновидности snap-пакетов microstack? Ну точно, надо действовать!
И как вы думаете чем это кончилось? Ничем. Ставил пакет, вычищал, снова ставил, снова вычищал, тестировал различные аргументы, которые советовал StackOverflow. Все мимо.
Вы можете уже начинать кидаться камнями, мол "рукоПоп", "все там нормально ставится". Только поясните, что именно я делал не так?
Учи матчасть!
Загнав себя в мучительно-депрессивное состояние, я заметил, что в голову мне начали приходить действительно гениальные мысли, что типа: "А может доку почитать?". Нет, я конечно знал список модулей стэка, как происходит их взаимодействие, для чего они нужны и пр. общую информацию. Хотелось почувствовать еще больше боли. И я полез в официальные туториалы по подготовке окружения для дальнейшей установки OpenStack. Конечно это все было от безысходности, но с другой стороны.. да елки-палки! Почему я перед попытками установки не начал курить доку? Понятно дело, что она не совсем напрямую относится к тому же микростэку, но все же. Там тебе и примеры конфигов, там и подробное разжевывание выполняемых для установки команд. [но на самом деле, на момент написания статьи, считаю, что доки по установке OpenStack - полное днище].
Здравствуй OpenStack #1: Singlenode
И вот, спустя некоторое время безрезультатных экспериментов и изучения документации по устройству модулей и туториалов по установке, я принялся вручную накатывать модуль за модулем на свежесозданную виртуалку под убунтой. Тогда я думал: - "Ну если вот сейчас ничего не сработает, значит признаю полное фиаско в развертывании мной опенстэка". Действительно грозила прям серьезная психологическая травма :)
Кстати, устанавливал модули в следующей последовательности:
keystone
glance
placement
nova-controller
nova-compute
neutron-controller
neutron-compute
cinder-controller
cinder-storage
horizon-dashboard
И вот, я установил последний по списку модуль стэка Horizon. Дрожащими руками открываю браузер, ввожу пароль в форму авторизации, нажимаю войти и вдруг открывается дашборд. Рабочий, настоящий дашборд. Я был просто счастлив в тот момент, это же означало, что у меня получилось! Естественно первым делом я хочу создать тестовый инстанс. Преднастроил типы инстансов, загрузил Cirros в список образов, ввел нужные данные в форме создания и кликнул Создать. После чего у меня в списке инстансов появился мой свежесозданный плацдарм в состоянии Сопоставление блочного устройства.
И в итоге, в конце я получил ошибку этого самого "сопоставления". При изучении логов, оказалось, что проблема связана с отсутствием связи с iSCSI при обращении Cinder к хранилищу. Над этой темой я сидел больше недели, но пофиксить так и не смог.
Здравствуй OpenStack #2: Multinode
Далее задача набрала еще более серьезный оборот. Показав руководству, что я криво-косо развернул OpenStack, им, как ни странно, понравилось. Понравилось потому, как оказалось, что у них некоторое время назад были в штате какие-то айтишники, которые в общем-то не смогли ни единого модуля толком развернуть, а уж тем более показать. У меня было странное ощущение: вроде бы развернул то, что мои предшественники не смогли развернуть, но развернул так, что оно не работает. Максимально идиотское ощущение. Следом как раз и прозвучала идея руководства: "Слушай, мы тут тебе мощности выдадим размером в двенадцать блейд-серверов, попробуй развернуть вычислительный кластер". Вот на этом моменте я прям осел. Сам думаю, блин, и так ниче не работает на одной машине, а тут целый кластер. Но на самом деле интересно было все сделать "как правильно", чтобы была максимально распределенная и независимая система [сейчас я уже понял, что "как правильно" не существует и для каждой конечной цели есть свой первоначальный подход]. И вот я сел рисовать схему.
И вы знаете, схема оказалась пригодной к жизни. Спустя пять дней я развернул эту свою идею и оно даже заработало с первого раза и даже так как надо. Тестирования прошли успешно, я был доволен. Но тут подъехал новый сюжет в виде еще 12 блейдов.
Здравствуй OpenStack #3: Kolla Ansible multinode
Снова тратить целую недели на ручное развертывание этого прекрасного продукта, прямо говоря, не хотелось. Да и звучит это глупо как то. Я начал гуглить и был удивлен насколько много в интернете костылей придумали люди, чтобы автоматически развернуть стэк. Естественно пару минут спустя, я полез искать ансибл плейбук для автоматического и самое главное правильного деплоя. Тут я и нашел Kolla Ansible. Оказывается далеко ходить и не надо было. Почему я сразу его не нашел? Может и к лучшему. Пораскинув мозгами я решил модернизировать старую схему под новые реалии и затереть то что разворачивал пять дней.
Стянув на прокси-ноду репозиторий kolla-ansible я быстро по доке все настроил и запустил процесс деплоя. Спустя минут 20 плейбук кончился и выполнение было успешным. Я побежал проверять - все работало и работало как надо. Самое интересное, местами даже быстрее чем ожидалось.
Основным плюсом для меня является то, что развертывание было автоматическим, без предварительной ручной подготовки машин, а также то, что кластер можно быстро ребутнуть, переинициализировать, обновить, расширить и прочие массовые манипуляции в одну команду.
Что имеем по итогу?
Счастливый я, счастливое руководство, рабочий кластер, прострелянные колени и опыт в ручном развертывание OpenStack, негативчик в пользу коробочных стэков, понимание для себя "как надо".
Комментарии (24)
amarao
14.06.2022 14:46Я ждал рассказа про openstack-ansible, а так же ругань на их гнилую документацию. Но не увидел даже попытки, что обидно.
openstack-ansible доводится до какого-то продакшена в единицы дней. Дальше начинаются нюансы, но базовая минимальная продакшен-конфигурация (на дефолтных бриджах и т.д.) работает, причём, с решёнными "из коробки" несколькими ближайшими проблемами с availability и scalability.
shmelevdi Автор
14.06.2022 14:57Спасибо за комментарий)
Я планирую вынести продолжение за kolla-ansible в отдельную статью. Обсудим множество проблем связанных с неосновными модулями типа Trove, Designate, Manila: как они по-уродски работают с horizon и как мейнтейнеры забивают на активные ишью.
Что касается доки - действительно, без мата тут не обойтись)amarao
14.06.2022 15:35Мой совет, если хотите "начать" с openstack, минимизируйте компоненты до самых базовых. Связка keystone+nova+glance+neutron+horizon - это минимум, на котором можно использовать вируалки. Обратите внимание на отсутствие swift и cinder, без этого можно жить.
Вот когда у вас будет рабочий код, поднимающий рабочий openstack, можно пытаться притащить туда ещё чего-то интересного.
shmelevdi Автор
14.06.2022 15:43Согласен с вами.
У нас "рабочий код, поднимающий openstack" уже есть.
На момент написания статьи, кластер уже давно работает в проде) об этом я не упомянул.
И вот поэтому потихоньку тестирую неосвоенные модули)Vaderom
14.06.2022 22:34Было бы интересно почитать про ваш опыт с модулями опенстака вне коренных.
Последний раз когда я имел дело с опенстаком в середине 2018 года, ни один из интересующих и реально востребованных у меня модулей (Designate, Trove, Manila) не заводился, от слова вообще, несмотря на уверения документации что оно прям работает и статьй людей у которых оно якобы бежит аж в проде.
Про более эзотерические модули как Mistral или Murano вообще молчу, такое ощущение что их просто выпустили полностью сырыми в расчете что пользователи будут их дописывать в процессе установки.
Vaderom
14.06.2022 14:57+2Практически дословно мой опыт работы с опенстаком в 2015-16 годах.
Даже обидно что за 7 лет в этом плане ничего не стало лучше - та же страшная документация, неработающие из коробки all-in-one референс-развертки, стопки глюков на ровном месте. Я влюбился в опенстак тогда, и до сих пор считаю что это впринципе отличная платформа не имеющая аналогов по многим пунктам, но исполнение, особенно во всем что связано с разверткой и администрированием - из рук вон плохо.
Мне тогда повезло, я практически сразу понял что не потяну ручную развертку и наткнулся на набор chef openstack cookbooks которые позволили мне хоть как-то развернуть рабочий кластер а потом разбиратся на рабочей системе.
Очень рекоммендую залезть руками поглубже в работающий кластер и как следует разобратся как оно работает - как различные модули/сервисы взаимодействуют между собой (message broker, база данных, зачем нужен keystone, iptables/openVswitch итп.), что они на самом деле делают за кулисами и как. Без этого вся эта красивая конструкция посыпется при первом серьёзном глюке и не будет никакой возможности что-либо починить, только переделывать и надеятся что оно снова заработает.А глюки будут, увы. Достаточно чтоб несколько раз без обьяснения пропала сеть или отвалились ноды, как у меня было - и довольное руководство может резко изменить своё мнение.
shmelevdi Автор
14.06.2022 15:03Спасибо за комментарий)
Вы действительно правы, исполнение оставляет желать лучшего. Поэтому многие крупные компании и даже небольшие комьюнити кодеров берутся за собственные реализации на основе OpenStack.
P.S. Лично я уже не протяжении полугода пинаю вендоров стэка по одному и тому же ишью. К сожалению, кроме типовых отписок "оке мы приняли, починим" профита нет
litos
14.06.2022 15:13Думаю, что в компании без вменяемого руководства не стоит вообще браться за данную технологию. Так как разные нюансы могут приводить и к простою и к долгому времени развёртывания и к солидным тратам на сетевое оборудование при использовании сетевых дисков
ULP
14.06.2022 15:14+2это еще не приступали к эксплуатации, это еще не пытались что-то освежить из этого зоопарка софта по отдельности, это еще из-за какого-то мелкого глюка весь этот кластер не рассыпался по частям на мелкие кусочки, которые надо склеивать руками неделю с полным простоем. Это еще не расходился цеф, на само-восставление которого потребуется несколько дней с полным простоем. Лучше далеко не отходите, не планируйте много на выходные, не пейте ничего алкогольного вечером - может придется срочно выезжать ночью.
shmelevdi Автор
14.06.2022 15:28Вы правы)
Думаю в дальнейшем об этом я также напишу.
Путь боли должен сопровождаться болью) самое забавное, то что я, на данный момент, занимаюсь один всем этим делом)
BubaVV
14.06.2022 22:16+1Девстек в релизах после примерно Квинса довольно капризный с точки зрения конфигурации хоста, но с небольшим допилом удалось сделать несколько плейбуков для быстрого запуска. И даже в мультинодном режиме
msilich
14.06.2022 22:53+1Как только вам придется работать и разворачивать OpenStack в кровавом энтерайзе с саппортом от IBM/RedHat и их же дистрибутивом openstack ... вам захочется работать гдето в поле без всего этого вот.
shmelevdi Автор
14.06.2022 22:53Кстати, энтерпрайз сборки не смотрел еще. Все настолько плохо?
msilich
14.06.2022 23:27+1Я несколько лет устанавливал для кастомеров OpenStack с помощью kolla-ansible + ceph-ansible и поддерживал. Все было OpenSource. Там ты точно знаешь что помощь если есть, то только от community итд. C RedHat OpenStack у тебя есть только "помощь" от RedHat/OpenStack и их саппорт, скажем так, не на том уровне за который хочется платить. Их скрипты установки стэка это ... мечты мазохиста. После того как мне пришлось ставить стэк от RedHat и решил больше не связываться с стэком вообще. Раньше хоть был стэк от Suse, но они кинули сообщество. Еще есть саппорт от Cannonical. Но как там с сапортом лично я не знаю, не связывался так что хз. Кровавому энтерпрайзу нужен саппорт от вендора, без него никак.
litos
Если бы всё так просто было, то инженеры по виртуализации имели бы зарплату на уровне простых админов. Данное ПО не ставится из репозитория ОС, где просто пакет сделали, а как правило, вручную, с использованием нужных версий и затем для воспроизводимости установки еще и в docker со своего репозитория ну и с пониманием что и для чего
Если надо что-то сделать нажимая далее-далее, то тут да, proxmox, xcp-ng, vmware как вариант лучший выбор
shmelevdi Автор
Согласен)
И лишь на момент ручного развертывания я стал приверженцем этой точки зрения.
Иногда приходится глубоко зарыться в неизвестный для себя продукт, чтобы понять простые вещи
amarao
openstack - не продукт. Продукт - это то, что вы покупаете и где с продавцом у вас есть обязующие отношения.
А в этом случае - это платформа, и вы можете либо её начать использовать (разобравшись с ней), либо поискать её как продукт. Но это потребует денег.