Kubernetes/Kubernetes Basics

📌 Kubernetes 클러스터 성능 튜닝: 리소스 최적화 및 네트워크 개선

ygtoken 2025. 3. 4. 12:55
728x90

 

 

1️⃣ Kubernetes 클러스터 성능 튜닝이 중요한 이유?

 

Kubernetes는 자동 확장(Auto-Scaling), 셀프 힐링(Self-Healing), 서비스 디스커버리(Service Discovery) 등의 기능을 제공하지만,

기본 설정만으로는 최적의 성능을 보장하지 않습니다.

특히 리소스 과사용, 네트워크 병목, 불필요한 로깅 등으로 인해 클러스터 성능이 저하될 수 있습니다.

 

성능 튜닝을 통해 얻을 수 있는 이점

CPU & 메모리 사용량 최적화 → Pod 리소스 사용 조정

네트워크 지연 시간 단축 → CNI 플러그인 설정 최적화

불필요한 로깅 제거 → Fluentd, Loki 등의 로깅 최적화

빠른 스케일링 → HPA & Cluster Autoscaler 성능 개선

 

이 글에서는 Kubernetes 클러스터의 성능을 최적화하는 방법을 다룹니다. 🚀


 

2️⃣ 리소스 최적화 (CPU & 메모리 사용량 조정)

 

📌 Pod가 너무 많은 리소스를 사용하는 경우, 다른 애플리케이션 성능에 영향을 미칠 수 있습니다.

📌 적절한 Requests & Limits 설정을 통해 리소스를 제어해야 합니다.

 


 

✅ Step 1: Requests & Limits 설정하기

 

📌 Pod의 CPU & 메모리 리소스를 제한하려면 Requests & Limits를 설정해야 합니다.

 

📌 optimized-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: optimized-app
spec:
  replicas: 3  # 3개의 Pod 실행
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:latest
        resources:
          requests:
            cpu: "250m"  # 최소 CPU 요청 (0.25 vCPU)
            memory: "256Mi"  # 최소 메모리 요청 (256MB)
          limits:
            cpu: "500m"  # 최대 CPU 제한 (0.5 vCPU)
            memory: "512Mi"  # 최대 메모리 제한 (512MB)

 

📌 배포 명령어

kubectl apply -f optimized-deployment.yaml

Pod가 과도한 리소스를 사용하지 않도록 제한하여 성능을 최적화할 수 있음!

 


 

✅ Step 2: Pod QoS 클래스 적용 (Guaranteed, Burstable, BestEffort)

 

📌 Kubernetes는 Pod의 리소스 요청(Requests)과 제한(Limits)을 기준으로 QoS(서비스 품질) 클래스를 설정합니다.

 

QoS 클래스설명설정 조건

Guaranteed 항상 일정한 리소스를 보장 requests == limits
Burstable 최소한의 리소스를 보장하지만, 추가 사용 가능 requests < limits
BestEffort 리소스 요청이 없으며, 우선순위가 낮음 requests, limits 없음

최고 성능을 보장하려면 Guaranteed을 사용하고, 유연한 리소스 사용을 원하면 Burstable을 선택해야 합니다.

 


 

3️⃣ 네트워크 성능 최적화

 

📌 Kubernetes 네트워크는 CNI(Container Network Interface)를 통해 관리되며, 기본 설정으로는 최적의 성능을 보장하지 않습니다.

 


 

✅ Step 1: CNI 플러그인 선택 (Calico, Cilium, Flannel 비교)

 

📌 네트워크 성능을 높이려면 적절한 CNI 플러그인을 선택해야 합니다.

 

CNI 플러그인장점사용 사례

Calico 네트워크 정책, 보안 기능 강화 기업 환경, 보안이 중요한 경우
Cilium eBPF 기반, 낮은 지연 시간 고성능 네트워크가 필요한 경우
Flannel 간단한 설정, 기본 네트워킹 제공 소규모 클러스터

고성능 네트워크가 필요하다면 Cilium, 기본적인 네트워크 관리가 필요하다면 Calico를 추천!

 


 

✅ Step 2: Calico를 사용하여 네트워크 성능 최적화

 

📌 Calico를 사용하여 Kubernetes 네트워크 정책을 설정하고 성능을 최적화할 수 있습니다.

 

📌 Calico 설치

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

 

📌 네트워크 정책 설정 (calico-network-policy.yaml)

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-app
  namespace: default
spec:
  selector: app == "myapp"  # 특정 애플리케이션만 허용
  ingress:
  - action: Allow
    protocol: TCP
    destination:
      ports: [80, 443]  # 80, 443 포트만 허용

 

📌 적용 명령어

kubectl apply -f calico-network-policy.yaml

네트워크 정책을 설정하여 불필요한 트래픽을 차단하고 성능을 최적화 가능!

 


 

4️⃣ 로깅 & 모니터링 최적화

 

📌 로깅 & 모니터링을 과도하게 설정하면 성능에 영향을 줄 수 있습니다.

📌 Loki + Fluentd를 사용하여 경량 로그 수집을 설정할 수 있습니다.

 


 

✅ Step 1: Fluentd + Loki 설정

 

📌 Helm을 사용하여 Loki & Fluentd 배포

helm repo add grafana https://grafana.github.io/helm-charts
helm install loki grafana/loki-stack --set promtail.enabled=true

 

📌 Fluentd 설정 (fluentd-config.yaml)

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-config
  namespace: logging
data:
  fluent.conf: |
    
      @type tail
      path /var/log/containers/*.log
      pos_file /var/log/fluentd.pos
      tag kubernetes.*
      
        @type json
      
    

    
      @type loki
      url http://loki.default.svc.cluster.local:3100
    

 

📌 적용 명령어

kubectl apply -f fluentd-config.yaml

불필요한 로깅을 방지하고 성능을 최적화 가능!

 


 

📌 결론: Kubernetes 클러스터 성능 최적화 요약

 

CPU & 메모리 요청(Requests) & 제한(Limits) 설정하여 리소스 사용량 최적화

CNI 플러그인(Calico, Cilium) 선택하여 네트워크 성능 향상

불필요한 로깅 줄이고 Fluentd + Loki를 활용한 경량 로그 관리

HPA & Cluster Autoscaler 활용하여 리소스를 자동으로 조절

 

🔥 성능 튜닝을 통해 Kubernetes 클러스터를 더욱 안정적으로 운영할 수 있습니다! 🚀

 

728x90