2. targetCPUUtilizationPercentage 계산은 어떻게 되는가
targetCPUUtilizationPercentage 계산은 어떻게 되는가
targetCPUUtilizationPercentage
계산 방식:targetCPUUtilizationPercentage
는 현재 CPU 사용량이requests.cpu
에 대해 차지하는 백분율을 기반으로 계산
공식 문서의 공식 내용
공식 문서 인용: Horizontal Pod Autoscaler Walkthrough (Kubernetes 공식 문서)
desiredReplicas
공식 설명
desiredReplicas
공식 설명currentReplicas:
현재 실행 중인 파드의 .
예를 들어, 1개 파드로 시작하면
currentReplicas
는1
.
currentMetricValue:
현재 메트릭 값.
CPU 사용량을 기준으로 한다면 현재 CPU 사용량이 된다.
예를 들어, 현재 CPU 사용량이
80m
일 때currentMetricValue
는80m
.
desiredMetricValue:
목표 메트릭 값.
CPU 사용률을 기준으로 한다면
targetCPUUtilizationPercentage
에 해당하는 값이 된다.예를 들어,
targetCPUUtilizationPercentage
가75%
로 설정되었다면desiredMetricValue
는75%
.
공식 계산 예시
공식:
대입 값:
currentReplicas = 1
currentMetricValue = 80m
desiredMetricValue = 75%
계산 과정:
첫 번째 단계:
80m / 75%
80m
을75%
로 나누면80 / 0.75
.이때 퍼센트(
%
)는 소수점으로 환산되므로,75% = 0.75
.따라서
80m / 75% = 80 / 0.75 = 106.67
두 번째 단계:
ceil(1 * 106.67)
currentReplicas
가1
이므로1 * 106.67
은106.67
.ceil
함수를 사용해 이 값을 올림 처리.ceil(106.67) = 2
헷갈리니 그냥 75를 나눠도 된다
최종 결과:
최종적으로 필요한 파드 수는
2
개.
예시 상황
Initial Setup:
requests.cpu
: 100mtargetCPUUtilizationPercentage
: 75%Initial Pod Count: 3
Initial CPU Usage: 240m (80m * 3)
CPU 사용률 계산:
현재 CPU 사용률:
(240m / (100m * 3)) * 100% = 80%
목표 사용률(
targetCPUUtilizationPercentage
): 75%
필요한 파드 수 계산:
따라서, HPA는 파드 수를 4개로 늘린다.
파드 수 감소 시나리오
Step 1: CPU 사용량이 감소해 현재 CPU 사용률이 40%로 떨어졌다고 가정.
파드 수 감소 계산 공식 적용:
현재 CPU 사용률: 40%
targetCPUUtilizationPercentage
: 75%
결과:
HPA는 파드 수를 4개에서 3개로 줄인다.
Step 2: CPU 사용량이 더 감소해 현재 CPU 사용률이 20%로 떨어졌다고 가정.
파드 수 감소 계산 공식 적용:
현재 CPU 사용률: 20%
targetCPUUtilizationPercentage
: 75%
결과:
HPA는 파드 수를 3개에서 1개로 줄입니다.
파드 수 감소 시나리오 고려사항
Cool-down 기간:
Pod 수를 줄이거나 늘릴 때 Cool-down 기간이 필요할 수 있다.
Cool-down 기간을 통해 스케일링 동작이 빈번하게 발생하는 것을 방지할 수 있다.
최소 파드 수:
minReplicas
값은 파드 수가 설정된 최소 값 이하로 줄어들지 않도록 보장한다.
운영 중지 파드 결정:
Pod 수를 줄이는 경우 어느 파드가 중지될지 결정해야 한다.
Kubernetes는 파드의 라이프사이클 상태, 사용 리소스 등을 기반으로 파드 종료를 결정한다.
ceil
함수를 사용해 결과를 올림 처리하여 최종적으로 2개의 파드를 요구한다.ceil
은 수학 함수로, 특정 숫자를 올림하여 정수로 반환하는 함수이다. 이 함수를 사용하여 HPA의 파드 수를 계산할 때 최종적으로 필요한 파드 수를 정수로 결정한다.ceil 함수 설명
ceil
함수는 주어진 소수점 숫자를 올림하여 정수로 반환하는 수학 함수. 이는 특정 수가 소수점 이하 값을 가질 때, 그 수보다 크거나 같은 가장 작은 정수를 반환한다.예를 들어,
ceil(1.0667)
은2
를 반환한다.1.0667
은 소수점 이하 값이 존재하므로, 올림 처리를 위해 가장 작은 정수를 찾는다.1.0667
보다 크거나 같은 가장 작은 정수는2
.
ceil 함수의 역할:
HPA에서 파드 수를 계산할 때 소수점이 발생할 수 있으므로 이를 올림하여 최종 파드 수를 정수로 결정한다.
예시
그래서 resource.request.cpu가 없으면 hpa resource가 ns에 배포되지 않는 것 같다
currentMetricValue와 requests의 관계
currentMetricValue
는requests
와 직접적인 관계를 갖지는 않지만, 현재 CPU 사용량을requests
값에 대한 백분율로 비교해 계산된다.
HPA 리소스가 생성되지 않는 이유
HPA는 CPU 또는 메모리 requests가 지정되지 않은 경우 작동하지 않을 수 있다.
HPA는
resources.requests.cpu
나resources.requests.memory
를 기준으로 계산하기 때문이다.만약
resources
섹션이 비어있거나 설정되어 있지 않다면 HPA는currentMetricValue
를 계산할 수 없어 리소스가 생성되지 않는다.
공식 문서의 관련 내용은 다음과 같다:
The Horizontal Pod Autoscaler automatically scales the number of pods in a replication controller, deployment or replica set based on observed CPU utilization (or, with custom metrics support, on some other application-provided metrics).
CPU 또는 메모리
requests
의 필요성:HPA가 제대로 작동하려면
requests.cpu
또는requests.memory
를 설정해야 한다.requests
값이 없으면 HPA는 리소스 사용률을 계산할 수 없다.
이 문제도 해결되고 나니 hpa가 배포되었다. 근데 k get top pods
로 리소스를 봤는데
NAME CPU(cores) MEMORY(bytes)
staging-7bddbc6d7-bw87t 1m 108Mi
staging-7bddbc6d7-l4tpw 1m 109Mi staging-7bddbc6d7-lnnqf 1m 106Mi
이렇게 cpu가 1m ( 0.001 코어 ) 밀리코어 가 잡혀있었다
내가 예상했던 건 resources.requests.cpu
에 명시한 cpu를 할당하고 시작하는 줄 알았다
Last updated