Maxim
Вот я пока хер знает, как им помочь
Anonymous
да, мне бы тоже хотелось знать когда "деплой завершился" или "ну не смогла я, давай хозяин все откатим" - доки пошерстил и че-то не нашел возможных эндпоинтов
Maxim
Нене
Maxim
Это легко
Anonymous
через prometeus?
Anonymous
а по поводу мониторинга деплоев (ну когда ошибки происходят) - я пока заюзал opbeat.com, он бесплатный
Anonymous
правда подход не совсем правильный: это я библиотеку в код вставляю которая ошибки шлет
Maxim
ну так эти стдауты собрать же надо
Maxim
флюент для сборки
Dmitry
ну в кубернтесе это из коробки
Dmitry
fluentd
Maxim
через prometeus?
не, банальнее все
spec:
template:
spec:
containters:
- <container>
lifecycle:
postStart:
exec:
command:
- /bin/bash
- /app/bin/post_start_notify.sh
Maxim
есть еще preStop
Anonymous
ну тут мы узнаем о том что под стартанул
Dmitry
Anonymous
если мы разворачиваем на 10 инстансов...
Maxim
> да, мне бы тоже хотелось знать когда "деплой завершился"
ответ на этот вопрос
Dmitry
Прометус?) И кастомные метрики
Maxim
метрики из чего?
Dmitry
ну например kubectl дергать и смотреть статус подов/деплоймента
Maxim
я могу в прометее узнать, что running_containers_total стало +=1 за последнюю минуту
Anonymous
кстати, по поводу 12 факторов: а вот есть stdout/stderr, условно говоря это log.info и log.error... а если я хочу log.warn иметь и log.debug то как поступать?
Maxim
но какой конкретно контейнер добавился - уже не могу
Dmitry
мы выплевываем json в stdout , там уже тип ошибки указывается
Dmitry
кибана /ES все парсит
Anonymous
хм ну да ок
Maxim
Dmitry
самая проблема в stdout в пхп
Dmitry
там php-fpm к каждому сообщению добавляет ворнинг
Maxim
s/в stdout//
Dmitry
Можно конечно писать в fifo и тейлить его в контейнере
Dmitry
но тогда в контейнере уже два процесса
Maxim
да нет, это была шутка
если из фразы "самая проблема в stdout в пхп" убрать "в stdout", то получится "самая проблема в пхп"
Maxim
ну я типа под хейтера закосил
Maxim
шучу-шучу
Maxim
хаха-хаха...
Dmitry
да ладно, пэхэпэ норм, я вообще свою карьеру с битрикса начинал)
Dmitry
тот еще зашквар
Maxim
я вот тут не понял
ты вроде как соглашаешься, с тем что флюент из коробки, но говоришь, что лучше лось
Maxim
ну в кубернтесе это из коробки
Maxim
fluentd
Dmitry
лучше что?
Maxim
ELK
Dmitry
Ну они в связке с fluentd работают
Maxim
ну то есть понятно, что скорее всего на миллионах событий в секунду флюентд наверное усреццо
но это труднодостижимый кейс сам по себе
Dmitry
и собирают логи с кластера
Maxim
ааа, это было ELK vs graylog2
Dmitry
http://kubernetes.io/docs/getting-started-guides/logging-elasticsearch/
Dmitry
Dmitry
С fluentd кстати забавно вообще было, мы добавили правило в конфиг, посылать копию всех записей в сислог на другом сервере, так у нас стали рандомом пропадать сообщения и в ELK и в сислоге, причем разные
Maxim
o_O
Dmitry
ну и в логах пусто, я даже через strace уже процесс смотрел
Dmitry
никаких ошибок
Dmitry
отключили это - все перестало пропадать
Maxim
по поводу мониторинга деплоев и кастомных метрик
Maxim
программисты у меня тут ленивые, поэтому мне пришлось написать им обертку вокруг kubectl
Maxim
такой недохельм
kay
страсти какие
Maxim
она обновляет версию в манифесте и пушает все в гитхаб с деплойным тегом
Maxim
в итоге получается так:
kay
кстати какую ACL используешь для программистов?
Maxim
скрипт (да и деплой вообще) сейчас работает так:
1. обновление версии в манифесте
2. git commit; git tag -a; git push; git push —tags
3. kubectl apply -f <манифест>
дальше скрипт умирает, а все остальное разделяется на два потока
1. квай получает хук от гитхаба и начинает билдить образ
2. кубернетес получает обновленный манифест и начинает готовить его к запуску
2.1 подготавливается новый под в состоянии pending
2.2 качается образ с квая (до усера, пока квай его не опубликует)
после того, как квай собрал и опубликовал новый образ
2.3 образ скачивается на ту ноду, где под в состоянии pending
2.4 гасится один из старых подов
2.5 под, бывший в состоянии pending, получает образ и стартует
2.6 гасится второй старый под
2.7 поднимается второй новый под
...
профит
Maxim
kay
об этом
Maxim
токены для аутентификации, ABAC для авторизации
kay
"версия в манифесте" ты имеешь в виду tag?
Maxim
да
Maxim
и вот этот вышеописанный процесс надо как-то отмониторить
Maxim
пока что в голову пришла только такая схема:
Maxim
шаг 1: в скрипте куда-то высираем номер версии, которую деплоим
шаг 2: в постСтарт хуке контейнера высираем туда же номер версии, которая задеплоилась
цифирьки сошлись - улюлю, все хорошо
цифирьки не сошлись - какое-то говно
второй цифирьки нет больше н-минут - что-то с вероятностью пошло не так
Maxim
но куда срать и чем ловить пока не придумал
Maxim
нужен совет знатоков ;)
Anonymous
а почему не запустить какой-нибудь CI сервер прямо в кубике? тогда все может происходить в одном pipeline
Maxim
заеб компании
Maxim
все что можно вынести наружу, надо вынести наружу
Maxim
поэтому никакого гитлаба, никаких CI внутре, etc