[쿠버네티스] CPU 점유율 메모리 사용량 확인, HPA 설정

2024. 2. 6. 20:38개발로그/쿠버네티스

반응형

쿠버네티스에서 사용하는 POD들의 CPU 점유율과 메모리 사용량을 확인 하는 방법과 Autoscaling을 위한 HPA 설정 방법을 정리 하였습니다.

 

POD CPU 점유율과 메모리 사용량 확인

현재 사용 중인 pod의 CPU 점유율과 메모리 사용량을 확인하는 명령은 아래와 같습니다.

  • CPU의 100m는 0.1 core를 의미 합니다.
  • 메모리의 116Mi는 116Mbytes를 의미 합니다.
kubectl top pods -n <name space>
C:\>kubectl top pods -n testx-dev
NAME                                             CPU(cores)   MEMORY(bytes)
tx-msa-device-service-dev-8496684c75-bzph2       208m         116Mi
tx-msa-fe-backend-service-dev-666555767d-r2mbp   3m           102Mi
tx-msa-frontend-dev-6ff6f8687b-cqfn5             4m           53Mi
tx-msa-logstash-84cd89fc7b-8wmjz                 16m          628Mi
tx-msa-payment-service-dev-6fff85957b-zw7sv      5m           242Mi
tx-msa-test-service-dev-8699bd9644-8svmk         99m          324Mi
tx-msa-test-service-dev-8699bd9644-k48w2         49m          312Mi
tx-msa-test-service-dev-8699bd9644-s2gpk         13m          321Mi
tx-msa-user-service-dev-5d45567968-nt89l         35m          246Mi

 

HPA(Horizontal Pod Autoscaler) 설정

HPA란

쿠버네티스에서 제공하는 자동 스케일링 시스템으로, 어플리케이션 부하에 따라 파드(Pod) 수를 자동으로 조절하는 기능입니다. PA는 CPU 사용량이나 메모리 사용량과 같은 메트릭을 기반으로 작동하며, 이를 통해 애플리케이션의 요구사항과 트래픽 변화에 유연하게 대응할 수 있도록 돕습니다.

 

HPA 설정 시, 최소 파드 수, 최대 파드 수, 그리고 목표 메트릭 값 등을 정의할 수 있습니다. 예를 들어, CPU 사용률이 목표치를 초과할 경우, HPA는 자동으로 파드의 수를 증가시켜 부하를 분산시키고, 반대로 사용률이 목표치 이하로 떨어지면 파드의 수를 줄여 자원을 효율적으로 사용할 수 있도록 조정합니다.

 

자세한 내용은 아래 링크 참고 하시기 바랍니다.

https://kaizen8501.tistory.com/480

 

 

HPA 설정 값을 확인 하기 위한 명령

아래 명령을 이용해서 네임스페이스의 Deployments에 설정된 HPA 값들을 확인 할 수 있습니다.

kubectl describe hpa -n <name space>

 

C:\Users\Administrator>kubectl describe hpa -n testx-dev
Name:                                                     tx-msa-device-service-dev
Namespace:                                                testx-dev
Labels:                                                   app.kubernetes.io/instance=helm-tx-msa-device-service-dev
                                                          app.kubernetes.io/managed-by=Helm
                                                          app.kubernetes.io/name=helm-tx-msa-device-manager
                                                          app.kubernetes.io/version=1.16.0
                                                          argocd.argoproj.io/instance=helm-tx-msa-device-service-dev
                                                          helm.sh/chart=helm-tx-msa-device-manager-0.1.0
Annotations:                                              <none>
CreationTimestamp:                                        Tue, 31 Oct 2023 13:42:13 +0900
Reference:                                                Deployment/tx-msa-device-service-dev
Metrics:                                                  ( current / target )
  resource memory on pods  (as a percentage of request):  32% (105512960) / 80%
Min replicas:                                             1
Max replicas:                                             5
Deployment pods:                                          1 current / 1 desired
Conditions:
  Type            Status  Reason              Message
  ----            ------  ------              -------
  AbleToScale     True    ReadyForNewScale    recommended size matches current size
  ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from memory resource utilization (percentage of request)
  ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:           <none>

 

 

HPA 설정 값을 수정한 후 배포 테스트

해당 Deployment들은 Helm 차트 기반으로 작성되어 있습니다. Helm 차트의 values.yaml 파일에서 resources와 autoscaling 부분을 아래와 같이 수정 하였습니다.

 

values.yaml 수정

  • request-memory를 819Mi로 설정
  • autoscaling-targetMemoryUtilizationPercentage를 80으로 설정

Describe 명령으로 확인 해 보면 아래와 같이 POD의 메모리를 10%(105,021,440)를 사용중이라고 나옵니다.

조금 이상한 건 requests에 설정한 memory는 819Mi 여서 10% 사용 중이면 819Kbytes 로 되어 있어야 할 거 같은데 1Gmi 기준으로 10%가 되는 것 같네요. 혹시 아시는 분은 댓글 달아 주세요.

 

resources: {
  requests: {
    cpu: 300m,
    memory: 819Mi
  }
}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

autoscaling:
  enabled: true
  minReplicas: 1
  maxReplicas: 5
  #targetCPUUtilizationPercentage: 80
  targetMemoryUtilizationPercentage: 80

 

C:\Users\Administrator>kubectl describe hpa -n testx-dev tx-msa-device-service-dev
Name:                                                     tx-msa-device-service-dev
Namespace:                                                testx-dev
Labels:                                                   app.kubernetes.io/instance=helm-tx-msa-device-service-dev
                                                          app.kubernetes.io/managed-by=Helm
                                                          app.kubernetes.io/name=helm-tx-msa-device-manager
                                                          app.kubernetes.io/version=1.16.0
                                                          argocd.argoproj.io/instance=helm-tx-msa-device-service-dev
                                                          helm.sh/chart=helm-tx-msa-device-manager-0.1.0
Annotations:                                              <none>
CreationTimestamp:                                        Tue, 31 Oct 2023 14:35:40 +0900
Reference:                                                Deployment/tx-msa-device-service-dev
Metrics:                                                  ( current / target )
  resource memory on pods  (as a percentage of request):  10% (105021440) / 80%
Min replicas:                                             1
Max replicas:                                             5
Deployment pods:                                          1 current / 1 desired
Conditions:
  Type            Status  Reason              Message
  ----            ------  ------              -------
  AbleToScale     True    ReadyForNewScale    recommended size matches current size
  ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from memory resource utilization (percentage of request)
  ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:           <none>

 

 

 

반응형