본문으로 건너뛰기

4.3. StatefulSets (상태저장 세트)

개요

StatefulSets 페이지는 MCM 컨트롤 플레인에서 관리하는 모든 StatefulSet을 통합적으로 관리하는 페이지입니다. StatefulSet은 상태 저장이 필요한 애플리케이션을 위한 워크로드로, 고정된 네트워크 ID와 영구 스토리지를 제공합니다.

주요 목적:

  • 멀티클러스터 StatefulSet 통합 관리
  • 상태 저장 애플리케이션 배포 및 스케일링
  • 파드 순서 및 고유성 보장
  • PropagationPolicy 및 OverridePolicy 확인

StatefulSet 사용 사례:

  • 데이터베이스 (예: MySQL, PostgreSQL, MongoDB)
  • 메시지 큐 (예: Kafka, RabbitMQ)
  • 분산 스토리지 (예: Cassandra, Elasticsearch)
  • 상태 저장이 필요한 애플리케이션

화면 구성

StatefulSets 페이지는 테이블 형태로 StatefulSet 목록을 표시합니다.

StatefulSets 메인 화면

페이지 상단 요소

요소설명
네임스페이스 필터특정 네임스페이스의 StatefulSet만 표시
새로고침 버튼StatefulSet 목록 갱신
생성 버튼새 StatefulSet 생성 다이얼로그 열기
검색창StatefulSet 이름으로 검색

테이블 컬럼

컬럼설명정렬
이름StatefulSet 이름
네임스페이스StatefulSet이 속한 네임스페이스
상태Ready 파드 수 / 원하는 파드 수
이미지컨테이너 이미지 이름
경과시간StatefulSet 생성 후 경과 시간
작업편집/삭제 버튼-

상태 표시

상태 컬럼은 Ready 수 / 원하는 수 형식으로 표시됩니다:

  • 2/2: 2개 레플리카 모두 Ready 상태
  • 1/2: 2개 레플리카 중 1개만 Ready 상태

StatefulSet 상세 정보

StatefulSet 행을 클릭하면 상세 정보 패널이 열립니다.

StatefulSet 상세 정보

상세 패널 헤더

요소설명
StatefulSet 이름선택한 StatefulSet 이름
네임스페이스StatefulSet이 속한 네임스페이스
동기화 상태N/N 파드 준비 현황

액션 버튼

버튼기능
스케일 다운레플리카 수 감소
스케일 업레플리카 수 증가
재시작StatefulSet 롤링 재시작
새로고침StatefulSet 정보 갱신
편집YAML 편집 모드
삭제StatefulSet 삭제

탭 메뉴

개요 탭

StatefulSet의 기본 정보, 복제 세트 상태, StatefulSet 고유 설정을 표시합니다.

기본 정보:

항목설명
이름StatefulSet 이름
네임스페이스StatefulSet이 속한 네임스페이스
상태N/N 준비됨
경과시간생성 후 경과 시간
생성일StatefulSet 생성 일시

복제 세트 상태:

항목설명
파드 준비 상태N / N 파드 준비됨 (프로그레스 바 포함)
원하는 복제본설정된 레플리카 수
준비된 복제본Ready 상태의 레플리카 수
현재 복제본현재 실행 중인 레플리카 수
업데이트된 복제본최신 버전으로 업데이트된 레플리카 수

파드 상태:

파드 상태 섹션에서는 StatefulSet의 파드 현황을 시각적으로 표시합니다:

  • 실행 중 (Running): 정상 동작 중인 파드
  • 대기 중 (Pending): 스케줄링 대기 중인 파드
  • 실패 (Failed): 실패한 파드

상태저장 세트 정보:

StatefulSet 고유의 설정을 표시합니다:

항목설명
서비스 이름헤드리스 서비스 이름 (안정적인 네트워크 ID 제공)
파드 관리 정책OrderedReady 또는 Parallel
업데이트 전략RollingUpdate 또는 OnDelete

