Pull to refresh

Comments 31

Отличная статья, большое спасибо! Узнал еще пару интересных нюансов об инструменте

smart gathering ничего не ускоряет, потому что в хороших плейбуках сказано gather_facts: false пока не нужно и правильный subset, если нужно.


Насчёт tranfer_method я прочитал тут первый раз и это пойдёт в мой список для экспериментов. ControlMaster мы не используем, потому что залипающие соединения, к сожалению, портят жизнь, и преизрядно. Любые ребуты или манипуляции с сетью на целевых хостах, и ControlMaster из ускорителя превращается в замедлитель отладки.

Изменение конфигурации сетевых интерфейсов при подключении к хосту по сети выглядит как-то так:
СМЕРТЕЛЬНО ОПАСНО! НЕ ПОВТОРЯТЬ!


Ну просто не смог удержаться от вставки этого видео.

netplan apply.


Плюс, это же автоматизация и CI, если оно в этом месте сломается, значит код сломан, надо фиксить. Если же код не сломан, то операция проходит без особых проблем.

netplan фу-фу-фу. Посмотрел я на это поделие убунтоводов и выпилил от греха подальше

При работе с дистрибутивом глупо бороться с дистрибутивом. Либо меняйте дистрибутив, либо используйте, что дали.


Для базовых задач настройки сети его хватает, если нужно странного, то нужны альтернативные методы. Это совершенно не отменяет романтику с перезапуском сети с новыми настройками (топик-то по ControlMaster у ssh для ansible).


ЗЫ Я обычно для странных сетевых штук использую systemd-юниты. Очень, очень удобно в контексте зависимостей и порядка исполнения.

При работе с дистрибутивом глупо бороться с дистрибутивом

почему бороться? Во-первых, нетплан — это хоть и навязываемый, но не единственный метод настройки сети. Во-вторых, убунту прекрасно работает с другими способами, которых достаточно много — и с systemd-networkd, и c NetworkManager, и с ifup.


Я обычно для странных сетевых штук использую systemd-юниты. Очень, очень удобно в контексте зависимостей и порядка исполнения.

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

Немного попиарю незнакомого чувака из интернета, вот вполне хорошая и работающая роль ansible-netplan


IMHO: для серверной/облачной 20.04 вполне жизнеспособен один самостоятельный netplan, для десктопа уж лучше network-manager с плагинами и «огромным гуищем»

А если после всё вышеперечисленное, не особо помогло (на моих экспериментах это были максимум десятки процентов ускорения), то обязательно попробуйте таки Mitogen.

Проблемы с ним автор, кмк _сильно_ преувеличил, за несколько лет моей эксплуатации ничего особо серьезного с ним не было, а ускорение он дает в разы.

Оно на крае сознания плавало, но когда я его смотрел он был слишком молодым. Посмотреть пристальнее, наверное, стоит. Записал в нашу research queue.

за несколько лет моей эксплуатации ничего особо серьезного с ним не было, а ускорение он дает в разы.
очень сильно зависит от задач. Например, если у вас 90% занимает скачивание и восстановление дампа БД, то митоген ничем не поможет
Есессно, он помогает тем сильнее, чем больше отдельных тасок исполняется.
То есть чем сложнее _конфигурация_ — тем лучше она им оптимизируется.
Дампы сливать/вливать, имхо, не самый типичный сценарий для ансибла.
Дампы сливать/вливать, имхо, не самый типичный сценарий для ансибла.

а какой тогда типичный? Если мы говорим про классическое использование ансибла в терраформ и пакере для подготовки машин к работе, то там даже ssh не нужен, не говоря уже о митогене :-/

На мой взгляд «типичный» — это настройка условного кластера приложения, состоящего из N виртуальных или бареметал серверов.
Для локальной работы из tf/packer механики из статьи тоже неприменимы так то.

Ansible, cluster… Выглядит своеобразно. Объясню почему — потому что мои коллеги, которые разворачивали ту же Кафку ансиблом, не носили написать нормальные плейбуки с последовательным рестартом нод кластера, чтобы обеспечить непрерывность работы сервиса. Но вот deploy A/B уже мы на ансибл писали, без downtime… И по факту это получается не просто один плейбук на все, а коллекция плейбуков под каждую конкретную задачу.
Я уж не говорю о том, что приходит кубернетес и берет эти проблемы на себя.

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

Тот же кубик ведь тоже забутстрапить чем-то надо, и ускорить kubespray — милейшее дело.
Тот же кубик ведь тоже забутстрапить чем-то надо, и ускорить kubespray — милейшее дело.

зачем kubespray? не нужен он ) кластер сетапит себя сам — rke up или terraform, или решения вроде https://github.com/kvaps/kubefarm

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

В целом те техники про которые собсно статья написана, все равно ни с локальными конфигами, ни с заливкой дампов не помогут.
А там где будут эффективны эти настройки, будет эффективен и митоген.
> если у вас 90% занимает скачивание и восстановление дампа БД
То, кстати, и описанные в статье методы тоже не помогут.

Пока плейбуки простые — всё будет работать. Я так и написал. Это, кстати, тоже по результатам чтения исходников
Mitogen: одно перекрытие штатных загрузчиков чего стоит.

Я не очень понимаю, а что считать простыми плейбуками?
Точнее на каком уровне начинается сложность, на которой все должно сломаться?

Мне кажется у меня далеко не простые плейбуки, куча ролей как своих так и из гелекси.
Есть свои плагины для переменных и сторонный vault плагин.
Все работает без проблем.

А что митоген поддерживает ансибл2.9 ?? И питон 3.8 ???
Митоген на каких-то тестах реально показывает ускорение в 6+ раз быстрее…
Но иногда валится в самый не подходящий момент… и приходится разбираться " кто виноват и что делать "… проект идея супер… но пока сыроват.

> поддерживает ансибл2.9
да
> питон 3.8 ???
да

Валится чрезвычайно редко, единственный кейс который у меня возникал — смесь машин с 2 и 3 питоном в инвентаре, не работает автоопределение версии питона. Но все работает, если обозначить ansible_python_interpreter в явном виде.

Адовая экономия времени провижнинга которую он (мне лично) дает, вполне стоит затраченных на дебаг пары часов в год.

Взял толстючую job'у на 50 минут (80% — анисбл, остальное тесты через testinfra и инфраструктурное). Было 51 minutes and 27 seconds, поменял transfer_method = piped стало 51 minutes and 56 seconds. В пределах погрешности — не поменялось.

Данная настройка ускоряет только обмен с файлами с управляемым хостом (см.текст и доку по ссылке).

Я понимаю. Разумеется, в проекте достаточно и copy, и template. Эксперимент показал, что существенного прироста это не даёт. Штатный протокол достаточно большой, а модули достаточно медленные, чтобы смена формата передачи файлов не давала никакого ощутимого изменения.

Было бы интересно увидеть сравнения времени выполнения одного и того же плейбука на разных версиях python, например, 2.7 и 3.8. Будет ли хоть какая то заметная разница?

UPD. Добавил предупреждение о том, что из пары значений smart|explicit придётся выбрать что-то одно. edo1h, благодарю!
UFO just landed and posted this here
Sign up to leave a comment.

Articles