kubernetes - StatefulSet

우야·2021년 5월 26일
0

Stateless App

  • 상태를 가지지 않는 App으로 일반적으로 데이터를 저장하지않는 상황에서 사용하고, 중간에 Error가 발생하여 App이 죽었을경우에도 이전 App의 상태와 상관없이 새롭게 동작해도 되는 App

  • 일반 웹 서버/서비스

  • Scale이 되더라도, Service를 사용하여 Pod에 단순 분산 목적임

  • 볼륨이 반드시 필요하지는 않음

  • Deployment, ReplicaSet으로 관리됨

StatefulSet Controller

  • 상태를 저장하는 App으로 일반적으로 데이터를 저장하는 상황에서 사용하고, 중간 Error가 발생하여 App이 죽을경우에도 이전 APP의 상태를 가져와서 상태를 유지하며 동작하기위해서 사용되는 APP

  • Postsql등 DB등을 사용하여, 시스템의 데이터베이스 연결에 사용

  • statefulset을 구성은 보통 여러개(3개)의 pod로 구성

  • Pod에 접근하기 위해서 Headless Service 사용 (ClusterIP : None)

    • 각 Pod에 예측 가능한 도메인 이름이 만들어지며 (.mysql)
    • 클러스터 내부에서 StatefulSet의 Pod에 선택적으로 연결/접속 가능
    • 고유한 네트워크 식별자
    • 지속적인 스토리지
    • 단계적 배포, 확장
    • 단계적 자동 롤링 업데이트
생성
  • 각 pod가 생성될때, InitContainer에서 DB접속 및 DB복제 처리를한다.
  • replicas를 1로 주어 Pod를 생성하면 Ordinal Index 이름으로 Pod가 생성된다. (Pod-0)
  • 여러 개를 생성하면 순차적으로 생성되고, Pod-0, Pod-1,.... 순서로 생성된다.
  • 순차적으로 pod가 생성될때, 실행중인 이전 순번pod에서 기존 데이터를 모두 복사한다.
  • PersistentVolumeClaim, Headless Service, template으로 Pod가 생성되고 난 후, PVC가 동적 생성된 후 Pod와 연결된다.
  • ReplicaSet일 때는 3개의 Pod가 모두 직접 생성한 PVC1로 연결되는 데 반해, StatefulSet은 3개의 PVC가 만들어져 3개의 Pod에 각각 연결된다. 그
  • 그래서 Pod마다 각자의 역할에 따른 데이터를 저장할 수 있다.
  • 동적으로 Pod와 PVC가 같은 노드에 만들어지고, 따라서 알아서 모든 노드에 균등하게 배포된다.
삭제
  • 만약 Pod-2를 삭제하고 재생성할 경우, 기존 이름(Pod-2)로 다시 생성한다.
  • replicas를 0으로 변경해 Pod들이 모두 삭제되어야 할 경우, 마지막 인덱스 Pod부터 순차적으로 삭제된다.
  • replicas를 0으로 주어 Pod들이 삭제되어도 PVC는 삭제되지 않는다.
profile
Fullstack developer

0개의 댓글