Logan
это наилучший вариант. делаем контейнер с unicron+django и размножаем. Главный вопрос – как джанго прожует работу в кластере, штатных средств кластеризации там не было.
Logan
зачем в контейнере запускать несколько процессов? вам проще несколько контейнеров запускать
Andor
ну стейт лежит в кешах всяких и базах
Andor
так что небольшая проблема
Ivan
стейт в кеше это проблема ;)
Andor
прометеем метрики при 1 воркере неудобно снимать %)
Logan
так что небольшая проблема
нет, это не то, что бы проблема. Это вопрос. И вопрос звучит очень просто – может ли существующий воркер работать в кластере. и этот вопрос надо задавать программисту. Может там все разумно сделано под кластер. А кеша на запись в джанго по умолчанию нет (и я не представляю, кому может в джанго такая светлая мысль вообще в голову прийти)
Logan
а кеши на чтение решаются элементарными sticky sessions
Logan
ну или шаровым кешем в редисе или мемкеше
Рустам
Итак, самый оптимальный вариант это сунуть гуникорн в контейнер с апом в один воркер, а потом эти контейнеры плодить и балансить, я правильно понимаю? И есть ли какой нибудь оверхед в этом, кроме того что контейнер в размере больше становится?
Рустам
А и чем лучше балансить, нжинксом или средствами куба?
Рустам
Если я не корректно задаю вопрос подправьте, я не силен в предметной области
Andor
а "средства куба" это у тебя что?
Andor
nginx ingress?
Andor
а статику джанговскую ты как раздаёшь кстати?
Рустам
nginx ingress?
Ingress controller вроде он называется
Andor
а он у тебя где?
Andor
Ingress Controller может быть не только nginx прост
Рустам
а он у тебя где?
Отдельный контейнер
Andor
ok
Andor
и деплоится отдельным Deployment?
Рустам
и деплоится отдельным Deployment?
Нет, сейчас он вместе с апом деплоиться, апп через него и баланситься
Andor
а есть ли контроллер который умеет несколько разных Deployment создавать и контролировать чтобы там были всегда те версии которые надо и делать rollback на предыдущие версии для всех подконтрольных деплойментов?
Andor
ться
Рустам
Подозреваю что нет, я сейчас пытаюсь разобраться с инфраструктурой в новом проекте и спрашиваю бест вейс
Andor
это я не у тебя лично спрашиваю, а у чата вообще
Рустам
ну то есть по-сути мне бы хотелось чтобы при фейле деплоймента откатывался и соседний например
Вообще как мне известно делают чтобы infrastructere as a code, и тогда при изменении кода апа, связные контейнеры тоже меняются
Andor
ну так я спрашиваю как раз про то чтобы контроллер контролировал эту "связанность контейнеров"
Lucky SB
поднимите в одном поде контейнер с nginx и статикой и контейнер с джанго бекендом
Andor
да так и делаем щас
Andor
но хотелось бы статику отделить
Andor
правда не знаю зачем %)
Andor
перфекционизм %)
Lucky SB
тогда надо широко шагать
Lucky SB
статику на сдн
Andor
написать свой контроллер?
Andor
ну CDN надо будет как-то вычищать при деплоях, что может быть не так удобно
Lucky SB
да ладно.... живут же как-то люди
Andor
да я не спорю
Andor
но у нас вообще CDN нету для этого щас :)
Lucky SB
ну тогда принцип - работает, не трогай )
Andor
ну тоже верно
Dmytro
Вот к примеру есть statefelset с двумя репликами. Нафиг им headless сервис?
чтобы можно было все поды одного стейтфулсета дискаверить по днс и им общаться между собой (например, монга)
Andor
alertmanager в прометее :)
Dmytro
Ребут не помог) это тестовый кластер, могу себе позволить ребут всего)
бывало такое на версии 1.4 часто, обычно делал kubectl delete pod <pod name> --force и помогало
Stanislav
Не помогло(
Stanislav
1.10.1
Dmytro
orphaned pod может появиться когда идет rolling update деплоймента а тут старый под удалили вручную или там нода умерла и под перешедулился на другую. В итоге выходит что куб заскейлил rs от этого пода в 0 но при этом его перезапустил
Andor
но при этом сам RS ещё жив, верно?
Stanislav
Это бы я еще понял, тут же на ровном месте
Dmytro
Гуникорн внутри контейнера в один воркер и эти контейнеры плодить?
мы запускаем 2 воркера гюникорна в одном поде, поду даем реквест-лимитс 1 цпу (как в документации гюникорна советуют 2 воркера на цпу) и дальше HPA это дело скейлит. Уже 9 месяцев - полёт нормальный
Dmytro
но у нас не джанго а фласк если что и апп простой как табуретку - принять json и запихнуть в очередь
Andor
он у вас и асинхронный наверное до кучи
Dmytro
ну CDN надо будет как-то вычищать при деплоях, что может быть не так удобно
О_О это еще зачем? девелоперы не умеют версионировать статику нормально штоле?
Andor
сам-то как думаешь? :)
Dmytro
Не помогло(
ну тут хз, может завезли новых багов
Andor
но конечно лучше версионировать и не трахать мозги
Andor
один хер s3 есть
Dmytro
но при этом сам RS ещё жив, верно?
RC может быть жив с desired=0 а может и быть удален уже если кто-то вручную удаляет что-то варварски. Но под уже к RC не привязан даже если он жив (по крайней мере в 1.4 и 1.5 так)
Dmytro
он у вас и асинхронный наверное до кучи
хз, внутрь особо не заглядывал
Andor
у тебя кстати HPA по стандартным метрикам работает?
Andor
или кастом подключал?
Dmytro
сам-то как думаешь? :)
так дело нехитрое же, у меня вот в одном проекте есть версионирование для убогих - просто рандомный хеш генерируется при деплое и потом все ссылки на статику выглядят /static/<hash 32 chars>/<css|js|img|...>/...
Andor
да у нас можно просто циферки по версии релиза
Dmytro
и потом тупо реврайтом нжинкса вырезается хеш из угла и на папку /static/<css|js|img|...>/... мапится
Andor
или даже хардкодить заставлять
Dmytro
ну вот пинками их завставь один раз поменять урлы
Andor
да допинаю когда-нибудь
Andor
но потом %)
Dmytro
и дальше можно и в сдн, и ингрессом все что /static отправить в отдельный под и т.д. и т.п.
Andor
по-хорошему статику вообще в отдельный домен без кук выносить
Dmytro
тогда уж в несколько поддоменов чтобы сделать domain sharding и грузилось шустрее
Dmytro
но это уже оффтоп пошёл совсем
Etki
Коллеги, немного нубский вопрос, но стесняться некого. Headless сервис для чего вообще юзается? Можете кратко пояснить?
иногда клиент лучше знает, как ему балансировать, иногда надо слать сразу всем, кто доступен, иногда нужно получить инфу о текущих участниках кластера наиболее простым способом