В Kubernetes одна из базовых забот — чтобы приложения не падали при первом же сбое, а работали стабильно и предсказуемо. Для этого там есть отдельный контроллер ReplicaSet. Он следит за тем, чтобы нужное количество однотипных подов всё время было живым в кластере.
Если по-простому: вы сказали системе «мне нужно 3 экземпляра этого приложения». ReplicaSet дальше сам проверяет, что их действительно три. Как только один под умер — из-за ошибки, перезапуска узла, обновления или просто потому, что жизнь боль — контроллер поднимает новый. Без ручного вмешательства, без SSH на ноду и без паники в проде. Это такой базовый автоматический “самовосстановитель”, который даёт минимальную отказоустойчивость даже в довольно хаотичной среде.
При этом важно не путать роли. ReplicaSet не умеет «делать релизы», менять версии и продумывать стратегии обновления. Этим занимается Deployment. Он создаёт и использует ReplicaSet’ы как внутренний механизм: под каждую версию приложения поднимает свой ReplicaSet, постепенно переключает трафик, соблюдает стратегию (rolling update, recreate и т.п.). Снаружи вы работаете с Deployment, а ReplicaSet просто честно выполняет чёрную работу по поддержанию нужного количества подов.
ReplicaSet особенно полезен, когда:
- нужно, чтобы приложение всегда крутилось в нескольких копиях — типичный кейс для web-сервисов или API;
- архитектура должна переживать падение отдельных подов без видимой боли для пользователей;
- используется автоскейлинг, и число реплик прыгает в зависимости от нагрузки.
В повседневной жизни с Kubernetes большинство людей вообще не трогают ReplicaSet напрямую, а живут в парадигме Deployment’ов. Но если понимать, что именно делает ReplicaSet и как он себя ведёт, гораздо проще разбираться, откуда берётся отказоустойчивость, как именно кластер масштабирует приложение и почему после апдейта вдруг появилось несколько разных ReplicaSet’ов.
Если совсем образно, ReplicaSet — это сторожевой пёс, который считает ваши поды и не даёт им «рассосаться» ниже нужного уровня. На этом, по сути, строится базовая стабильность приложений в Kubernetes и то, что обычно подразумевают под здоровой DevOps-инфраструктурой в облаке.
