티스토리 뷰
What is StatefulSet?
💡“상태”가 있는 애플리케이션을 관리하기 위해 사용되는 리소스
- 각 Pod는 고유한 네트워크 ID와 스토리지 볼륨을 가지며, 삭제 후에도 이를 보존
What is Deployment?
💡“상태”가 없는 애플리케이션을 관리하기 위해 사용되는 리소스
- Pod는 서로 동일하며, 상태 정보는 Pod 간에 공유되지 않는다
StatefulSet vs Deployment?
특성 StatefulSet Deployment
목적 | 상태가 있는 애플리케이션 관리 | 상태가 없는 애플리케이션 관리 |
Pod 이름 | 고유하며 순서 보장 | 랜덤 생성 |
스토리지 | 고유한 영구 스토리지 보존(예. pvc) | 영구 스토리지 없음 |
업데이트 방식 | 롤링 업데이트 | 병렬 업데이트 가능 |
네트워크 | 고유한 이름 제공 | 로드밸런서를 통한 접근 |
주요 사용 사례 | 데이터베이스, 분산 시스템 | 웹 서버, api 서버 |
StatefulSet이 필요한 상황?
- 분산 시스템 (Kafka, Zookeeper)
- Apache Kafka
- 분산 메시지 시스템으로, 데이터의 일관성과 순서를 보장하기 위해 상태 정보가 중요
- 파티션 및 리더-팔로워 관계
- 토픽은 여러 파티션으로 나뉘고, 각 파티션엔 리더 - 팔로워 (1:N) 존재
- 리더-팔로워 간 상태 정보가 없다면 어떤 브로커가 리더인지, 어느 파티션에 데이터가 저장되는지 알 수 없다
- 오프셋 관리
- Kafka는 각 소비자 그룹의 읽기 위치를 오프셋으로 관리한다.
- 이 상태 정보가 없다면 소비자가 어디서부터 데이터를 읽어야 하는지 알 수 없어 메시지 손실이나 중복 처리 문제가 발생할 수 있다.
- 분산 환경
- Kafka는 여러 브로커가 협력하여 동작하는 분산 시스템이므로, 각 브로커의 상태 정보가 중요
- 예를 들어, 리더 레플리카가 다운되었을 때 리더를 재 선출하려면 기존 상태 정보가 필요하다.
- Kafka 구조
- ZooKeeper
- 다양한 분산 시스템의 중앙 코디네이터 역할 수행
- 카프카에선 분산된 브로커들을 관리하는 용도로 사용
- 브로커 목록이나 설정 정보 관리
- 변경사항(토픽 생성 및 제거, 브로커 생성 및 제거)이 발생하면 모든 브로커에 내용을 전달
- Zookeeper는 노드마다 고유한 신분(ID)과 데이터(상태)가 필요하다 ⇒ 이해가 필요
- Apache Kafka
- 데이터베이스(MySQL, PostgreSQL…)
- 영구 스토리지 관리
- StatefulSet 은 Pod가 삭제되더라도 PVC는 유지
- 데이터가 삭제되지 않으므로 손실 방지 가능
- 고유 id와 네트워크
- 데이터베이스 클러스터는 각 노드가 고유한 ID를 가져야 한다
- StatefulSet은 고유 Pod 이름과 dns 주소를 가지기에 클러스터 노드 간 통신과 동기화가 용이
- 순차적 생성 및 종료
- 분산 데이터베이스는 노드가 순차적으로 초기화되거나 종료되어야 할 때가 많다
- 영구 스토리지 관리
StatefulSet의 기능
- 고유 Pod 이름 Ordinal index로 생성(ex. pod-0, pod-1 …)
- Pod 순차 생성
- Pod 재 생성 시 이름 유지
- Pod 삭제 시 인덱스 높은 순 부터 삭제 (2→1→0)
- volumeClaimTemplates 통한 볼륨 동적 생성
- 영구 스토리지 제공
HeadLess Service가 어떻게 StatefulSet에 사용될까?
- HeadLess:
- 클러스터 IP를 제공x
- 각 Pod에 고유한 DNS 이름 부여하여 직접 참조 가능하게 함(이름 → 도메인으로 확장)
<**Pod 이름**>.<서비스 이름>.<네임스페이스>.svc.cluster.local
- StatefulSet의 Pod들을 도메인 이름을 통해 통신할 수 있음
- StatefulSet에서 사용되는 Pod는 각각 고유한 상태와 데이터를 가지며, 다른 Pod와 독립적으로 동작해야한다
- 사용예시
- 카프카
- 각 브로커를 Pod로 생성 (kafka-0, kafka-1…)
- 각 브로커에대해 헤드리스 서비스를 사용하여 dns 생성
- (kafka-0.kafka-service.default.svc.cluster.local)
- 클라이언트는 특정 브로커(Pod)에 DNS 주소로 직접 연결.
- 카프카
volumeClaimTemplates
- StatefulSet에서 사용하는 템플릿으로, 각 Pod에 고유한 영구 스토리지(PersistentVolume)를 제공하기 위해 사용
- 각 Pod는 이 템플릿을 기반으로 고유한 PVC를 생성하고, 해당 PVC에 연결된 PersistentVolume(PV)를 사용
'k8s' 카테고리의 다른 글
쿠버네티스(K8S) 개념 정리 (k8s 오브젝트) (0) | 2025.01.10 |
---|
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 구간합구하기
- k8s
- EB
- 백준 1965 풀이
- Java #코린이 #자바
- 백준 그림 자바
- 코딩테스트
- 마법사 상어와 비바라기 자바
- 행렬 테두리 회전하기 자바
- 쿠버네티스 개념
- EC2
- ECR
- 백준 상자 넣기 자바
- java
- Java #객체 #자바기초 #자바
- 무중단배포
- 단지번호붙이기 JAVA
- dfs
- 쿠버네티스 오브젝트
- 자료구조
- docker
- 단지번호붙이기 자바
- 백준
- AWS
- 프로그래머스
- StatefulSet
- java #스프링 #spring #server
- k8s object
- 자바
- 백준 상자넣기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함