Size: a a a

2020 March 16

GG

George Gaál in DevOps
Dmitry Sergeev
@yamlcoder
Вопрос свелся к тому что, сохранять ли инфу о совместимости версий репы кодовой с инфра репой. Если сохранять, то ифра репу можно хранить как сабмодуль или в прям в кодовой репе. Если нет, то я пока не понял, как решать свои проблемы, свзяанные с этим.
Окей. Если ты новый, например,  прометеус оператор катишь. Твои действия ?
источник

GG

George Gaál in DevOps
я никуда не тороплюсь когда напьюсь тогда напьюсь
В кластер. Ты напоминаешь 23-летнего сеньёра из Э42. Ты не всю инфру обновляешь везде и сразу. А по canary/rolling/blue-green
Лол
источник

GG

George Gaál in DevOps
У тебя не все изменения в инфре обратно совместимы. Упыри, которые пишут те же операторы, пишут их одной левой
источник

як

я никуда не тороплюсь когда напьюсь тогда напьюсь in DevOps
Евгений Омельченко
Начнёшь хранить стейты инфры в базе и вернёшься в мир заббикса и винды
Евгений, мы все знаем, что ты умняш. Пиши сразу КАК НАДО/правильно делать (в идеале - ещё и почему)
источник

ЕО

Евгений Омельченко in DevOps
Там есть выше как надо за моим авторством
источник

GG

George Gaál in DevOps
Повтори плиз для тупых
источник

GG

George Gaál in DevOps
Я понимаю, что селфконтейнд эпликейшн это терминальный и идеальный случай
источник

ЕО

Евгений Омельченко in DevOps
Dmitry Sergeev
Для этого автосквош есть :) Но кодеры вообще тут не при чём. У вас должно быть две репы, для инфраструктуры и для кода, отдельно

1) Кодер херачит код в мастер
2) Ставит новый тег
3) Идёт и выставляет в репе инфры новый тег
4) Коммитит
5) CI запускает деплой
6) Если во время деплоя возникают проблемы, то загорается alert
7) Дежурный разработчик лезет смотреть что сломалось
8) По завершении дебага делает реверт в гите инфраструктуры
this
источник

GG

George Gaál in DevOps
Ньет
источник

як

я никуда не тороплюсь когда напьюсь тогда напьюсь in DevOps
Dmitry Sergeev
> Всё так. в инфра репу рендерятся готовые к деплою манифесты.
Ну окей начнем заново.


Смотри. У тебя есть инфра репа, есть репа с кодом сервиса.

v1.0.1 код сервиса требует два деплоймента и cronjob
v1.0.2 код сервиса требует только один деплоймент


Нужно откатить с v1.0.2 до v1.0.1. Если мы просто пропишем v1.0.1 и запушим, приложение сломается, так как оно зависело от двух деплойментов и cronjob. А они пропали

@elemir90 Как я понял предлагает, чтобы master инфра репы, всегда соотвесвтовал состоянию в кубе + никаких автоматических откатов.

То есть для отката, нужно найти коммит в инфра репе, когда в нем был проиписан сервис версии v1.0.1 и сделать revert до этого коммита. И запушить.

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

И я не понимаю в чем приемущество его описанного подхода. Вот и все. Пытаюсь выяснить
Никаких сабмодулей, толко номера версий (теги) в пайплайн
источник

LB

Let Eat Bee in DevOps
Dmitry Sergeev
@yamlcoder
Вопрос свелся к тому что, сохранять ли инфу о совместимости версий репы кодовой с инфра репой. Если сохранять, то ифра репу можно хранить как сабмодуль или в прям в кодовой репе. Если нет, то я пока не понял, как решать свои проблемы, свзяанные с этим.
инфра репа этот тот условный кронжоб для 1.0.2? не важно как, важно что б всё что хочется задеплоить хранилось в доступном месте в уже отрендереном виде. можно как артифакт в сиай, можно как комит в инфра репе
источник

GG

George Gaál in DevOps
Начнем с того, что ci != Cd
источник

GG

George Gaál in DevOps
И я не говорю о том, что если никто не смотрит в инфра репу, то грош ей цена (а как это проверить - думали ?)
источник

