워크로드 배치 전략

< 이전: GPU 서버 통합 | 목차 | 다음: 노드 라이프사이클 관리 >

지원 버전: EKS 1.31+, nodeadm 0.1+ 마지막 업데이트: 2026년 2월 22일

이 문서에서는 EKS Hybrid Nodes 환경에서 효과적인 워크로드 배치 전략을 다룹니다.

Node Affinity 및 Taints/Tolerations

Hybrid 노드 Taint 설정

# 온프레미스 노드에 Taint 추가
kubectl taint nodes hybrid-node-001 eks.amazonaws.com/compute-type=hybrid:NoSchedule

# GPU 노드에 추가 Taint
kubectl taint nodes hybrid-gpu-node-001 gpu=true:NoSchedule

온프레미스 전용 워크로드

# on-prem-workload.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: data-processor
  namespace: analytics
spec:
  replicas: 3
  selector:
    matchLabels:
      app: data-processor
  template:
    metadata:
      labels:
        app: data-processor
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: eks.amazonaws.com/compute-type
                operator: In
                values:
                - hybrid
      tolerations:
      - key: eks.amazonaws.com/compute-type
        operator: Equal
        value: hybrid
        effect: NoSchedule
      containers:
      - name: processor
        image: harbor.internal.company.io/analytics/data-processor:v2.1.0
        resources:
          requests:
            cpu: "2"
            memory: "4Gi"
          limits:
            cpu: "4"
            memory: "8Gi"

GPU 워크로드 온프레미스, CPU 워크로드 클라우드 패턴

Karpenter를 활용한 Cloud Bursting

온프레미스 용량이 초과되면 자동으로 AWS로 확장합니다.

Karpenter NodePool 구성

Topology-Aware 스케줄링

Pod Deletion Cost를 활용한 온프레미스 노드 최대 활용

왜 Pod Deletion Cost가 필요한가

Cloud Bursting 패턴에서 트래픽이 줄어 스케일 다운할 때, 어떤 Pod를 먼저 제거할지가 중요합니다. 온프레미스 하드웨어는 이미 투자된 비용(sunk cost)이므로 가능한 한 활용해야 하고, 클라우드 Pod는 사용한 만큼 과금되므로 먼저 제거하는 것이 비용 효율적입니다.

controller.kubernetes.io/pod-deletion-cost 어노테이션은 ReplicaSet 컨트롤러가 스케일 다운 시 어떤 Pod를 먼저 삭제할지 결정하는 데 사용됩니다.

어노테이션 값
동작

낮은 값 (예: 0, 기본값)

먼저 삭제됨

높은 값 (예: 1000)

나중에 삭제됨 (보호됨)

동작 원리

Mutating Webhook으로 자동 적용

Pod가 생성될 때 노드 위치에 따라 자동으로 deletion-cost를 부여하는 Mutating Webhook을 구성합니다.

수동 적용 (간단한 방법)

Webhook 없이도 Deployment 매니페스트에 직접 어노테이션을 지정할 수 있습니다. 이 방식은 Pod 생성 시점에는 노드가 결정되지 않으므로, 스케줄링 후 노드 정보를 기반으로 패치하는 CronJob을 활용합니다.

Karpenter 연동 시 고려 사항

Karpenter의 consolidationPolicy와 pod-deletion-cost를 함께 사용하면 더욱 효과적입니다:

구성
역할

pod-deletion-cost

ReplicaSet 스케일 다운 시 클라우드 Pod 우선 삭제

Karpenter WhenEmpty

빈 클라우드 노드를 자동 제거

Karpenter WhenUnderutilized

활용도 낮은 클라우드 노드 통합

스케일 다운 시의 전체 흐름:

spinner

< 이전: GPU 서버 통합 | 목차 | 다음: 노드 라이프사이클 관리 >

마지막 업데이트