TIL

느린 Pod로 요청이 가지 않게 할 수 있을까?

하얀잔디 2026. 9. 7. 16:38

 

Kubernetes에서 여러 Pod를 운영하다 보면 특정 Pod만 CPU가 튀거나 응답이 느려지는 경우가 있음.

Pod A → 50ms
Pod B → 60ms
Pod C → 3초

기본 Kubernetes Service는 Pod C가 느리다고 해서 자동으로 해당 Pod를 제외해주지는 않음.

HPA를 사용하면 CPU 증가에 따라 Pod를 추가할 수 있지만, 느린 Pod를 직접 피하는 방식은 아님.

그래서 Service Mesh를 찾아봄.

 

 

Linkerd

 

Linkerd는 Pod에 Proxy를 붙여 서비스 간 통신을 관리함.

특히 Latency-aware Load Balancing을 통해 최근 응답시간이 빠른 Endpoint를 선호하도록 트래픽을 분산할 수 있음.

 

Pod A → 50ms
Pod B → 60ms
Pod C → 3초
              ↓
        Pod C 트래픽 감소

 

중요한 건 CPU를 직접 보고 Pod를 제외하는 것은 아니라는 것.

 

CPU가 높더라도 응답이 정상적이면 그대로 사용할 수 있고, CPU 부하 때문에 실제 응답시간이 느려졌다면 그 결과를 기반으로 트래픽이 조절되는 방식임.

 

Istio와 비교

 

Istio는 Envoy Proxy를 사용하고, Outlier Detection을 통해 5xx나 timeout 등이 반복되는 비정상 Endpoint를 일시적으로 트래픽 대상에서 제외할 수 있음.

 

Linkerd → latency 기반으로 빠른 Pod 선호
Istio   → error/timeout 기반으로 문제 Pod Ejection

결국

 

CPU 자체를 기준으로 Pod를 피하고 싶다면 Prometheus/cAdvisor + HPA 등의 영역이고,

실제로 느려진 Pod를 피하고 싶다면 Service Mesh를 고려할 수 있음.