콘텐츠로 이동

2025 06 26

2025-06-26

k8s statefulSet

참고: https://nearhome.tistory.com/107

  • 개요
    • 쿠버에서 상태를 가지는 어플리케이션을 관리하기 위한 워크로드 오브젝트
    • 주로 DB, MQ, 분산 저장소 등 각 인스턴스가 고유한 신원(이름/네트워크/스토리지) 상태를 가져야 하는 서비스에 사용
  • Deployment를 왜 안쓰고...?
    • Stateless 웹 서버/API 서버라면 deployment로 충분
      • 파드 죽어도 상관없고, 아무파드나 요청 처리해도 상관 X
    • 하지만, DB나 분산 시스템 처럼 각 파드가 고유한 역할 & 데이터 가진다면 문제 발생
      • 파드 재시작할 때 기존에 사용하던 볼륨에 접근해야 데이터 유지됨
      • 각 파드가 고유한 네트워크 이름을 가져야 함
      • 파드 생성/종료/업데이트가 순서가 필요하다면
    • 해당 요구사항을 statefulSet이 해결
  • StatefulSet의 핵심 기능
    1. 자동화된 고유 식별자 관리
      • StatefulSet 컨트롤러가 Pod 생성시 -0, -1 같은 순차적 식별자 자동 부여
      • DNS와 연동되어 안정적인 네트워크 접근 보장
    2. 스토리지 라이프사이클 자동화
      • volumeClaimTemplates 활용해 각 Pod마다 전용 PV 프로비저닝
      • Pod 재생성 시, 동일 볼륨 자동 마운트
    3. 순차적 오케스트레이션
      • 스케일링 시: pod N Running/Ready => pod N+1 생성
      • 업데이트 시: 역순 (Pod2 -> Pod1 -> Pod0) 롤링 업데이트
      • 삭제 시: 역순으로 종료 확인 후 다음 pod 종료
  • ACL을 위한 IP 대역 관리
    • 고정 IP 할당
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: db
      spec:
        serviceName: "db"
        replicas: 3
        template:
          metadata:
            annotations:
              ipam.antrea.io/ippools: 'db-ip-pool'  # 고정 IP 풀 지정