DevOps/Kubernetes
[k8s] Resource + Autoscaler (CA, HPA) 개념 정리
Jen'_'
2022. 7. 18. 19:24
반응형
Resource
파드를 지정할 때, 컨테이너에 필요한 각 리소스의 양을 선택적으로 지정한다.
지정할 가장 일반적인 리소스는 CPU와 Memory가 있다.
Requests and Limits
Requests
- 스케줄러에서 Pod를 어떤 노드에 위치시킬 판단 근거가 된다.
- Pod가 Request량을 초과 하여 사용해도 Limit량을 넘지 않으면 문제는 없다. 다만 Node의 자원이 부족할 경우에는 Request량을 초과 한 Pod는 퇴거(Eviction)의 대상이 된다.
- CA, HPA에서 Pod를 확장 또는 축소시킬 기준 값이 된다.
Limits
- Pod는 limit이상의 자원을 사용할 수 없다.
- 컨테이너의 프로세스가 허용된 양보다 많은 메모리를 사용하려고 하면, 시스템 커널은 메모리 부족(out of memory, OOM) 오류와 함께 할당을 시도한 프로세스를 종료한다.
설정 예제
---
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- name: log-aggregator
image: images.my-company.example/log-aggregator:v6
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
설명
k8s의 Autoscaling은 2가지 형태로 제공된다.
- HPA(Horizontal Pod Autoscaler): Deployment 또는 ReplicaSet에서 Pod를 확장한다. K8S API resource와 controller로 구현되고 Conteroller manager는 각각의 HPA 정의에 지정된 메트릭에 대해 리소스 사용률을 쿼리 한다.
- CA(Cluster Autoscaler): 클러스터의 사용 가능한 자원과 Pod가 요청(request)하는 자원량을 비교하여 Node를 증가시키거나 감소시킨다.
HPA and CA Architecture
HPA(Horizontal Pod Autoscaler)
Deployment 또는 ReplicaSet에서 Pod를 확장한다. K8S API Resource와 Controller로 구현되고 Conteroller manager는 각각의 HPA 정의에 지정된 메트릭에 대해 리소스 사용률을 쿼리 한다.
설정 방법
1. metrics-server 설치
https://github.com/kubernetes-sigs/metrics-server
2. hpa 설정
- deployment 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: k8s.gcr.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
memory: 128Mi
requests:
cpu: 200m
memory: 64Mi
- hpa 생성
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 50
php-apache 레플리카의 개수를 1부터 10 사이로 autoscale 하고, 이에 대한 기준은 평균 CPU 사용량 50%, Memory 사용량 50%으로 유지하는 것이다.
CA(Cluster Autoscaler)
클러스터의 사용 가능한 자원과 Pod가 요청(request)하는 자원량을 비교하여 Node를 증가시키거나 감소시킨다.
자동 조절 방식
- 사용자가 요청한 Pod의 자원량보다 현재 Cluster의 자원이 부족한 경우 노드 증가
- 일정 시간 동안 특정 노드의 사용률이 저조한 경우 해당 노드 감소
- Cluster Autoscaler는 현재 사용 중인 자원 기반으로 동작하지 않음. 따라서 Pod의 부하가 아무리 높더라도 Request가 정의되어 있지 않으면 Node가 증가하지 않음.
설정 방법(EKS)
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/autoscaling.html
참고
https://itchain.wordpress.com/2018/05/16/kubernetes-resource-request-limit/
반응형