컨테이너 이미지:

StatefulSet에 정의된 컨테이너 이미지 목록을 표시합니다.

멀티클러스터 정책 탭

StatefulSet에 적용된 멀티 클러스터 정책 정보를 표시합니다.

멀티클러스터 정책 탭

전파 정책 (PropagationPolicy):

컬럼설명
이름PropagationPolicy 이름
네임스페이스정책이 속한 네임스페이스
범위네임스페이스 범위 정책 / 클러스터 범위 정책
대상 클러스터타겟 클러스터 목록

오버라이드 정책 (OverridePolicy):

클러스터별 커스텀 설정이 있는 경우 표시됩니다.

레이블 탭

StatefulSet에 적용된 Kubernetes 레이블 목록을 표시합니다.

어노테이션 탭

StatefulSet에 적용된 어노테이션 목록을 표시합니다.

파드 탭

해당 StatefulSet에서 실행 중인 파드 목록을 표시합니다.

파드 탭
컬럼설명
이름파드 이름 (예: my-statefulset-0, my-statefulset-1)
클러스터파드가 실행 중인 클러스터
상태파드 상태 (실행 중/대기 중/실패 등)
노드파드가 스케줄된 노드
재시작 횟수파드 재시작 횟수
경과시간파드 생성 후 경과 시간
작업보기/삭제 버튼

참고: StatefulSet 파드는 순차적인 이름을 가집니다 (예: my-statefulset-0, my-statefulset-1). 각 클러스터에서 동일한 이름의 파드가 생성됩니다.

이벤트 탭

StatefulSet 관련 Kubernetes 이벤트를 표시합니다.

StatefulSet 생성

새로운 StatefulSet을 MCM 컨트롤 플레인에 생성합니다.

입력 항목

항목필수설명
이름StatefulSet 이름
네임스페이스배포할 네임스페이스
서비스 이름헤드리스 서비스 이름
레플리카 수초기 레플리카 수 (기본값: 1)
컨테이너 이미지컨테이너 이미지 URL
볼륨 클레임 템플릿-PersistentVolumeClaim 템플릿
포트-컨테이너 포트 설정
환경 변수-컨테이너 환경 변수

YAML 편집

"YAML 편집" 탭에서 StatefulSet 정의를 직접 작성할 수 있습니다.

StatefulSet 작업

스케일 업/다운

StatefulSet의 레플리카 수를 조정합니다.

  1. StatefulSet 선택
  2. 스케일 업(▲) 또는 스케일 다운(▼) 버튼 클릭
  3. 레플리카 수가 증가/감소

참고: StatefulSet 스케일링은 순서대로 진행됩니다:

  • 스케일 업: 0, 1, 2... 순서로 파드 생성
  • 스케일 다운: ...2, 1, 0 역순으로 파드 삭제

롤링 재시작

StatefulSet의 모든 파드를 순차적으로 재시작합니다.

  1. StatefulSet 선택
  2. 상세 패널에서 "재시작" 버튼 클릭
  3. 확인 다이얼로그에서 "재시작" 버튼 클릭

재시작은 역순으로 진행됩니다 (마지막 파드부터 첫 번째 파드까지).

StatefulSet 편집

  1. StatefulSet 선택
  2. 상세 패널에서 "편집" 버튼 클릭
  3. YAML 에디터에서 StatefulSet 정의 수정
  4. "저장" 버튼 클릭

StatefulSet 삭제

⚠️ 주의: StatefulSet을 삭제해도 PersistentVolumeClaim은 자동으로 삭제되지 않습니다. 데이터 보존을 위해 별도로 PVC를 관리해야 합니다.

  1. 삭제할 StatefulSet 선택
  2. 상세 패널에서 "삭제" 버튼 클릭
  3. 확인 다이얼로그에서 StatefulSet 이름 입력
  4. "삭제" 버튼 클릭

