Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | High Level #4] 쿠버네티스 클러스터 성능 최적화 및 리소스 사용량 튜닝

ygtoken 2025. 3. 17. 12:03
728x90

 

쿠버네티스 클러스터를 운영할 때, 리소스 사용량을 최적화하고 성능을 튜닝하는 것은 클러스터 안정성과 운영 비용 절감에 중요한 요소입니다.

이 글에서는 쿠버네티스 환경에서 노드 및 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 사용량 패턴을 분석하여 리소스 최적화 가능

728x90