Related to: MLOps

왜 StatefulSet은 롤백이 불가능할까

StatefulSet이 롤백이 불가능하다고 여겨지는 주요 이유는, Deployment와 달리 내부적으로 ReplicaSet을 생성하지 않고 각 파드의 고유성(이름, 네트워크, 스토리지 등)을 보장하기 때문입니다. Deployment는 새로운 버전의 ReplicaSet을 생성해 롤링 업데이트를 진행하고, 문제가 생기면 이전 ReplicaSet으로 손쉽게 롤백할 수 있습니다. 반면 StatefulSet은 파드별로 고유한 식별자와 영구 스토리지를 유지해야 하므로, ReplicaSet 기반의 롤백 구조가 적용되지 않습니다.

이로 인해 StatefulSet은 롤링 업데이트 시 파드를 순차적으로 하나씩 교체하고, 각 파드의 데이터와 네트워크 정합성을 반드시 보장해야 합니다. 잘못된 롤백이나 업데이트 전략은 데이터 손실, 불일치, 서비스 중단 등 심각한 문제를 유발할 수 있기 때문에, Deployment처럼 자동화된 롤백이 구조적으로 어렵습니다.

다만, 최근 쿠버네티스에서는 kubectl rollout undo statefulset 명령을 통해 제한적으로 롤백이 지원되기도 하지만, 이 과정 역시 Deployment만큼 간단하거나 안전하지 않으며, 데이터 정합성과 서비스 가용성을 직접 관리해야 합니다.

정리하면, StatefulSet은 파드의 고유성과 상태, 데이터 정합성 보장이 필수적이기 때문에, Deployment처럼 자유롭고 자동화된 롤백 구조를 기본적으로 제공하지 않으며, 이는 StatefulSet의 설계 철학과 목적에 기인합니다.