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>
'개발로그 > 쿠버네티스' 카테고리의 다른 글
[쿠버네티스] Helm 차트의 Resource와 Autoscaling (0) | 2024.02.05 |
---|