본문 바로가기
개발 이야기/Kubernetes

Kubernetes HPA 설정하기

by 농개 2024. 3. 30.
반응형

HPAHorizontal 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 사용률을 확인 할 수 있습니다.

    반응형