상태 저장 애플리케이션 배포, 확장, 모니터링

Kubernetes 소개

Frank Heilmann

Platform Architect and Freelance Instructor

상태 비저장 애플리케이션 복습

  • 요약: 상태 비저장 앱은 Kubernetes의 "Deployment"에 해당
  • 앱의 모든 Pod가 동일한 작업을 수행할 때 사용
  • 상태 저장 앱은 함께 묶인 Pod 세트가 필요하며, 서로 다른 작업과 데이터로 동작할 수 있음
  • Deployment에서 배운 대부분은 StatefulSet에도 적용 가능
Kubernetes 소개

상태 저장 애플리케이션

  • 상태 저장 앱:

    • 일반 개념
    • Kubernetes와 잘 맞음
    • 상태를 저장함
  • 중단/종료되어도, 새 복제본(Pod)이 저장된 상태를 읽어 그 지점부터 계속 동작 가능

  • 예:
    • 데이터베이스 백엔드(예: PostgreSQL)가 3개의 Pod로 프런트엔드에 데이터를 제공
    • 어떤 Pod로 데이터를 갱신해도, 해당 데이터는 영구 저장되어야 함
    • Pod가 종료되면, 새 Pod가 생성되어 저장된 상태를 이어받아야 함
Kubernetes 소개

Kubernetes StatefulSet

  • 상태 저장 앱은 "Kubernetes StatefulSet"에 해당
  • 샘플 매니페스트는 다음과 같은 동일한 섹션으로 구성:
    • apiVersion, kind, metadata, spec, template
  • replicasStatefulSet의 Pod 수를 정의
  • selector는 뒤에서 설명
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Kubernetes 소개

Kubernetes 클러스터에 배포

  • StatefulSet 배포는 Deployment와 유사: kubectl apply -f <manifest.yml>
  • 배포 후 생성 과정은 Deployment와 다름:
    • Pod는 한 번에 모두가 아니라 순차적으로 생성됨
    • Pod는 pod-0, pod-1, pod-2처럼 예측 가능한 이름을 가짐
  • 즉, Deployment의 Pod와 달리 StatefulSet의 Pod는 고유 ID와 상태를 가짐
  • 따라서 서로 다른 ID의 StatefulSet Pod는 앱에서 다른 역할 수행 가능
Kubernetes 소개

StatefulSet 확장

  • StatefulSet도 Deployment처럼 스케일 인/아웃 가능:
    • Manifest의 replicas 값을 수정 후 재적용
    • 또는 kubectl scale statefulsets ... 사용
  • 스케일 아웃 시, 새 Pod는 순차적으로 생성됨:
    • 예: 먼저 pod-0, pod-1, pod-2, 그다음 pod-3, 그리고 pod-4가 추가됨
  • 스케일 인 시, 마지막에 생성된 Pod부터 삭제됨:
    • 예: 먼저 pod-4, 그다음 pod-3
Kubernetes 소개

StatefulSet 모니터링

  • Deployment과 마찬가지로, 모니터링은 장애, 부하 급증, 스토리지 부족 등 문제에 대응하게 해줌
  • 여기서는 기본 모니터링에 kubectl을 사용
  • 대표 명령: Deployment와 동일
  • 예시 1: kubectl get pods는 StatefulSet의 모든 Pod와 현재 상태를 반환
  • 예시 2: kubectl get services는 StatefulSet이 사용할 수 있는 모든 Service를 반환
Kubernetes 소개

연습해 봅시다!

Kubernetes 소개

Preparing Video For Download...