Pull to refresh

Comments 32

Транспорт ансибла - blessing & a curse. Каждый раз, когда "медленно", к нему прикручивают "быстро" (hello, mitogen). Каждый раз, когда прикручивают быстро, возникает желание вернуться на ванильный ансибл, потому что "точно работает".

Все создатели всех систем конфигурации ради удобства архитектуры сделали неудобно в эксплуатации. Точнее, не неудобно, а "шероховато". Условный ансибл способен прорваться через любую бездну. ssl proxy с терминацией на jump хост? Без проблем, только чуть медленее. У каждого сервера свой номер порта, и IP'шник, который плавает? Без проблем, динамическое инвентори твой друг. Можно даже и на уровне плейбуки подвигать ansible_host/port.

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

Сейчас сага со вторым питоном ещё не закончена, но когда закончится, исчезнут все следы старья, и будет просто: есть ssh и питон - ансибл работает. Есть ssh - ансибл работает, но не так удобно. Нет ssh, но есть хоть что-то для cli? Чуть-чуть подфигачить молотком и ансибл работает.

Ни одна система управления даже близко не подошла к этому уровню универсальности.

Ансибл - это не система управления конфигурацией.

Это тул для автоматизации. Да, он может быть использован как SCM. В частности - если речь про установку пакетов на одиночную машину. Но оркестрация на нем - это мрак. Посмотрите хотя бы на kubespray. Нет, никогда в жизни, увольте.

SCM - это папет и Солт, простите. Причем у папета еще относительно вменяемая объектная модель есть. Объектна модель и ансибл? Не смешите мои тапочки...

Я плохо видел солт и паппет, но наблюдал chef в самом кровавом режиме (когда на нём пытались описывать всё, включая квантовую физику на коммутаторах), и там я понял, что ни одна из систем этого поколения, на самом деле, не подходит, в основном из-за слабой типизации данных.

Есть тайная мечта узрить хороший язык конфигурации с фашизмом уровня rust (ownership, traits, generics), но пока я вижу jinja в момент принятия решения - на этом нельзя писать надёжный код. Можно более-менее делать сайд-эффекты, да, но не решения, особенно, с трансляцией в уровень исполнения.

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

И нет, у меня нет в ассортименте хорошего инструмента для оркестрации. Ни одного. Я страдаю.

Я согласен про строгую типизацию и прочее и хочу заметить что Соль идет в эту сторону в проекте под названием Idem. Нам нем сейчас переписывают небольшой кусок, но в перспективе это позволит писать значительно более надежную логику.

Пока что мы живем за счет сильного CI с проверками каждого куска логики

Есть тайная мечта узрить хороший язык конфигурации с фашизмом уровня rust (ownership, traits, generics)

Посмотрите Dhall.

Посмотрел. На этом невозможно писать в продакшене. Даже если в компании образуется админ-хаскелист, то он будет писать это в гордом одиночестве и оно сдохнет.

Кроме того, проблема же не столько в типах данных для шаблонов, сколько в описании конфигурации, т.е. возможность введения разумных сущностей DSL'ного порядка. Выделываться с map/fold, кстати, можно и на jinja, с меньшим успехом, правда, но можно. И оно никогда не решает проблемы конфигурации.

Главного, что не хватает, это хорошего DAG-подобного языка с ясным описанием ввода/вывода стейджей, зависимостей между ними и т.д. Есть consourse, который почти хорош, но без фашизма и без нормального single mode (только серверный). Есть миллион клонов make, которые все хотят файлы, а не абстрактные сущности.

Мне бы хотелось что-то такое:

impl VM for guest<libvirt<kvm>>{
   ...
}

impl VM for guest<openstack<mytype>>{
  ...
}

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

"Can't construct VM for openstack<mytype>, trait AccessIP not implemented for openstack<mytype>" вместо runtime сообщения от опенстека, что FIP не завезено.

Есть тайная мечта узрить хороший язык конфигурации с фашизмом уровня rust (ownership, traits, generics)

cfengine не оно ?

Точно не cfengine. У меня есть живой пример проекта, который с cfengine уходил на анисбл, и люди были счастливы, всё время.

 к нему прикручивают "быстро" (hello, mitogen)

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

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

У нас было много проблем с ssh timeouts, sudo escalation timeouts и тд при работе с Ансиблом.

У нас было много проблем с ssh timeouts, sudo escalation timeouts и тд при работе с Ансиблом.

поддержу. Просто модель у солта совершенно другая. Хочешь ssh - не вопроc, salt-ssh, нелюбимый ребенок SaltStack'а. В целом даже работает.

