Приходят ко мне недавно
"мы тут придумали на коленке в метро и за два дня внедрили AI!AI!AI!AI!AI!-voice сервис, всё уже продали клиентам, уже даже заработали с него, а ты нет(лох), и поняли, что твой кубервсратос всё ломает при деплое/редеплое и связь рвётся, это всё твой кубер виноват, чини скорее, ЕТА на завтра, а то мы клиентов теряем".
Грубо говоря ситуация такая:
2 Пода в кубере.
Они/через них организуют 1 голосовой звонок.
2 пода - просто реплика. Можно сделать и 1, не принципиально.
Звонок идёт - всё ок.
Разработчики запилили релиз.
Во время релиза в кубер у нас rolling update strategy.
Когда новый под поднялся, старый завершился.
И звонок прервался.
Звонок не должен прерываться.
Это и есть проблема.
У меня очень плохо с многими областями в айти.
Чуток почитал про фреймворки, воип, сип и многое другое с голосом
Ну как почитал - спросил нейронку "все про войс за 7 абзацев". 😁
Да не, вру, я многое про войс и так знал.
Ладно, спрашиваю у чатике кубера, набрасывая этой дичью.
Вдруг есть готовое решение, паттерн или фреймворк.
Ответы разные, от смешных до очень смешных.
В общем и целом мне посоветовали глянуть в стек, а что в кишках.
Кишки привели меня к
- https://docs.livekit.io/
- https://github.com/livekit/python-sdks
Дальнейший совместный поиск привел к такому ОФИЦИАЛЬНОМУ решению
https://docs.livekit.io/home/self-hosting/kubernetes/#graceful-restarts
During an upgrade deployment, older pods will need to be terminated. This could be extremely disruptive if there are active sessions running on those pods. LiveKit handles this by allowing that instance to drain prior to shutting down.
И самое сладкое ❤️
We also set terminationGracePeriodSeconds to 5 hours in the helm chart, ensuring Kubernetes gives sufficient time for the pod to gracefully shut down.
Ставим таску на on-hold, отписываем это как временное решение и трекаем время за траблшутинг.
Какие времена, такой софт и такие решения... 😀