GG

George Gaál in DevOps
я никуда не тороплюсь когда напьюсь тогда напьюсь
Никаких сабмодулей, толко номера версий (теги) в пайплайн
+
источник

як

я никуда не тороплюсь когда напьюсь тогда напьюсь in DevOps
Let Eat Bee
> То есть для отката, нужно найти коммит в инфра репе, когда в нем был проиписан сервис версии v1.0.1 и сделать revert до этого коммита. И запушить.

Не совсем. для отката надо найти коммит v1.0.2 и заревертить его. т.е. в общем случае мы не откаывается к чему-то, а отменяем что-то.

> И я не понимаю в чем приемущество его подхода.

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

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

Так же инфра репа сериализует все изменения: пока одно изменения инфра репы выкатывается, другие ждут.  это позволяет избежать некоторых ошибок.
Поэтому всё должно быть обмазано тестами и должны быть известны/указаны совместимые версии. Requirements.txt
источник

GG

George Gaál in DevOps
я никуда не тороплюсь когда напьюсь тогда напьюсь
Поэтому всё должно быть обмазано тестами и должны быть известны/указаны совместимые версии. Requirements.txt
Это идеальный мир
источник

GG

George Gaál in DevOps
И никаких хот фикусов вручную, кончено же
источник

як

я никуда не тороплюсь когда напьюсь тогда напьюсь in DevOps
George Gaál
Это идеальный мир
Идеальный мир это когда протестированые на совместимость версии всего на свете ещё в базу пишутся в табличку и эта табличка из базы в Wiki/Confluence - всегда актуальная. А отредактировать её руками нельзя, - только запустив соответствующий пайплайн
источник

DS

Dmitry Sergeev in DevOps
Евгений Омельченко
Слушайте, если вам нужно в 10 конфигурациях деплоить одно и то же приложение для прода, то это легаси. Бессмысленно обсуждать как применять практики, рассчитанные на микросервисную архитектуру, к такой конфигурации, тут несомненно нужны костыли
ну вот реальный кейс. Давай еще раз
Есть одно и тоже приложение для разных платформ:
google, ios - юзеры во сновном из европы.
wechat, tiktok - китай
yahoojp - япония

Базы общие не нужны, бэкенды тоже. Самый просто способ - деплоить их отдельно. Нет никакой причины держать для них общий бэк и базу. Иначе проблем с тем что  у тебя бэкенды и база геораспределены по всему земному шару просто уйма. + у тебя нет всяких там AS и bgp anycast и тому подобного.

Просто не понимаю, почему когда ты идешь в сторону упрощения архитектуры, чтобы не страдать от сложных проблем это легаси?
источник

як

я никуда не тороплюсь когда напьюсь тогда напьюсь in DevOps
Dmitry Sergeev
> Не совсем. для отката надо найти коммит v1.0.2 и заревертить его. т.е. в общем случае мы не откаывается к чему-то, а отменяем что-то.

нет.
Если например ты откатываешь с v1.0.3 до v1.0.1 разреверт тебя откатит на v1.0.2

> преимущество инфра репы в том, что оно отделяет состояние инфры от состояния кода, инфра репа вообще не знает ничего о версиях приложения

Да, это приемущество. Удобно отдельно  и выкатывать, я не спорю. Я говорю о минусах. Как в примере выше, когда у тебя конкретная версия приложения, зависит от конкретной версии описания инфраструктуры. Либо тебе нужно хранить зависимость версии приложения от версии описания инфраструктуры через сабмодули,  что противоречит подходу предложенному @elemir90 Евгением.


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

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


> Инфра репа тупая как пробка, там нечему ломаться и пока образ в докер регистри есть и версия куба совместима накатывать откатывать можно сколько угодно

Ну я вот и спрашиваю, как принято решать проблемы. Когда у тебя одна версия приложения зависит от определенной версии тупой как пробки репы. Я ее решаю через сабмодули или сохраняя вместе с кодом сервиса
У тебя проблема или с долгом, или с архитектурой. Кто-то за кем-то не успевает. Или одменам или разрабам не хватает человеко-часов.
источник