ℹ️ Докер и Кубер!
Увидел классное объяснение в комментах в одном из чатов про докер и кубернетес..
Ты понимаешь, зачем нужны и как работают виртуальные машины? VirtualBox например, и другие программы, которые позволяют внутри твоей обычной операционной системы установить полностью изолированную отдельную операционную систему, причем, любую, хоть еще одну винду, хоть линукс, хоть и, с большими ограничениями некоторые версии МакОС.
Вот докер - это сильно улучшенная виртуалка. Лучше тем, что меньше ресурсов жрет. Она тоже изолированная от основной ОС.
Кубернетес - это штука, которая позволяет удобно и автоматически управлять этими "виртуалками" внутри докера.
Представь, что программисту нужно для работы запустить Базу данных postgress + кеширующий Redis сервер + очередь сообщений RabbitMQ. И желательно, чтобы у всех разработчиков были установленны одинаковые версии этих инструментов и на сервере тоже были бы установленны точно такие же версии этих инструментов. Потому что, внезапно, если на сервере postgress 14, а кто-то из разработчиков устновит локально версию 17, то может оказаться, что у него локально что-то работает, а на сервере - не работает.
Так вот, чтобы добиться такого однообразия обычно в проекте у программистов есть docker-compose файл. Это файл позволяет запустить однократно сколько угодно этих docker "виртуалок" с одинаковыми настройками на каждом из компьютеров разработчиков локально.
На этом шаге мы добились того, что у всех программистов локально используется одни и те же версии инструментов. Но нам же нужно то, что программисты наделали как-то проверять? Для этого и создаются "стенды для демонстрации и тестов".
Тут нам и нужен кубернетес. Отличие его от docker-compose в том, что компоуз однократно запускает, то что описано в файле, а дальше ему насрать, что происходит с теми "докер виртуалками". А кубернетес он еще и проверяет, что эта "докер виртуалка" нормально работает и отвечает на запросы. И если вдруг одна из запущенных виртуалок перестанет подавать признаки жизни (перестанет, например, отвечать на ping больше 30 секунд), то кубернетес автоматически удалит такую зависшую виртуалку и запустит вместо неё новую.
Мы, сильно упрощая, на сервере тоже скармливаем такой же docker-compose файл, но kubernetes-у. И он запускает все необходимые виртуалки, следит, чтобы они были запущены и в случае любых проблем перезапускает их.
Остался последний шаг. Мы хотим перед тем как применять изменения программистов на реальном сайте, где живые пользователи что-то у нас покупают протестировать, что программисты не сломают нам наш процесс создания заказов. Что мы делаем для этого?
мы в кубернетесе запускаем минимум 2 копии всех сервисов но на разных доменах. На prod домене там то, что прямо сейчас используется на основном сайте. на dev домене мы запускаем ту версию нашего приложения, которую программист сделал по задаче, но которую еще не успели проверить тестировщики. Если на dev версии мы нашим новым обновлением что-то сломали, то это никак не скажется на основных пользователях и они по прежнему смогут покупать наши товары на основном сайте. а ошибку на деве тестировщик найдет и вернет задачу обратно в работу программисту, чтобы тот поправил сломанные вещи.
Максимально упрощенно это работает вот так :)