Kubernetes에서 DaemonSet, Deployment, StatefulSet은 애플리케이션을 배포하고 관리하는 데 사용되는 세 가지 주요 리소스입니다. 각각의 목적과 동작 방식이 다르며, 특정 상황에 적합한 기능을 제공합니다. 이 세 가지 리소스를 자세히 설명하겠습니다.
1. DaemonSet
개념: DaemonSet은 클러스터 내의 모든 노드에서 특정 애플리케이션의 복사본을 실행하도록 보장합니다. 새로운 노드가 클러스터에 추가되면, 해당 노드에도 자동으로 Pod가 생성됩니다. 마찬가지로 노드가 클러스터에서 제거되면 그 노드에서 실행 중인 Pod도 제거됩니다.
주요 특징:
클러스터의 모든 노드 또는 특정 레이블이 있는 노드에 애플리케이션을 배포합니다.
로그 수집 에이전트, 모니터링 에이전트, 네트워크 플러그인 등 노드별로 실행해야 하는 작업에 적합합니다.
노드 수에 따라 자동으로 Pod가 추가되거나 제거됩니다.
사용 사례:
로그 수집 도구(예: Fluentd, Logstash).
모니터링 에이전트(예: Prometheus Node Exporter).
네트워크 플러그인(Calico, Flannel 등).
2. Deployment
개념: Deployment는 애플리케이션의 스케일링, 업데이트, 롤백을 관리합니다. 기본적으로 무상태(Stateless) 애플리케이션을 배포하는 데 적합하며, 원하는 수의 복제본을 실행하도록 보장합니다.
주요 특징:
애플리케이션의 스케일링과 롤링 업데이트를 지원합니다.
Pod 템플릿을 정의하여 동일한 템플릿을 따르는 여러 복제본을 실행할 수 있습니다.
새로운 버전의 애플리케이션을 배포할 때 기존 버전을 점진적으로 교체하면서 무중단 업데이트를 수행할 수 있습니다.
롤백 기능을 제공하여 이전 버전으로 쉽게 되돌릴 수 있습니다.
사용 사례:
무상태 웹 서버, API 서버 등 동일한 인스턴스가 여러 개 필요한 애플리케이션.
애플리케이션의 업데이트 및 롤백이 자주 필요한 경우.
3. StatefulSet
개념: StatefulSet은 상태가 있는(Stateful) 애플리케이션을 배포하고 관리하는 데 사용됩니다. 각 Pod는 고유한 네트워크 ID와 스토리지를 가지며, 순서가 보장되는 생성 및 종료 동작을 제공합니다.
주요 특징:
각 Pod는 고유한 네트워크 ID(예: my-app-0, my-app-1)를 가지며, 이 ID는 순서대로 할당됩니다.
각 Pod에 대해 고유한 PersistentVolumeClaim(PVC)을 생성하여, Pod가 삭제되더라도 데이터는 유지됩니다.
Pod의 생성과 종료가 순차적으로 이루어지므로, 순서가 중요한 애플리케이션에 적합합니다.
클러스터 간 복제 또는 데이터베이스의 리더-팔로워 설정 등 상태가 중요한 애플리케이션에 유용합니다.
사용 사례:
데이터베이스(MySQL, PostgreSQL 등)와 같은 상태가 필요한 애플리케이션.
분산 파일 시스템(Cassandra, HDFS).
상태가 있는 서비스를 실행해야 하거나, 각 인스턴스의 식별이 중요한 경우.
4. 정리 및 비교
특성 | DaemonSet | Deployment | StatefulSet |
목적 | 모든 노드에서 애플리케이션의 인스턴스를 실행 | 무상태 애플리케이션의 관리와 스케일링 | 상태가 있는 애플리케이션의 배포와 관리 |
Pod 배포 방식 | 모든 노드 또는 특정 노드에서 실행 | 원하는 수의 복제본을 생성하여 무작위로 배포 | 순서에 따라 Pod를 생성하고 종료하며, 고유한 네트워크 ID 부여 |
스토리지 관리 | 일반적으로 스토리지와 관련 없음 | 스토리지 필요 시 외부 스토리지와 연결 | 각 Pod에 대해 고유한 PVC를 사용, 데이터 유지 보장 |
업데이트 전략 | Pod가 추가/삭제될 때 자동 관리 | Rolling Update 및 롤백 지원 | 순차적 업데이트, 상태가 중요한 애플리케이션에 적합 |
주요 사용 사례 | 로그 수집, 모니터링 에이전트, 네트워크 플러그인 | 무상태 웹 서버, API 서버 등 | 데이터베이스, 분산 시스템 등 상태 유지가 중요한 애플리케이션 |
'K8S' 카테고리의 다른 글
[Kubernetes] PDB 란? (0) | 2024.12.02 |
---|---|
helm plugin 수동 설치 - windows (0) | 2024.11.25 |
Istio 의 컴포넌트 (0) | 2024.11.09 |
[kubernetes] ingress 를 거치는 통신 과정 (0) | 2024.11.07 |
CKA 합격 후기 및 팁 (1) | 2024.06.04 |
댓글