ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Deployment와 StatefulSet
    Kubernetes 2023. 7. 1. 16:55

    대부분의 어플리케이션은 Deployment 또는 StatefulSet 으로 파드를 배포한다.

    • StatefulSet은 stateful(상태가 있는) 서버 (정보 또는 데이터가 있는 서버)
    • Deployment 는 stateless(상태가 없는) 서버 (정보 또는 데이터가 없는 서버)

    쉽게 예를들면

    • 콜센터의 상담원 A와 상담을 하던 중 전화가 끊겨서 다시 전화를 했더니, 상담원 B와 연결이 되었다. A가 본인 노트에만 상담내용을 기록했다면, B는 처음부터 다시 상담을 해야한다.
    • 위의 예 처럼 각 파드가 데이터를 각자 가지고 있으면 다른 파드로 연결되었을 때 서비스에 문제가 발생한다.
    • 하지만 독립적인 빌드/배포/스케일링을 위해서 컨테이너를 사용하는 건데 각 파드가 스테이트풀하게 고유의 데이터를 가지면 안된다.

    그렇다면 어떤 경우에 StatefulSet, 어떤경우에 Deployment 를 사용하나?

    • 파드가 고유의 데이터를 관리할 필요가 있을 경우 StatefulSet
    • 어플리케이션은 이런 경우가 없어야 하고, 데이터베이스를 파드로 실행한다면 파드는 고유의 데이터를 관리해야 한다.
    • 요약
      • 고유의 데이터 관리나 주소가 필요한 경우에는 스테이트풀셋으로 배포하고, 그렇지 않은 경우에는 디플로이먼트로 배포해야한다.
        • 스테이트풀셋으로 배포한 파드의 이름에는 일련번호가 붙는다.

    정리

    항목 Deployment StatefulSet
    목적 고유의 주소나 데이터 관리가 필요 없는 스테이트리스 한 파드 배포 고유의 주소나 데이터 관리가 필요한 스테이트풀한 파드 배포
    리소스 종류 Deployment StatefulSet
    serviceName 요구 serviceName 정의 불가 serviceName 정의 필수
    파으 생성/삭제/스케일링 병행 처리 순차 처리와 병행 처리 모두 가능<br />(podManagementPolicy로 설정)
    파드 이름 {워크로드 컨트롤러 이름}-{랜덤문자} {워크로드 컨트롤러 이름}-{일련번호}
    파드 주소 없음 {파드}.{서비스}.{네임스페이스}.svc.cluster.local로 CoreDNS에 등록됨
    고유 데이터 관리 불가 각 파드별로 PVC 바인딩하여 가능 (volumeClaimTemplates에 정의하여 각 파드별 PVC를 자동 생성함)

    참고

    'Kubernetes' 카테고리의 다른 글

    Affinity : Pod를 원하는 Node에 띄우기  (0) 2023.07.22
    Pod 에 root 권한 주는 법  (0) 2023.07.01
    kubectl cp 명령어  (0) 2023.07.01
Designed by Tistory.