А вот ZMQ позволяет управлять узлами из-за Ната. Что может быть важно для рестриктед окружений. А ансибл - приходится костылять всякие ssh proxy jump etc.

И большинство из них уже исправлены. Сейчас, обычно, таймаут - признак сломанного коннективити.

Вот что интересно - Кубер активно сжирает сейчас весь рынок SCM... По крайней мере для новых проектов - он прекрасно заменяет ансибл (описание конфигурации + деплой + что-то еще)

Не совсем так. Куб решает другого рода задачи. Он "ест" проблему сверху, заменяя парадигму эксплуатации. Если приложение ложится на кубовую архитектуру и компания готова терпеть вытекающие из него расходы, то ок, ура, ура. Но куб - это архитектура, это не инструмент. Я бы, даже, сказал, это идеология в первую очередь.

А ансибл, наоборот, никакой архитектуры с собой не приносит - это просто инструмент, как молоток или паяльник.

Согласен. Но дело в том, что куб уже много где есть. И возникает вполне логичное желание - унифицироваться на нем... Что в случае монолитов порождает достаточно странных гомункулов.

куб - это решение.

Например, квартира - это решение жилищных проблем. Большинства из них. Ансибл - инструмент. Как, например, экскаватор. Экскаватор как решение жилищной проблемы звучит странно, однако, не отменяет пользы экскаваторов для людей, которые строят что-то своё.

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

Квартира точно так же может быть инструментом. Например, инструментом сохранения и инвестирования денег :-)

Пока не придет землетрясение в 8-9 баллов)

Disclaimer: я очень много работал с salt вплоть до конца 2018 года. С тех пор что-то могло измениться и улучшиться.
SaltStack без особых усилий может обслуживать тысячи нод. При желании он может обслуживать десятки тысяч нод.

Мне удалось заставить salt работать на 10к+ машин. Для этого пришлось переключиться на salt-ssh. Использование мастеров-миньонов было бесконечной болью с крэшами как мастеров так и миньонов. Заставить это работать надежно не удалось. С другой стороны salt-ssh с грехом пополам тянул всю инфрастуктуру.

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

Не могли бы вы раскрыть это утверждение?

В плане отладки SaltStack ведет себя так как бы вы ожидали от обычного приложения на Python.

В случае salt-ssh отладка выглядела так:

  1. меняем стейт
  2. применяем
  3. стейт не работает как надо
  4. запускаем salt-ssh с расширенным логированием
  5. вычленяем команду, которая запускается на удаленном хосте
  6. логинимся на удаленный хост
  7. запускаем там отредактированную команду, вычлененную ранее из логов (чтобы вывод не шел в /dev/null)
  8. из вывода пытаемся понять, в чем проблема
  9. переходим на 1

Не могли бы вы раскрыть это утверждение?

Я думаю, что это важно по двум причинам. Первая - python есть почти везде, что гарантирует хотя бы возможность бутстрапа salt. С другой стороны, в каком-то смысле это же и является проблемой, т.к. фиксация на версии системного python может приводить к несовместимостям, невозможности использовать определённые модули и прочие приключения, которые случаются ещё и с ансиблом. Второе - доработать или разобраться в том, как работает salt, может средней руки админ. У нас был кейс, когда очень долго отрабатывал кейс для создания юзеров. Т.к. код на python и написан адекватно - мы смогли быстро разобраться. Оказалось, что достаточно было доустановить определённый системный пакет и все поехало. Был бы salt на erlang - я даже не знаю, получилось бы решить проблему

Не могли бы вы раскрыть это утверждение?

Да я плоховато его раскрыл.

Я вел к тому что одно из главных преимуществ Ансибла на мой взгляд что его могут подхватить вчерашние сисадмины знающие только Баш. И в целом успешно им пользоватся.

Что бы успешно пользоватся Солью, Папетом и особенно Шефом - надо уметь програмировать на Питоне или Рубях. Хотя бы чуть-чуть.

И то что Ансибл и Соль написаны на Питоне дает им преимущество перед остальными в 2021 году когда Питон давно стал вторым Башем для нового поколения Ops\SRE.

В случае salt-ssh отладка выглядела так:

Мы не пользуемся salt-ssh - не могу прокоментировать. Жаль если так. Вроде бы ребята из Lyft тоже не пользуеются мастером но они делают masterless деплой просто через salt-call -local

Мы не пользуемся salt-ssh - не могу прокоментировать. Жаль если так. Вроде бы ребята из Lyft тоже не пользуеются мастером но они делают masterless деплой просто через salt-call -local

