🔹Kubernetes

쿠버네티스 워크로드 선택 기준

terranbin 2025. 2. 28. 10:41
728x90
SMALL

쿠버네티스 워크로드 선택 기준

사용 목적 추천 워크로드
단순한 컨테이너 실행 Pod
웹 서비스, API 서버 배포 Deployment
데이터베이스, 상태 유지 서비스 StatefulSet
모든 노드에서 실행해야 하는 모니터링/보안 에이전트 DaemonSet
한 번 실행 후 종료되는 작업 Job
주기적으로 실행되는 작업 CronJob

 


📌 각 워크로드 예제

1️⃣ Pod 예제 (단순 컨테이너 실행)

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
  • 단순한 컨테이너 실행에 사용되며, 직접 사용보다는 컨트롤러(Deployment 등)에서 관리하는 것이 일반적임.

2️⃣ Deployment 예제 (무중단 배포 & 스케일링)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx
  • 무중단 배포(Rolling Update), 스케일링을 지원하며, 일반적인 애플리케이션 배포에 사용됨.

3️⃣ StatefulSet 예제 (데이터 유지가 필요한 서비스)

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset
spec:
  serviceName: "my-service"
  replicas: 2
  selector:
    matchLabels:
      app: database
  template:
    metadata:
      labels:
        app: database
    spec:
      containers:
      - name: db-container
        image: mysql
  • 각 Pod가 고유한 네트워크 ID를 가지며, 데이터가 유지됨.
  • 데이터베이스 및 상태 유지가 필요한 서비스(MySQL, Cassandra 등)에 적합.

4️⃣ DaemonSet 예제 (모든 노드에서 실행)

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: monitoring-agent
spec:
  selector:
    matchLabels:
      app: monitoring
  template:
    metadata:
      labels:
        app: monitoring
    spec:
      containers:
      - name: agent
        image: prom/node-exporter
  • 클러스터 내 모든 노드에서 실행되며, 노드 추가 시 자동으로 배포됨.
  • 모니터링, 로깅 에이전트(Fluentd, Prometheus) 등에 사용됨.

5️⃣ Job 예제 (한 번 실행 후 종료되는 작업)

apiVersion: batch/v1
kind: Job
metadata:
  name: my-job
spec:
  template:
    spec:
      containers:
      - name: backup
        image: alpine
        command: ["sh", "-c", "echo '백업 작업 수행 중...' && sleep 10"]
      restartPolicy: Never
  • 데이터 백업, 일회성 스크립트 실행 등 한 번 실행 후 종료되는 작업에 사용됨.

6️⃣ CronJob 예제 (정기적으로 실행되는 Job)

apiVersion: batch/v1
kind: CronJob
metadata:
  name: log-cleanup
spec:
  schedule: "0 0 * * *"  # 매일 자정에 실행
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cleanup
            image: alpine
            command: ["sh", "-c", "echo '로그 정리 중...'"]
          restartPolicy: OnFailure
  • 정해진 일정(cron 형식)대로 실행되는 배치 작업.
  • 로그 정리, 데이터 정리 등의 작업에 유용.

📌 결론

✅ 쿠버네티스에는 다양한 워크로드(Workloads) 가 있으며, 각 목적에 맞게 선택해야 함.
✅ 일반적인 애플리케이션 배포에는 Deployment, 데이터베이스 관리에는 StatefulSet, 모니터링 에이전트에는 DaemonSet 사용.
✅ 배치 작업은 Job(CronJob 포함) 을 활용하여 실행 가능.

 

LIST