반응형
HPA는 Horizontal Pod Autoscaler를 뜻합니다.
워크로드에 따라 파드의 수평 확장/축소을 담당합니다.
최소 파드 수와 최대 파드 수를 설정하고, CPU 및 메모리의 사용량을 디플로이먼트에 기입하여야 합니다.
이번 포스팅에서는 간단한 예시를 통해 HPA 설정 방법을 정리합니다.
목차
1. HPA.yml 작성
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-server
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
minReplicas: 1
maxReplicas: 2
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
위와 같이 HPA.yml 을 작성해줬습니다.
scaleTargetRef에 HPA를 적용할 Deployment를 기입해줍니다.
minReplicas, maxReplicas를 설정해줍니다.
그리고 메트릭에 정보를 기입해줍니다.
저의 경우 평균 CPU 사용률을 80%로 유지하는 설정입니다.
2. Deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
spec:
# replicas: 1
template:
metadata:
name: api-server
spec:
containers:
- name: api-server
image: api-exam:0.0.2
ports:
- containerPort: 8081
env:
- name: SPRING_PROFILES_ACTIVE
value: dev
resources:
limits:
cpu: 500m
memory: 200M
requests:
cpu: 500m
memory: 200M
위와 같이 Deployment에도 resources를 기입해줘야합니다.
requests.cpu는 반드시 기입해줘야 동작합니다.
- cpu: 500m -> 0.5 cpu core를 의미함.
- cpu: "1" -> 1 cpu core
그리고 만약에 spec.replicas 설정이 있다면 지워줍니다.
HPA를 설정할 것이기 때문에 필요없습니다.
3. FailedGetResourceMetric 에러 발생 시
~ kubectl get hpa -n api
...(중략)
... failed to get cpu utilization: unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server is currently unable to handle the request (get pods.metrics.k8s.io)
위와 같이 에러가 뜰 수 있습니다.
이는 metrics-server가 설치되지 않아서 그렇습니다.
아래와 같이 minikube addon을 통해 활성화 해줍니다.
(minikube addons enable metrics-server 커맨트 실행)
~ minikube addons list | grep metric
| metrics-server | minikube | disable | Kubernetes
~ minikube addons enable metrics-server
💡 metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
▪ Using image registry.k8s.io/metrics-server/metrics-server:v0.6.4
🌟 'metrics-server' 애드온이 활성화되었습니다
4. HPA 동작 확인
~ kubectl get hpa -n api
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
dev-api-server Deployment/dev-api-server <unknown>/80% 1 2 1 16s
처음에 unknown이 뜨더군요.
조금 시간이 지난 뒤, 아래처럼 정상표시됨을 확인했습니다.
활성화 후 수집에 시간이 좀 걸리나봐요.😥
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
dev-api-server Deployment/dev-api-server 0%/80% 1 2 1 45m
5. TOP을 통해 리소스 사용률 확인
~ kubectl top po -n api
NAME CPU(cores) MEMORY(bytes)
dev-api-server-97db5bd9-cdhf2 3m 143Mi
위와 같이 top 명령어로 cpu, memory 사용률을 확인 할 수 있습니다.
반응형
'개발 이야기 > Kubernetes' 카테고리의 다른 글
Telepresence 사용해보기 (0) | 2024.04.03 |
---|---|
Kubernetes CronJob 실행 해보기 (0) | 2024.03.30 |
Docker Image를 Minikube 로드하기 (0) | 2024.03.24 |
ArgoCD를 통해서 Application 배포 (0) | 2024.03.24 |
Kubernetes, ArgoCD 설치 해보기(with Minikube) (0) | 2024.03.09 |