상태 저장 앱을 위한 StatefulSets
StatefulSets를 사용하여 데이터베이스 같은 상태 저장 애플리케이션을 배포하고 관리하며, 안정적인 네트워크 식별자와 영구 저장 공간을 보장하세요.
상태 저장 앱을 위한 StatefulSets은(는) CoddyKit의 무료 DevOps Bootcamp 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DevOps Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
상태 저장 애플리케이션을 위한 StatefulSets
환영합니다! 이 수업에서는 상태 저장 애플리케이션을 관리하도록 설계된 Kubernetes 객체인 StatefulSets를 자세히 살펴봅니다.
쉽게 확장하고 교체할 수 있는 비상태 저장 앱과 달리, 상태 저장 앱은 각 인스턴스에 고유한 식별자와 영구 저장소가 필요합니다. 데이터베이스, 메시지 큐 또는 데이터를 로컬에 저장하는 사용자 지정 애플리케이션을 예로 들 수 있습니다.
왜 StatefulSets인가? 문제점
기존 디플로이먼트는 비상태 저장 애플리케이션에 적합합니다. 파드가 종료되면 새 파드가 이를 대체하며, 어떤 파드가 요청을 처리하는지는 중요하지 않습니다.
하지만 상태 저장 앱에서는 각 복제본에 안정적이고 고유한 식별자와 전용 저장소가 필요한 경우가 많습니다. 데이터베이스 파드가 다시 시작되면 특정 데이터 볼륨에 다시 연결해야 합니다.
안정적인 네트워크 및 파드 식별자
StatefulSets의 핵심 기능은 각 파드에 안정적이고 고유한 네트워크 식별자를 제공하는 것입니다.
- 파드 이름은 예측 가능하고 순서가 있는 방식으로 지정됩니다(예:
web-0,web-1). - 재시작 후에도 호스트 이름이 유지됩니다.
- 따라서 다른 서비스가 특정 복제본에 안정적으로 연결할 수 있습니다.
안정적이고 영구적인 저장소
StatefulSets는 각 파드에 자체적인 안정적이고 영구적인 저장소가 제공되도록 합니다. 이는 영구 볼륨 클레임(PVC)을 사용하여 처리합니다.
StatefulSet 파드가 생성되면 volumeClaimTemplates 정의를 기반으로 PVC가 자동으로 프로비저닝됩니다. 파드가 종료되었다가 다시 생성되면 동일한 PVC에 다시 연결되므로 원래 데이터를 그대로 사용할 수 있습니다.
StatefulSet YAML 구조
StatefulSet YAML 정의는 디플로이먼트와 비슷하지만 몇 가지 중요한 항목이 추가됩니다. 다음이 포함됩니다.
apiVersion,kind,metadataspec.replicas,spec.selector,spec.template(디플로이먼트와 동일)spec.serviceName: 헤드리스 서비스에 연결합니다.spec.volumeClaimTemplates: 각 파드에 대한 PVC 생성 방식을 정의합니다.
안정적인 ID를 위한 헤드리스 서비스
StatefulSets가 안정적인 네트워크 식별자를 제공하려면 헤드리스 서비스가 필요합니다. 헤드리스 서비스에는 클러스터 IP가 없습니다. 대신 선택한 파드의 IP 주소를 직접 반환합니다.
StatefulSet은 이 서비스를 사용하여 각 파드에 대한 DNS 항목을 등록합니다(예: pod-0.my-service.my-namespace.svc.cluster.local).
apiVersion: v1
kind: Service
metadata:
name: my-app-headless
spec:
ports:
- port: 80
name: web
clusterIP: None # This makes it a headless service
selector:
app: my-appVolumeClaimTemplates
volumeClaimTemplates 섹션은 StatefulSets에만 있는 항목입니다. 이는 각 복제본에 대해 생성될 영구 볼륨 클레임(PVC)의 템플릿입니다.
StatefulSet의 각 파드(예: my-app-0, my-app-1)는 이 템플릿을 기반으로 자체 PVC(예: data-my-app-0, data-my-app-1)를 할당받으므로 전용 저장소를 사용할 수 있습니다.
volumeClaimTemplates:
- metadata:
name: data # This name is used in Pod's volumeMounts
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1GiStatefulSet 전체 예시
다음은 간단한 Nginx StatefulSet의 전체 예시입니다. 헤드리스 서비스에 연결하는 serviceName과 volumeClaimTemplates를 확인해 보세요.
이를 배포하려면 nginx-statefulset.yaml로 저장한 후 kubectl apply -f nginx-statefulset.yaml을 실행합니다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx-headless" # Must match headless service name
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www # Mounts the volume from the PVC
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www # This name links to volumeMounts.name
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: nginx-headless
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx파드 이름 지정 및 순서
배포가 완료되면 web-0, web-1과 같은 이름의 파드를 볼 수 있습니다. 이러한 인덱스는 안정적이고 고유합니다.
StatefulSets는 확장 작업에 엄격한 순서를 적용합니다. 파드는 순서대로(0, 1, 2...) 생성되고 역순(..., 2, 1, 0)으로 종료됩니다.
이러한 순서 기반 방식은 많은 분산 상태 저장 시스템에서 일관성을 유지하는 데 매우 중요합니다.
확장 및 롤링 업데이트
kubectl scale statefulset web --replicas=3을 사용하여 디플로이먼트와 같은 방식으로 StatefulSet을 확장할 수 있습니다.
롤링 업데이트도 작동하지만 동일한 순서 보장이 적용됩니다. 파드는 역순 서수로 하나씩 업데이트되며, 이전 파드가 준비될 때까지 다음 파드가 업데이트되지 않습니다.
이러한 신중한 조정은 상태 저장 애플리케이션의 중단을 최소화합니다.
이해도 확인
Kubernetes StatefulSets의 핵심 특성 또는 요구 사항은 무엇입니까?
복습: StatefulSets 실제 활용
잘하셨습니다! 이 수업에서는 상태 저장 애플리케이션을 관리하는 강력한 Kubernetes 객체인 StatefulSets를 살펴보았습니다.
- 안정적인 네트워크 식별자와 순서가 있는 작업을 제공합니다.
volumeClaimTemplates를 사용하여 복제본마다 전용 영구 저장소를 제공합니다.- 안정적인 네트워크 ID를 위해 헤드리스 서비스가 필수적입니다.
StatefulSets는 Kubernetes에서 데이터베이스 및 기타 중요한 상태 저장 워크로드를 안정적으로 실행하는 데 기본이 되는 기능입니다.
자주 묻는 질문
“상태 저장 앱을 위한 StatefulSets” 강의는 무료인가요?
네 — “상태 저장 앱을 위한 StatefulSets” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DevOps Bootcamp 강의 전체를 잠금 해제할 수 있습니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
“상태 저장 앱을 위한 StatefulSets”에서 뭘 배우나요?
StatefulSets를 사용하여 데이터베이스 같은 상태 저장 애플리케이션을 배포하고 관리하며, 안정적인 네트워크 식별자와 영구 저장 공간을 보장하세요. 브라우저에서 직접 실행하는 실습 코드로 DevOps Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
DevOps Bootcamp을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 DevOps Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“상태 저장 앱을 위한 StatefulSets” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 DevOps Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 DevOps Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 상태 저장 앱을 위한 StatefulSets
- 노드별 작업을 위한 DaemonSets
- Kubernetes 오퍼레이터 이해하기
- 사용자 지정 리소스 정의(CRD)