Search

HPA

Metric Server

k8s 클러스터 리소스 사용량 데이터를 집계하는 역할
kubelet에서 리소스 메트릭 (예. 컨테이너의 CPU 및 메모리 메트릭)을 수집하고 이를 Metrics API를 통해 apiserver에 노출하여 Horizontal Pod Autoscaler 및 Vertical Pod Autoscaler에서 활용
클러스터 내에 Deployment 형태로 설치
Metric Server Install
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Shell
복사

Horizontal Pod Autoscaler (HPA)

Deployment / Replicaset의 레플리카 수를 CPU / 메모리 부하 등에 따라 자동으로 스케일 해주는 오브젝트
Pod의 Resource Requests를 기준으로 동작
metric server에서 가져온 각 파드의 1분 평균 값
Horizontal Pod Autoscaler의 기준
cpu (resource)
memory (resource)
packets-per-second (pod)
request-per-second (ingress)
Horizontal Pod Autoscaler와 Cluster Autoscaler의 상호작용
컨테이너(Pod)의 로드가 증가하면 HPA는 우선 클러스터에 충분한 공간이 있든 없든 새 replica를 생성
리소스가 충분하지 않은 경우 CA는 HPA에서 생성한 Pod가 실행될 노드를 새로 기동
반대로 로드가 감소되면 HPA는 일부 replica를 삭제하고, 결과적으로 활용되지 않는 노드가 생기면 CA가 이러한 노드를 종료
Deployment 딴에서 CPU 요청과 제한을 모두 설정하여 리소스 사용량을 명확히 해야함.
# 예시 yaml 파일 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: dev-ns spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 resources: requests: cpu: "100m" limits: cpu: "200m"
YAML
복사
Basic
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: <HPA Name> namespace: <Namespace> spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: <Deployment Name> minReplicas: <Number> maxReplicas: <Number> metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: <Number>
YAML
복사
Segmentation
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: <HPA Name> namespace: <Namespace> spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: <Deployment Name> minReplicas: <Number> maxReplicas: <Number> behavior: scaleUp: stabilizationWindowSeconds: <Number> policies: - type: Pods value: <Number> periodSeconds: <Number> scaleDown: stabilizationWindowSeconds: 1<Number> policies: - type: Pods value: <Number> periodSeconds: <Number> metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: <Number> - type: Resource resource: name: memory target: type: Utilization averageValue: <Number>Mi
YAML
복사
kubectl apply -f hpa.yaml
Shell
복사