훈훈훈
Kubernetes :: HPA(Horizontal Pod Autoscaler) 정리 본문
해당 내용은 공식문서, 쿠버네티스 인 액션 책을 참고 하였습니다.
HPA(Horizontal Pod Autoscaler)
- 파드를 수평적으로 오토스케일링함, Scale Out(파드 수 증가)
- 컨트롤러가 주기적으로 Metric을 수집 후, 조건에 부합하면 HPA 리소스에 설정되어 있는 레플리카 수 계산
Metric 수집 과정
- kubelet 자체에 내장된 cAdvisor 에이전트에서 실행되는 개별 컨테이너 및 노드 전체 리소스 사용 데이터 수집
- cAdvisor 에이전트로 부터 수집된 데이터를 바탕으로 전체 클러스터에 대한 리소스 연산은 Metirc Server 혹은 힙스터에서 진행
- HPA는 Metric Server 혹은 힙스터의 API 호출을 통해 메트릭 수집
* 최근에는 힙스터 보다는 Metirc Server 사용 선호
예제 코드
- Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-server-deployment
labels:
app: spring-server
spec:
replicas: 3
selector:
matchLabels:
app: spring-server
template:
metadata:
labels:
app: spring-server
spec:
restartPolicy: Always
containers:
- name: spring
image: test/test-exam:0.1
imagePullPolicy: Always
ports:
- containerPort: 8080
resource:
- request:
cpu: 100m
위 코드는 Spring 서버에 대한 디플로이먼트 템플릿이다.
초기 레플리카 수를 3으로 지정하였으며, 파드당 100밀리코어를 사용할 수 있게 하였다. (limit x)
- Horizontal Pod Autoscaler
apiVersion: apps/v1
kind: HorizontalPodAutoscaler
metadata:
name: spring-server-hpa
labels:
app: spring-server
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: spring-server-deployment
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 30
status:
currentMetrics: []
currentReplicas: 3
desiredReplicas: 0
위 코드를 보면 CPU 사용률을 30%로 설정하였으며, 최대(최소) 레플리카 수를 각각 5개, 1개로 설정하였다.
HPA 오브젝트는 클러스터 내 모든 파드의 CPU 사용률 메트릭을 수집 및 평균을 계산 후 30%를 초과하면 레플리카를 증가 시킬 것 이다.
위에서 설명한 것 이외에도 메모리 및 사용자 정의 메트릭(Custom Metric)을 수집하여 오토스케일링을 할 수 있다.
메모리의 경우 기본적으로 Resource Metric API로 제공되며, 위에서 작성한 코드에서 CPU를 Memory로 교체하면 바로 사용할 수 있다.
사용자 정의 메트릭의 경우 별도 메트릭을 정의해야하며, 많이 쓰이는 방법으로는 Prometheus adapter를 사용하여 API를 만드는 방법이 있다. 사용자 정의 메트릭의 경우 추후 다시 정리해보려고 한다.
사용자 정의 메트릭에 대한 자세한 설명은 아래 블로그 참고 바란다.
https://learnk8s.io/autoscaling-apps-kubernetes
'인프라 > Kubernetes' 카테고리의 다른 글
Kubernetes :: 외부 클라이언트 노출을 위한 Service 타입 정리 (0) | 2020.09.15 |
---|---|
Kubernetes :: Iiveness probe 정리 (0) | 2020.09.06 |
Kubernetes :: 로컬 환경에서 웹 서버 구축하기 (2) | 2020.07.06 |