HPA(Horizontal Pod Autoscaler)
-
Horizontal Pod Autoscaler는 metric server를 통해 파드의 리소스를 감시하여 리소스가 부족한 경우 Controller의 replicas를 증가시켜 파드의 수를 늘린다.
-
위의 그림 처럼 Pod가 수평적으로 증가하는 것을 Scale Out, 수평적으로 감소하는 것을 Scale In 이라고 한다.
-
Pod를 증가시키기 때문에 기존의 트래픽이 분산되어 서비스를 더 안정적으로 유지할 수 있게 된다.
-
Replica의 수와 상관 없이 돌아갈 수 있는 Stateless 서비스에 적합하다.
-
트래픽이 급증하여 spike가 생기는 경우에 대응할 수 있다.
-
사용하는 매트릭과, 목표하는 매트릭을 계산하여 desire replica 수를 계산한다.
Terminal window desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )] -
Pod가 시작하고 얼마 되지 않았을 때는 적절한 메트릭 값이 나오지 않을 수 있으므로, HPA에는 시작한 지 30초 이상 된 포드부터 매트릭이 적용된다.
--horizontal-pod-autoscaler-initial-readiness-delay
옵션을 사용하여 이 값을 직접 설정할 수 있다. -
예시
apiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata:name: k8s-autoscalerspec:maxReplicas: 10minReplicas: 2scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: k8s-autoscalermetrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 60behavior:scaleDown:policies:- type: Podsvalue: 4periodSeconds: 60- type: Percentvalue: 10periodSeconds: 60
Container resource
- HorizontalPodAutoscaler API는 Pod 뿐만 아니라 각 컨테이너의 리소스도 스케일링의 조건으로 넣을 수 있도록 하는 설정을 제공한다.
...type: ContainerResourcecontainerResource: name: cpu container: application target: type: Utilization averageUtilization: 60...
Scaling policies
spec
의behavior
부분에 스케일링을 위한 정책을 설정할 수 있다.- 위에 정의된 policy부터 적용된다.
periodSeconds
는 특정 시간 안에 scale을 조정할 수 있는 최대, 최소값을 정의한다.- 아래 예시에서는 60초동안 최대 4개의 replica가 scale down 될 수 있고, 60초 동안 현재의 최대 10% 만큼 scale down될 수 있다.
...behavior: scaleDown: policies: - type: Pods value: 4 periodSeconds: 60 - type: Percent value: 10 periodSeconds: 60 scaleUp: stabilizationWindowSeconds: 0 # 메트릭들이 계속 변동하여 오차가 발생하는 것을 조정하기 위해 사용하는 옵션 policies: - type: Percent value: 100 periodSeconds: 15 - type: Pods value: 4 periodSeconds: 15 selectPolicy: Max...
VPA(Vertical Pod Autoscaler)
-
Vertical Pod Autoscaler는 파드의 리소스를 감시하여, 파드의 리소스가 부족한 경우 파드를 Restart하며 파드의 리소스 제한을 증가시킨다.
-
이처럼 파드의 리소스가 수직적으로 증가하는 것을 Scale Up, 감소하는 것을 Scale Down이라고 한다.
-
리소스 활용률을 최적화하고 비용을 절감할 수 있다.
-
컨테이너의 리소스 Request를 조정한다.
-
예시
apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata:name: k8s-autoscaler-vpaspec:targetRef:apiVersion: "apps/v1"kind: Deploymentname: k8s-autoscalerupdatePolicy:updateMode: "Auto"
여담
- HPA와 VPA는 보통 Kubernetes component에 있는 metric 서버가 제공하는 값을 받아 스케일링 여부를 결정하는데, 원한다면 다른 custom metric을 적용할 수 있다. (참고)
참고
관련글개념Disruption Budget개념Endpoints개념etcd개념K8s의 도커런타임 사용중단개념Kubeproxy개념NodePort와 ServicePort와 targetPort