ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes - Deployment vs StatefulSet
    개발 2022. 6. 17. 20:00

     

    Kubernetes는 Pod을 배포하는 방법으로 StatefulSet과 Deployment를 제공한다. Deployment를 주로 사용해본 입장에선 StatefulSet이 Deployment와 어떤 차이가 있는 것인지 이해하는게 난감했다. 공식 문서상에선 Pod의 순서와 특징의 보존을 보장한다는 설명이 있는데 여전히 잘 와닿지 않는 개념이다.

     

    Stateful and Stateless Application 

     

    StatefulSet을 이해하기 위해선 먼저 Stateful Application과 Stateless Application을 먼저 이해하는게 좋을 것 같다. Stateless 인 경우에는 상태를 저장할 필요가 없는 애플리케이션이다. 만약 서버상에 인스턴스가 저장 관련 작업이 모두 외부 클라우드에 업로드한 MySQL나 S3로 이뤄지며 인스턴스가 재생성 되더라도 내부 저장소를 버려도 되는 경우 이 애플리케이션은 Stateless 애플리케이션이다. 

     

    Stateful 은 상태를 저장해야하는 경우를 말한다. 서버 인스턴스가 데이터를 관리하는 MySQL 서버라 해보자. 데이터베이스가 서버 내부에서 관리되고 있기 때문에 이 경우에는 새로운 인스턴스를 만들더라도 내부에 저장된 데이터까지 복제돼야한다. 이처럼 동작 당시의 상태까지 고려해야하는 경우 Stateful Application 이라 한다. 

     

    Deployment vs StatefulSet

     

    Deployment 의 경우 Stateless 방식으로 Pod을 배포한다. Pod을 관리하는 감독관(Supervisor)의 입장으로 Pod의 생성, 복제 삭제를 Deployment 에서 세팅된 상태로 처리한다. ReplicaSet으로 설정된 값에 따라 Pod이 갑자기 늘어날 수 있고 줄어들 수도 있다. 이 과정에서 Pod의 상태까지 저장하진 않는다. Pod이 내부적으로 사용하고 있는 Ephemeral 스토리지는 Pod이 동작하는 동안에만 유효하고 Pod이 삭제되면 따라서 같이 삭제되게 된다. 만약 Deployment 이면서 Pod 의 일부 상태를 저장하고 싶다면 외부 저장소를 마운트해서 사용하는 방법이 있다.

     

    StatefulSet은 Stateful 방식으로 Pod을 관리한다. 초기 생성때 Pod 별로 별도의 identifier를 부여해서 혹시나 Pod이 재생성 되더라도 그 상태를 유지할 수 있게끔 유도하는 식이다. 고유한 이름이 있고 StatefulSet 내부의 Pod은 재생성 되더라도 순서도 동일하다. 논리적 컴퓨터를 할당해주는 방법이라고 보면 될 것 같다. 주로 Pod의 DNS를 고정시켜주고 싶은 경우나 스토리지가 동일한 상태를 유지하도록 세팅하는 경우에 사용한다. StatefulSet 에서 Pod은 PVC(Persistent Volume Claim) 이라는 스토리지를 개별로 할당 받아서 사용하게 된다. MySQL, Zookeeper, Kafka 를 배포할 때 Stateful 방식을 사용한다. 

     

     

     

     

    Kubernetes Deployment vs. StatefulSets | Baeldung

    In this tutorial, we'll discuss two different ways to deploy our application(pods) on Kubernetes using two resources provided by Kubernetes: Deployment and StatefulSet.

    www.baeldung.com

     

    '개발' 카테고리의 다른 글

    kubernetes - Service  (0) 2022.06.20
    Reverse Proxy  (0) 2022.06.20
    Kubernetes - Deployment vs StatefulSet  (0) 2022.06.17
    kubernetes - Configmap 생성하기  (0) 2022.06.10
    kubernetes - Configmap  (0) 2022.06.08
    Kafka 용어 정리  (0) 2022.05.31

    댓글 0

Designed by Tistory.