я бы разделил этап разработки и прода. В проде salt-ssh на уже известной инфре прекрасно работал. А вот в момент отладки - я активно не его гонял, а salt-call -local.

И то что Ансибл и Соль написаны на Питоне дает им преимущество перед остальными в 2021 году когда Питон давно стал вторым Башем для нового поколения Ops\SRE.

Спорное утверждение. Мой опыт показывает, что несовместимости между версиями и проблемы с конфликтующими зависимостями зачастую привносят ну очень много проблем. Так что преимущество быстро превращается в очередную боль.

Смотря как устанавливать... venv реально решает...

Да, дебаг salt-ssh иногда весёлый бывает. Но во многих случаях можно отлаживать просто через salt-call локально, а если прям нужно понять что сломалось именно в salt-ssh, то есть способ включить нормальное логгирование и забыть о вычленении команд из логов:

Взято тут https://twitter.com/SaltTips/status/1146306964026253312
Взято тут https://twitter.com/SaltTips/status/1146306964026253312
Т.к. код на python и написан адекватно

К сожалению это не так. Salt использует очень много питоновской магии. Говорю не голословно, мне пришлось ловить очень неприятные race conditions в salt и это было ох как не просто. У меня есть знакомый гуру питона, который посмотрев на код salt сказал, что хуже он не видел.

У вас опыт негативный - у меня позитивный. 1:1?

Касательно race condition - к сожалению, они возможны в любом коде. Даже на таких «надёжных» языках как Java, rust и golang. Но я представляю себе систему управления сотнями узлов на голанге… с необходимостью перекомпиляции всех бинарников, если понадобится подключить новую архитектуру или плагин. Не, нужно использовать подходящие инструменты.

От вас (не ради стеба, а ради самообразования и возможно Вы кого-то отвадите от ошибок) я очень хотел бы услышать две вещи:

  1. Конкретные примеры проблем (кроме того, что Вы уже написали в сообщении выше про salt-ssh)

  2. Какие альтернативы Вы видите для управления конфигурацией сотен или тысяч узлов? Тот же ансибл с головной машины на 1000 узлов без лимитов и разбивки на батчи точно так же прекрасно выедает всю доступную память и падать. Или работает как маленький слоупочек

Конкретные примеры проблем (кроме того, что Вы уже написали в сообщении выше про salt-ssh)

Вот то, что было самым болезненным: github.com/saltstack/salt/issues/33223
А вот все isues, которые я зафайлил: github.com/saltstack/salt/issues?q=is%3Aissue+author%3Akt97679

У вас опыт негативный — у меня позитивный. 1:1?

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

Какие альтернативы Вы видите для управления конфигурацией сотен или тысяч узлов?

На сегодняшний день я, к сожалению, не вижу безпроблемного решения. У меня есть опыт работы с chef, salt и puppet. Ни от одного из них я не в восторге.

Извините, возможно за прошедшее время что-то изменилось и вы нашли инструмент мечты?

Соль в целом очень сложный проект с историей.

Там много магии, вендер пинов(не могут смигрировать с Tornado 4.5x уже года три) и большая и грустная история с тем что до 2019 года они принимали плюс-минус любые PR без регрессионых тестов.

Мы тоже активные контрибьюторы и все патчи пытаемся вернуть в апстрим.

Но надо заметить что в Ансибле мы нашли не меньше багов и проблем и до сих пор чешем голову когда вызов крупного template на 50 машинах может отесть до 10Гб ОЗУ на Ансибл контролере.

В целом любая такая система будет сложной особенно если посмотреть на предоставляемый функционал.

Ansible -- единственное решение для интерпрайза.

В договорах на поддержку "аппаратно-программных" комплексов IBM и Oracle (про других не знаю) напрямую говорится, что заказчик несет ответственность за неисправности, вызванные установкой 3rd-party software.

И да, если ваш менеждер поверил вам, что вы легко докажете поддержке, что "этот маленький агент точно не мог вызвать kernel panic", то бегите из этой конторы немедленно.

Ansible -- единственное решение для интерпрайза.

какой-то очень голословный тезис. Salt и Puppet тоже вполне себе энтерпрайз. Напомню, что за первым стоит Vmware, а второй сам по себе разрабатывается одноименной компанией. Я уж не говорю о том, что если рассуждать так - ансибл - это редхат. Значит, редхат несет какие-то гарантии, то нет, это ошибочно и так это не работает (((

вызванные установкой 3rd-party software.

установкой, а не запуском? Точно так же IBM/Oracle могут доказать, что ваш сканер безопасности, который запускается по ссш или просто сканирует порты на IBM/Oracle решениях, лишает вас гарантии?

Sign up to leave a comment.

Articles