쿠버네티스 클러스터를 운영할 때, 리소스 사용량을 최적화하고 성능을 튜닝하는 것은 클러스터 안정성과 운영 비용 절감에 중요한 요소입니다.
이 글에서는 쿠버네티스 환경에서 노드 및 Pod의 리소스를 효율적으로 관리하고 성능을 최적화하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1. 리소스 요청(Request) 및 제한(Limit) 설정을 통한 클러스터 안정성 향상
2. Horizontal Pod Autoscaler(HPA) 및 Vertical Pod Autoscaler(VPA)를 활용한 동적 리소스 최적화
3. kubectl 및 모니터링 도구(Prometheus, Metrics Server)를 활용한 성능 분석 및 리소스 튜닝
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ 리소스 요청(Request) 및 제한(Limit) 설정을 통한 클러스터 안정성 향상
❓ 문제 상황
운영팀에서 CPU 및 메모리 사용량이 증가하면서 특정 Pod이 과도한 리소스를 차지하는 문제가 발생했습니다.
이로 인해 다른 워크로드의 성능이 저하되고, 클러스터 전체의 안정성이 떨어지고 있습니다.
• 장애 원인: Pod 리소스 사용량이 제한 없이 증가하여 클러스터 자원을 고갈시킴
• 해결 목표: 각 Pod에 적절한 리소스 요청(Request) 및 제한(Limit)을 설정하여 클러스터 안정성을 보장
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Pod의 리소스 요청(Request) 및 제한(Limit)을 설정하여 불필요한 리소스 점유를 방지합니다.
2. kubectl을 활용하여 현재 리소스 사용량을 분석한 후 적절한 값을 설정합니다.
✅ 정답 Manifest (리소스 제한 설정)
🔹 리소스 요청 및 제한 적용
apiVersion: v1
kind: Pod
metadata:
name: optimized-app
namespace: default
spec:
containers:
- name: app
image: nginx
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
✅ 이제 Pod이 CPU 500m, 메모리 1Gi 이상을 사용하지 않도록 제한됨
📌 적용 후 예상 결과 값
1. Pod의 리소스 설정 확인
kubectl describe pod optimized-app
💡 예상 출력 값
Limits:
cpu: 500m
memory: 1Gi
Requests:
cpu: 250m
memory: 512Mi
✅ 과도한 리소스 사용으로 인한 성능 저하 방지 가능
2️⃣ Horizontal Pod Autoscaler(HPA) 및 Vertical Pod Autoscaler(VPA)를 활용한 동적 리소스 최적화
❓ 문제 상황
운영팀에서 트래픽이 급증하면서 특정 애플리케이션의 부하가 증가하고 있으며, 현재 배포된 Pod 개수로는 감당할 수 없습니다.
이를 해결하기 위해 Horizontal Pod Autoscaler(HPA) 및 Vertical Pod Autoscaler(VPA)를 적용하여 리소스를 동적으로 확장해야 합니다.
• 장애 원인: 고정된 Pod 개수로 인해 트래픽 증가 시 성능 저하 발생
• 해결 목표: HPA를 활용하여 Pod 개수를 자동 확장하고, VPA를 사용하여 리소스 사용량을 자동 조정
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. HPA를 설정하여 CPU 사용량을 기준으로 Pod 개수를 자동으로 조정합니다.
2. VPA를 설정하여 Pod의 리소스 요청(Request) 및 제한(Limit)을 자동으로 조정합니다.
✅ 정답 Manifest (HPA 및 VPA 설정)
🔹 Horizontal Pod Autoscaler(HPA) 설정
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
✅ CPU 사용량이 70%를 초과하면 Pod 개수가 자동으로 증가됨
🔹 Vertical Pod Autoscaler(VPA) 설정
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: web-app-vpa
namespace: default
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
updatePolicy:
updateMode: Auto
✅ Pod의 리소스 요청 및 제한이 자동으로 최적화됨
📌 적용 후 예상 결과 값
1. HPA 적용 상태 확인
kubectl get hpa
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
web-app-hpa Deployment/web-app 85%/70% 2 10 4 5m
✅ Pod 개수가 자동으로 증가하여 부하를 분산할 수 있음
3️⃣ kubectl 및 모니터링 도구(Prometheus, Metrics Server)를 활용한 성능 분석 및 리소스 튜닝
❓ 문제 상황
운영팀에서 현재 실행 중인 Pod의 리소스 사용량을 모니터링하고, 과도한 리소스를 사용하는 애플리케이션을 찾아 최적화해야 합니다.
kubectl 및 Prometheus를 활용하여 실시간으로 리소스 사용량을 분석하고, 필요 시 튜닝해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl top 명령어를 사용하여 Pod 및 노드의 현재 리소스 사용량을 확인합니다.
2. Prometheus 쿼리를 활용하여 장기적인 리소스 사용 패턴을 분석합니다.
✅ 성능 분석 및 리소스 튜닝 명령어
🔹 현재 실행 중인 Pod의 리소스 사용량 조회
kubectl top pod
💡 예상 출력 값
NAME CPU(cores) MEMORY(bytes)
web-app-xyz 250m 750Mi
✅ 현재 실행 중인 Pod의 CPU 및 메모리 사용량을 실시간으로 모니터링 가능
🔹 Prometheus에서 특정 애플리케이션의 CPU 사용량 분석
sum(rate(container_cpu_usage_seconds_total{container="web-app"}[5m]))
💡 예상 출력 값
0.3 CPU cores
✅ 장기적인 CPU 사용량 패턴을 분석하여 리소스 최적화 가능