-
Deployment와 StatefulSetKubernetes 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