[Cloud]/[Kubernetes]

[Kubernetes] HPA, VPC, CA

마린독 2024. 9. 3. 00:20
728x90

 

쿠버네티스에는 오토스케일링 기능을 수행할 때, HPA와 VPC, CA가 있습니다. HPA는 노드 속 Pod의 수를 조절하고, CA는 노드의 수를 조절합니다.

 

 

1. HPA(Horizontal Pod Autoscaler)

 

 

HPA(horizontal pod autoscaler)는 노드(EC2 인스턴스) 속 특정 응용 프로그램을 실행하는 파드(pod)가 사용하는 컴퓨팅 자원의 사용량이 지정한 임계값을 넘어서면(ex. CPU 사용률 50% 이상) 새로운 파드를 생성하라고 Deployment에 요청을 주어 새로운 파드를 생성하거나 제거하도록 돕습니다. 그렇게 파드가 하나에서 둘이 되면 워크로드가 분산되어 부하를 줄어들고, 부하가 다시 줄어들면 자동으로 파드 수를 줄여 원래대로 돌아오게 합니다.
 


 
쉽게 말해 노드 속 파드들의 수를 늘릴지 줄일지 판단하는 역할을 하는 것이 HPA입니다. 

 

 

1) stateless 애플리케이션

 

 

HPA는 stateless app이 적합합니다.

 

상태 정보를 유지하지 않는 애플리케이션입니다. 각 요청이 독립적으로 처리되며, 이전 요청의 정보가 다음 요청에 영향을 미치지 않습니다. 

 

 

상태 정보를 저장하지 않는다고 해서 세션 정보를 전혀 사용할 수 없다는 뜻은 아닙니다. 로그인 정보 같은 인증 내용은 JWT(Json Web Token), Redis를 사용하여 세션 정보를 관리하고, 중요한 정보는 MySQL 같은 DB를 사용합니다. JWT에 사용자 ID, 권한 등의 정보가 암호화되어 있어 클라이언트는 이 토큰을 저장하고, 서버는 요청마다 JWT를 검증하여 사용자를 인증합니다.  

 

 

stateless 앱은 상태 정보를 저장하지 않고, 모두 같은 역할을 수행하기 때문에 새로운 인스턴스를 쉽게 추가하거나 제거할 수 있습니다. 그래서 HPA가 metric 서버로 부터 리소스 사용량을 모니터링해 pod 수를 조절할 때, 새 pod를 생성하거나 기존 pod를 제거하는 과정이 단순해집니다.

 

 

또한, 모든 파드가 동일하기 때문에 로드 밸런싱의 단순성도 높아집니다.

 

 

HPA

 

 

2. VPA(Vertical Pod Autoscaler)

 

 

VPA는 쿠버네티스에서 사용되는 리소스 관리 도구인데, HPA와 다르게 Pod의 CPU 및 메모리 등의 리소스 사용량을 모니터링하고 할당량을 조정합니다. 

 

 

HPA가 Pod의 수를 늘리거나 줄이는 등의 조정을 했다면, VPA는 Pod의 성능을 늘리거나 줄이는 역할을 합니다. 그래서 VPA는 deployment와 통신하는 대신 recommander가 있습니다. 

 

 

VPA Recommender는 metrics Server로 부터 데이터를 받아 부하에 따른 최적의 리소스 요청량을 추천합니다. VPA Controller가 recommander의 추천으로 API Server에 리소스 변경을 요청한 후 kubelet이 실제 리소스 조정을 적용합니다.

 

 

API Server는 필요한 경우 조정 과정에서 Pod 재시작도 진행합니다.

 

 

*Recommender -> VPA Controller -> API Server -> kubelet

 

 

HPA와 함께 사용할 때는 VPA는 Pod 재시작도 가능하므로 서비스 중단이 발생할 수도 있어 조심해야 합니다.

 

 

VPA, HPA

 

 

VPA는 Pod의 성능을 수직적으로 높이고, HPA는 성능을 높이지 않고 새로운 Pod를 생성합니다.

 

 

3. CA(Cluster Autoscaler)

 

 

HPA, VPA는 노드 속 Pod의 수를 조정하지만, CA는 클러스터의 노드 수를 자동으로 조정하는 컴포넌트입니다. 

 

 

리소스가 부족할 때 노드를 추가하고, 사용률이 낮을 때 노드를 제거합니다. 

 

 

클러스터의 상태를 지속적으로 모니터링하며, 파드가 스케줄링되지 못하는 상황을 감지합니다. 파드가 위치할 적절한 노드가 없는 경우 즉, 기존 노드의 리소스 자원이 부족할 때 노드의 수를 늘려 파드를 배치함으로서 부하를 이겨냅니다. 서로 다른 노드에 있는 파드일지라도 로드밸런서가 일괄되게 트래픽을 분산하며, 부하가 줄어들어 더 이상 많은 노드가 필요하지 않는 경우 노드의 수를 자동으로 줄여줍니다.

 

 

728x90