쿠버네티스에서 애플리케이션이 무분별하게 리소스를 사용하지 않도록 제한하고,
특정 노드에서만 실행되도록 설정하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1️⃣ 특정 리소스 제한을 적용한 Pod 실행
2️⃣ 특정 노드에서만 실행되는 Pod (Node Affinity)
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ 특정 리소스 제한을 적용한 Pod 실행
📍 상황 설명
운영팀에서 특정 애플리케이션이 과도한 리소스를 사용하지 않도록 제한하려 합니다.
이 애플리케이션은 CPU를 많이 사용하므로 적절한 CPU 및 메모리 제한을 설정해야 합니다.
• Pod의 이름은 resource-limited-app이어야 합니다.
• CPU 사용량은 기본 요청 250m, 최대 500m로 설정해야 합니다.
• 메모리는 기본 요청 128Mi, 최대 256Mi로 설정해야 합니다.
🛠️ 해결 방법
1. Pod에서 CPU 및 메모리 요청(Request)과 제한(Limit)을 설정해야 합니다.
• resources.requests를 설정하여 기본적으로 보장할 리소스 크기를 지정합니다.
• resources.limits를 설정하여 최대 사용할 수 있는 리소스를 제한합니다.
✅ 정답 Manifest (리소스 제한이 적용된 Pod)
apiVersion: v1
kind: Pod
metadata:
name: resource-limited-app # Pod의 이름
spec:
containers:
- name: my-app
image: my-app:latest # 애플리케이션 컨테이너
resources:
requests:
cpu: "250m" # 최소 보장할 CPU (250 milliCPU)
memory: "128Mi" # 최소 보장할 메모리
limits:
cpu: "500m" # 최대 사용할 수 있는 CPU (500 milliCPU)
memory: "256Mi" # 최대 사용할 수 있는 메모리
📌 적용 후 예상 결과 값
1) Pod 생성 확인
kubectl get pods
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE
resource-limited-app 1/1 Running 0 5s
2) Pod의 리소스 제한 확인
kubectl describe pod resource-limited-app | grep -A 5 "Limits"
💡 예상 출력 값
Limits:
cpu: 500m
memory: 256Mi
Requests:
cpu: 250m
memory: 128Mi
2️⃣ 특정 노드에서만 실행되는 Pod (Node Affinity)
📍 상황 설명
GPU가 있는 특정 노드에서만 머신러닝 애플리케이션을 실행해야 합니다.
이 애플리케이션은 GPU가 있는 노드에서만 배포되도록 설정해야 합니다.
• Pod의 이름은 gpu-app이어야 합니다.
• my-ml-app:latest 이미지를 실행해야 합니다.
• nvidia-gpu 라벨이 있는 노드에서만 실행되도록 설정해야 합니다.
🛠️ 해결 방법
1. Node Affinity를 설정하여 특정 라벨이 있는 노드에서만 실행되도록 합니다.
• requiredDuringSchedulingIgnoredDuringExecution을 사용하여 반드시 지정된 조건의 노드에서 실행되도록 설정합니다.
• matchExpressions를 활용하여 nvidia-gpu 라벨이 있는 노드에서만 실행되도록 만듭니다.
✅ 정답 Manifest (Node Affinity가 적용된 Pod)
apiVersion: v1
kind: Pod
metadata:
name: gpu-app # Pod의 이름
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: nvidia-gpu # 이 라벨이 있는 노드에서만 실행됨
operator: Exists
containers:
- name: my-ml-app
image: my-ml-app:latest # 머신러닝 애플리케이션 컨테이너
📌 적용 후 예상 결과 값
1) Pod 생성 확인
kubectl get pods
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE
gpu-app 1/1 Running 0 5s
2) Pod의 노드 배치 상태 확인
kubectl get pod gpu-app -o wide
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE NODE
gpu-app 1/1 Running 0 5s gpu-node-1
'Kubernetes > Kubernetes Best Practices' 카테고리의 다른 글
[Scenario Playbook Ep.6] 🚀 Deployment 편 #1 | 배포 전략 및 롤링 업데이트 (0) | 2025.03.15 |
---|---|
[Scenario Playbook Ep.5] 🚀 POD 편 #5 | Pod 스케줄링 & 실행 전략 (0) | 2025.03.15 |
[Scenario Playbook Ep.4] 🚀 POD 편 #4 | 스토리지 & 데이터 유지 (0) | 2025.03.15 |
[Scenario Playbook Ep.3] 🚀 POD 편 #3 | 다중 컨테이너 & 초기화 설정 (0) | 2025.03.15 |
[Scenario Playbook Ep.1] 🚀 POD 편 #1 | 기본 실행 & 환경 변수 설정 (0) | 2025.03.15 |