요청(Request) 및 제한(Limit)
Request: 컨테이너가 사용하는 최소한의 리소스 요구 사항을 말하며, 컨테이너가 스케쥴링될 때 리소스 할당의 판단 기준이 됩니다. 노드에서 사용 가능한 리소스 양 >= 컨테이너 리소스 요청 수량인 경우에만 컨테이너를 노드에 스케쥴링할 수 있습니다. 그러나 Request 매개변수는 컨테이너에서 사용할 수 있는 리소스의 최대 값을 제한하지 않습니다.
Limit: 컨테이너에서 사용할 수 있는 리소스의 최대 값입니다.
주의:
Limit 및 Request 매개변수에 대한 자세한 내용을 보려면 여기를 클릭하십시오. CPU 제한 설명
CPU 리소스의 경우 CPU 요청 및 CPU 제한에 대한 리소스 양을 설정할 수 있으며, 이는 코어(U) 단위이며 소수일 수 있습니다.
주의:
CPU Request는 스케쥴링의 기초로 사용됩니다. 컨테이너가 생성되면 ‘allocated CPU’ 리소스라고 하는 노드에서 CPU 리소스가 컨테이너에 할당됩니다.
CPU Limit은 컨테이너 CPU 리소스의 최대 값입니다. 설정하지 않으면 제한이 없습니다(CPU Limit >= CPU Request).
메모리 제한 설명
메모리 리소스의 경우 컨테이너에 사용할 수 있는 최대 메모리 양만 제한할 수 있습니다. MiB 단위이며 소수일 수 있습니다.
주의:
메모리 Request는 스케쥴링의 기초로 사용됩니다. 컨테이너가 생성되면 ‘allocated memory’ 리소스라고 하는 노드에서 메모리 리소스가 컨테이너에 할당됩니다.
메모리 리소스는 확장할 수 없습니다. 노드의 모든 컨테이너가 사용하는 메모리 리소스가 제한을 초과하면 OOM(Out Of Memory, 즉 메모리 오버플로)의 위험이 있습니다. 따라서 Limit가 설정되지 않은 경우 기본적으로 컨테이너의 정상적인 작동을 보장하기 위해 Limit = Request입니다.
CPU 사용량 및 CPU 사용률
CPU 사용량은 실제로 사용된 물리적 CPU 코어 수를 나타내는 절대값입니다. CPU 리소스 요청 및 CPU 리소스 제한은 모두 CPU 사용량을 기준으로 판단됩니다.
CPU 사용률은 단일 CPU 코어(또는 노드의 총 CPU 코어)에 대한 CPU 사용률을 나타내는 상대 값입니다.
사용 예시
다음은 Request와 Limit의 역할을 보여주는 간단한 예입니다. 테스트 클러스터는 1개의 4U4G 노드, 2개의 배치된 Pod( Pod1 및 Pod2 )로 설정되며 각 Pod의 리소스는 (CPU Request, CPU Limit, Memory Request, Memory Limit) = (1U, 2U, 1G, 1G)로 설정됩니다. (1.0G = 1000MiB)
노드의 CPU 및 메모리 리소스 사용량은 아래 그림과 같습니다.
할당된 CPU 리소스: 1U(Pod1용) + 1U(Pod2용) = 2U이고 할당 가능한 나머지 CPU 리소스는 2U입니다.
할당된 메모리 자원: 1G(Pod1의 경우) + 1G(Pod2의 경우) = 2G이고 할당 가능한 나머지 메모리 자원은 2G입니다.
따라서 ( CPU Request, Memory Request ) = ( 2U, 2G ) Pod 또는 2개 이상 (CPU Request, Memory Request) = (1U, 1G) Pod를 노드에 배치할 수 있습니다. 리소스 제한 측면에서 Pod1과 Pod2가 사용하는 리소스의 상한선은 ( 2U, 1G )이며, 이는 유휴 리소스가 있는 경우 Pod에서 사용할 수 있는 최대 CPU 리소스가 2U임을 의미합니다.
권장 서비스 리소스 제한
TKE는 현재 컨테이너 이미지의 기록 로드를 기반으로 Request 및 Limit 값을 권장합니다. 권장 값을 사용하면 컨테이너가 더 원활하게 실행되고 예외 가능성이 크게 줄어듭니다.
Recommendation algorithm:
알고리즘은 먼저 지난 7일 동안 현재 컨테이너 이미지에서 분당 로드 값을 가져온 다음 95번째 백분위수 값을 사용하여 Limit의 절반인 권장 Request를 결정합니다.
Request = Percentile(실제 부하[7d],0.95)
Limit = Request * 2
현재 샘플 크기(실제 로드)가 권장 사항 계산의 수량 요구 사항을 충족하지 않는 경우 알고리즘은 그에 따라 샘플 값 범위를 확장하고 다시 계산을 시도합니다. 예를 들어 이미지 tag, namespace 및 serviceName과 같은 필터 기준을 제거한 후 다시 시도합니다. 여러 계산 후에 유효한 값을 얻지 못하면 권장 값은 공백이 됩니다.
Blank recommended values:
정상적인 사용 중에는 다음과 같은 이유로 인해 일부 값에 대한 권장 사항이 없음을 알 수 있습니다.
1. 현재 데이터가 계산 요구 사항을 충족하지 않는 경우. 최소 1440개의 샘플(실제 부하), 즉 하루의 데이터가 있어야 합니다.
2. 권장 값이 현재 컨테이너에 대해 이미 설정된 Request 또는 Limit보다 작은 경우.
주의:
1. 권장 값은 과거 부하를 기준으로 계산되기 때문에 원칙적으로 컨테이너 이미지가 실제 비즈니스를 오래 실행할수록 권장 값이 정확해집니다.
2. 권장 값을 사용하여 서비스를 생성할 경우 클러스터 리소스가 부족하여 컨테이너 스케쥴링이 실패될 수 있습니다. 서비스를 저장할 때 현재 클러스터에 남아 있는 리소스를 주의 깊게 확인해야 합니다.
3. 권장 값은 참고용입니다. 실제 비즈니스 요구 사항에 따라 조정하시기 바랍니다.