7.4 스테이트풀셋 (StatefulSet): 상태 유지 애플리케이션 관리
지금까지 우리는 레플리카셋과 디플로이먼트를 통해 주로 상태가 없는(stateless) 애플리케이션을 배포하고 관리하는 방법을 살펴보았습니다. 상태가 없는 애플리케이션은 각 파드가 서로 동일하게 취급될 수 있으며, 어느 파드가 요청을 처리하든 결과가 같고, 파드가 예기치 않게 종료되거나 교체되어도 서비스의 연속성에 큰 영향을 주지 않습니다. 웹 서버나 간단한 API 서버들이 대표적인 예시입니다. 이러한 애플리케이션들은 필요에 따라 파드의 수를 자유롭게 늘리거나 줄일 수 있고, 파드들은 언제든지 대체될 수 있는 ‘가축(cattle)’과 같이 취급됩니다.
하지만 세상의 모든 애플리케이션이 이렇게 단순하게 상태를 무시할 수 있는 것은 아닙니다. 데이터베이스(MySQL, PostgreSQL, MongoDB 등), 메시지 큐(Kafka, RabbitMQ 등), 분산 코디네이션 시스템(ZooKeeper, etcd 등)과 같이 상태를 유지해야 하는(stateful) 애플리케이션들이 많이 있습니다. 이러한 애플리케이션들은 각 인스턴스(파드)가 고유한 식별자, 안정적인 네트워크 주소, 그리고 자신만의 영구적인 저장 공간을 필요로 합니다. 파드가 재시작되더라도 이전에 가지고 있던 데이터를 그대로 유지해야 하며, 파드 간의 순서나 관계가 중요할 수도 있습니다. 이러한 파드들은 마치 이름과 개성이 뚜렷한 ‘애완동물(pets)’처럼, 함부로 대체되거나 순서가 뒤바뀌어서는 안 됩니다.
디플로이먼트와 레플리카셋은 이러한 상태 유지 애플리케이션의 복잡한 요구사항을 충족시키기에는 다소 부족함이 있습니다. 파드의 이름이 랜덤하게 부여되고, 재시작 시 IP 주소가 변경될 수 있으며, 모든 파드가 동일한 볼륨을 공유하거나 임시 볼륨을 사용하기 때문입니다.
바로 이러한 상태 유지 애플리케이션을 쿠버네티스 환경에서 효과적으로 관리하기 위해 등장한 것이 스테이트풀셋(StatefulSet)입니다. 스테이트풀셋은 각 파드에게 고유하고 안정적인 네트워크 식별자와 영구 스토리지를 제공하며, 순서가 있는 배포 및 스케일링, 그리고 순서가 있는 자동 롤링 업데이트 및 롤백 기능을 지원합니다. 이를 통해 상태를 민감하게 다뤄야 하는 애플리케이션도 쿠버네티스의 강력한 자동화 및 관리 기능을 활용할 수 있게 됩니다.
이번 7.4장에서는 바로 이 스테이트풀셋에 대해 깊이 있게 탐구해볼 예정입니다.
- 먼저 7.4.1 상태 유지 애플리케이션의 특징에서는 어떤 애플리케이션들이 상태를 유지한다고 볼 수 있는지, 그리고 이들이 일반적인 상태 없는 애플리케이션과 비교하여 어떤 독특한 요구사항들(예: 안정적인 네트워크 ID, 영구 스토리지, 순서 보장 등)을 가지는지 구체적으로 살펴보겠습니다. 이를 통해 왜 기존의 디플로이먼트만으로는 부족한지 명확히 이해하게 될 것입니다.
- 이어서 7.4.2 스테이트풀셋의 특징과 기능에서는 스테이트풀셋이 이러한 상태 유지 애플리케이션의 요구사항을 어떻게 충족시키는지 그 핵심 기능들을 상세히 알아볼 것입니다. 각 파드에 부여되는 예측 가능한 이름과 안정적인 DNS 엔트리, 파드별 전용 퍼시스턴트 볼륨 클레임(PVC) 템플릿, 그리고 파드의 생성, 삭제, 업데이트 시 순서를 보장하는 메커니즘 등을 배우게 됩니다. 또한, 헤드리스 서비스(Headless Service)와의 연관성도 중요한 개념으로 다뤄질 것입니다.
- 마지막으로 7.4.3 [실습] 스테이트풀셋을 이용한 간단한 상태 유지 앱 배포에서는 직접 스테이트풀셋 YAML 파일을 작성하여 간단한 상태 유지 애플리케이션(예: 각 파드가 고유한 데이터를 저장하고 식별되는 웹 애플리케이션)을 배포해 볼 것입니다. 이 실습을 통해 스테이트풀셋에 의해 생성된 파드들이 어떻게 안정적인 이름과 스토리지를 갖게 되는지, 그리고 스케일링이나 업데이트 시 어떤 순서로 동작하는지를 눈으로 직접 확인하며 스테이트풀셋의 개념을 확실히 다질 수 있을 것입니다.
스테이트풀셋은 쿠버네티스에서 다소 고급 컨트롤러에 속하지만, 클라우드 네이티브 환경에서 복잡한 애플리케이션을 운영하기 위해서는 반드시 이해하고 넘어가야 할 중요한 구성 요소입니다. 이 장을 통해 상태 유지 애플리케이션 관리의 어려움을 극복하고, 쿠버네티스의 활용 범위를 한층 더 넓히실 수 있기를 바랍니다. 자, 그럼 상태가 중요한 애플리케이션들을 위한 특별한 관리자, 스테이트풀셋의 세계로 함께 들어가 보겠습니다!