devops

Pod와 Statefulset 본문

DevOps/Kubernetes

Pod와 Statefulset

vata500 2022. 7. 5. 14:14
반응형

Pod(파드)

파드는 일시적이며, 언제나 삭제될 수 있따. 그래서 Stateless하다는 특징이 있다. 이 파드의 교체와 배치를 담당하는 것은 deployment다. deployment는 replicaset을 통해서 파드를 scale out하고 이 때 만들어지는 파드들은 상호 대체가 가능하다.

파드가 사라져도 데이터를 남기고 싶을 수 있다. 대표적인 Stateful 어플리케이션으로 MySQL, MongoDB, Redis같은 DB가 있다. DB 어플리케이션이 담긴 파드가 사라질때, 데이터가 함께 사라져선 안된다.

그래서 쿠버네티스는 영속적인 데이터를 저장하기 위해 볼륨(Volume)을 연결할 수 있다. 이 볼륨은 클라우드 서비스에서 Volume을 따로 분리하는 것과 같은 역할을 한다.

그래서 파드에 볼륨을 연결하면 데이터의 영속성을 유지할 수 있다.

Stateful 어플리케이션 관리 방법

파드에 PV를 정의해서 직접 연결하는 것은 좋은 방법이 아니다. 의존도를 줄이기 위해서 Persistence Volume Claim(PVC)을 이용해서 PV와 연결한다. PVC는 파드가 볼륨의 세부 사항을 인지하지 않아도 볼륨을 사용할 수 있게 해준다.

*PV : 실제 데이터가 저장되는 공간

* PVC : PV를 선택하고 연결해주는 요청

Stateful 어플리케이션의 수평 확장

파드 정의할 때 PVC를 통해서 볼륨에 연결되기 때문에 파드를 재배포해도 같은 PV를 사용하는 구조가 된다.

파드마다 별도의 데이터를 저장하고 싶다면, 수평확장되는 파드에 서로 다른 PV가 연결되어야 한다. 만약 파드가 PV를 동적으로 요청해서 그때마다 볼륨이 생성되게 하면 되는데, 스토리지 클래스(StorageClass) 리소스는 사용자 요청 시 자동으로 PV를 프로비저닝할 수 있게 해준다.

Statefulset

스테이트풀셋은 어플리케이션 구성을 복제해도 스토리지 클래스를 이용해서 파드가 필요로 하는 볼륨을 자동으로 프로비저닝해서 연결한다.

디플로이먼트, 스테이트풀셋 모두 동일한 컨테이너 스펙을 기반으로 둔 파드들을 관리하는 점에서 같으나, 차이점은 다음과 같다.

스테이트풀셋은 파드의 '순서'와 '고유성'을 보장한다. 쉽게 말해서 스테이트 풀셋이 생성한 파드는 상호 대체할 수 없는 고유한 파드다.

스테이트풀셋을 사용할 때 주의할 점은 다음 두가지다.

1) 파드에 지정된 스토리지는 관리자에 의해서 퍼시스턴트 볼륨 프로비저너를 기반하는 Storage class를 요청해서 프로비전을 하거나 사전에 프로비전되어야 한다.

2) 헤드리스 서비스가 필요하다.

 

반응형
Comments