них сейчас есть пользователи, с tcp сессиями и их нельзя прерывать (звук, видео), мы решили выкатить новый ресурс. Как сделать так, чтобы занятые поды старого релиза ждали освобождения, перед тем как терминейтнуться?
грейсфулшатдаун
со стороны приложения должна быть описана логика на sigterm и termintation grace период увеличить на то сколько маскимум живет сессия
что значит "ждали освобождения"? куб не мог бы их убить пока поды сами не завершаться?
Да, пока в поде есть пользовательские сессии, то его убивать нельзя
А если продолжительность не детерминирована? Ну вот там идёт видеоконференция, она может и 5 минут и три часа
куб не знает ничего про "пользовательские сессии внутри пода".
Клиент сделай нормальный
Без этого - никак
Не использовать для этого куб!)
Писать приложение так, чтобы оно поддерживало gracefull shutdown. Из сервиса его может выкинуть ReadinessProbe А сделать что-то перед завершением - это LIfecycle Prestop Т.е. надо сделать, чтобы само приложение поддерживало какую-то команду а-ля "получил SIGUSR1, перестань отвечать на проверку, текущие сессии не закрывай. Как закроются сами, сделай себе сепукку с exit-code 0", затем срабатывает ReadinessProbe, выкидывает из сервиса. А SIGUSR1 или какой-то другой посылать через prestop хук
У него пока идет активная сессия - не нужно обновлять под. В целом, черкз терраформ и можно такое сделать, обровляя вмку)
Управление балансировщиком на ансибле ))))
Норм вещь. Тот же хапкроси пл нормальному не автоматизируешь (их апи просто ужас)
а как сейчас происходит? в аппке есть хук на sigterm? или спустя какое-то время по sigkill кубер убивает?
Да, сначала терм, потом таймер, потом килл, если само не завершилось
Обсуждают сегодня