Короткий ответ
ReplicaSet — это контроллер, который поддерживает заданное число одинаковых Pod по селектору меток; Deployment не управляет Pod напрямую, а создаёт и переключает ReplicaSet при каждом обновлении шаблона.
Как это работает подробнее
при изменении template в Deployment создаётся новый ReplicaSet с новым хэшем версии шаблона, после чего Deployment постепенно переносит реплики со старого ReplicaSet на новый согласно стратегии обновления, оставляя старый ReplicaSet с нулём реплик для возможного отката.
Пример кода
Команды и вывод
kubectl get rs -l app=web
NAME DESIRED CURRENT READY AGE
web-5d7c9f9b7 0 0 0 2h
web-6b8d7a6c5 3 3 3 5mЧто использовать на практике
- Практика.
kubectl rollout history deployment/<name>и список ReplicaSet (kubectl get rs) позволяют увидеть историю версий; откат (kubectl rollout undo) фактически масштабирует предыдущий ReplicaSet обратно вверх, а текущий — вниз.
Подводные камни
- Риски. создавать ReplicaSet напрямую вместо Deployment, теряя удобное управление rolling update и историю ревизий; удивляться накоплению старых ReplicaSet с нулевыми репликами — это ожидаемо и регулируется параметром
revisionHistoryLimit; путать селектор ReplicaSet с метками самого Deployment.