본문 바로가기

About/Kubernetes

[k8s] 쿠버네티스의 Autoscaler (HPA, VPA, CA 개념)

HPA(Horizontal Pod Autoscaler)

Pod Scale out(HPA)

Horizontal Pod Autoscaler는 파드의 리소스를 감시하여, 리소스가 부족한 경우 Controller의 replicas를 증가시켜, 파드의 수를 늘리도록 합니다. 위의 그림 처럼 Pod가 수평적으로 증가하는 것을 Scale Out, 수평적으로 감소하는 것을 Scale In 이라고 합니다. 파드가 증가하였기 때문에 기존의 트래픽이 분산되어 서비스를 더 안정적으로 유지할 수 있게 합니다.

HPA는 다음과 같은 경우에 사용이 권장됩니다.

- 기동이 빠르게 되는 App
파드의 장애가 났을 때 대응하기 위한 용도로 사용되기 때문에 파드의 생성이 빠르게 되어야 합니다. 따라서 기동이 빠르게 되는 애플리케이션에 더 적합합니다.

- Stateless App
새로운 파드를 생성할 때 Stateful 애플리케이션과 같이 Master-slave의 역할이 정해져있다면 어떤 역할의 파드를 생성할지 판단을 할 수 없습니다. 따라서 단순히 양적인 증가를 해도 상관이 없는 Stateless App에 더 적합합니다.
Stateful 애플리케이션은 다음 설명할 VPA(Vertical Pod Autoscaler)를 이용하여 장애 대응을 할 수 있습니다.

VPA(Vertical Pod Autoscaler)

Vertical Pod Autoscaler

Vertical Pod Autoscaler는 파드의 리소스를 감시하여, 파드의 리소스가 부족한 경우 파드를 Restart하며 파드의 리소스를 증가시킵니다. 이처럼 파드의 리소스가 수직적으로 증가하는 것을 Scale Up, 감소하는 것을 Scale Down이라고 합니다.

따라서 VPA는 다음과 같은 경우에 사용합니다.

- Stateful App
각각 파드를 Restart하고, 자원의 성능만 좋아지기 때문에 각각 파드의 역할은 유지됩니다. 따라서 Stateful App에 적합합니다.

단, 한 Controller에 HPA와 함께 사용할 수 없습니다.

CA(Cluster Autoscaler)

Cluster Autoscaler

Cluster Autoscaler는 워커 노드의 자원이 모두 소모된 경우 자원이 더 필요하다고 판단하면 새로운 클러스터를 생성하고, 더 이상 새로운 자원이 필요하지 않게되면 생성된 클러스터를 삭제합니다. 새로운 클러스터를 생성해야하는 경우 기존에 설정한 Cloud Provider에게 요청하여 새로운 노드를 생성하고, 다음 생성할 파드가 해당 노드에도 할당되게 됩니다.


참고