사용 예시

시나리오 1: 멀티클러스터 데이터베이스 배포

  1. "생성" 버튼 클릭
  2. StatefulSet 정보 입력:
    • 이름: mysql
    • 네임스페이스: database
    • 서비스 이름: mysql-headless
    • 레플리카 수: 3
    • 컨테이너 이미지: mysql:8.0
  3. 볼륨 클레임 템플릿 설정:
    • 스토리지 클래스: standard
    • 용량: 10Gi
  4. "생성" 버튼 클릭
  5. PropagationPolicy로 타겟 클러스터 지정

시나리오 2: StatefulSet 상태 확인

  1. StatefulSet 목록에서 확인할 StatefulSet 클릭
  2. 개요 탭에서 복제 세트 상태 확인
  3. 상태저장 세트 정보에서 서비스 이름, 관리 정책 확인
  4. 파드 탭에서 클러스터별 파드 분배 확인
  5. 파드 이름이 순차적인지 확인 (my-statefulset-0, my-statefulset-1)

시나리오 3: 스케일 아웃

  1. 스케일 아웃할 StatefulSet 선택
  2. "스케일 업" 버튼 클릭
  3. 새 파드가 순서대로 생성되는 것 확인 (예: my-statefulset-2)
  4. 파드가 Ready 상태가 된 후 다음 파드 생성

시나리오 4: 롤링 업데이트

  1. StatefulSet 선택 후 "편집" 클릭
  2. 컨테이너 이미지 버전 변경 (예: mysql:8.0mysql:8.1)
  3. "저장" 클릭
  4. 업데이트가 역순으로 진행되는 것 확인:
    • my-statefulset-2 → my-statefulset-1 → my-statefulset-0
  5. 각 파드가 Ready 상태가 된 후 다음 파드 업데이트

시나리오 5: 클러스터별 파드 확인

  1. StatefulSet 선택
  2. "파드" 탭 클릭
  3. 각 클러스터에 동일한 이름의 파드 확인:
    • 클러스터 A: my-statefulset-0
    • 클러스터 B: my-statefulset-0
  4. 각 파드의 노드, 상태, 재시작 횟수 확인

관련 개념

StatefulSet vs Deployment

특성StatefulSetDeployment
파드 이름순차적 고정 (app-0, app-1)랜덤 (app-abc123)
네트워크 ID안정적 (헤드리스 서비스)동적
스토리지영구 (PVC 유지)임시
순서 보장생성/삭제 순서 보장순서 없음
스케일링순차적병렬
사용 사례데이터베이스, 상태 저장 앱무상태 웹 앱

파드 관리 정책

OrderedReady (기본값):

  • 파드가 순서대로 생성/삭제
  • 이전 파드가 Ready 상태가 되어야 다음 파드 생성
  • 데이터베이스 클러스터 구성에 적합

Parallel:

  • 모든 파드가 동시에 생성/삭제
  • 순서가 중요하지 않은 경우 사용
  • 빠른 스케일링이 필요한 경우

업데이트 전략

RollingUpdate (기본값):

  • 역순으로 파드를 업데이트 (마지막 → 첫 번째)
  • partition: 특정 인덱스 이상의 파드만 업데이트

OnDelete:

  • 파드를 수동으로 삭제해야 업데이트됨
  • 완전한 제어가 필요한 경우 사용

헤드리스 서비스

StatefulSet은 헤드리스 서비스와 함께 사용됩니다:

  • ClusterIP가 None인 서비스
  • 각 파드에 고유한 DNS 이름 제공
  • 예: mysql-0.mysql-headless.database.svc.cluster.local

PersistentVolumeClaim 관리

StatefulSet의 볼륨 클레임 템플릿:

  • 각 파드에 개별 PVC 생성
  • StatefulSet 삭제 시 PVC 유지 (데이터 보존)
  • 수동으로 PVC 삭제 필요

다음 단계