24.8. 시나리오 예
Operator:
- 메모리 용량이 10Gi인 노드가 있습니다.
- 커널, 노드 및 기타 데몬과 같은 시스템 데몬에 대해 10%의 메모리 용량을 예약하려고 합니다.
- 시스템 OOM의 스래싱 및 발생 수준을 줄이기 위해 95% 메모리 사용률에서 Pod를 제거하려고 합니다.
이 구성에서 암시적으로는 system-reserved
에 제거 임계값에서 적용되는 메모리 양이 포함되어야 한다는 이해가 있습니다.
해당 용량에 도달하기 위해 일부 포드는 요청보다 많은 것을 사용하거나 시스템에서 1Gi 이상을 사용하고 있습니다.
노드에 10Gi 용량이 있고 system-reserved
설정을 사용하여 시스템 데몬에 대해 해당 용량의 10%를 예약하려면 다음 계산을 수행합니다.
capacity = 10 Gi system-reserved = 10 Gi * .1 = 1 Gi
할당 가능한 리소스의 양은 다음과 같습니다.
allocatable = capacity - system-reserved = 9 Gi
기본적으로 스케줄러는 9Gi의 메모리를 요청하는 Pod를 해당 노드에 예약합니다.
노드에서 사용 가능한 메모리가 30초 동안 10% 미만인 것을 관찰하거나 용량의 5% 미만으로 떨어지는 즉시 제거를 트리거하도록 제거를 활성화하려면 스케줄러가 할당 가능을 8Gi로 평가해야 합니다. 따라서 시스템 예약이 더 큰 제거 임계값에 적용되는지 확인합니다.
capacity = 10 Gi eviction-threshold = 10 Gi * .1 = 1 Gi system-reserved = (10Gi * .1) + eviction-threshold = 2 Gi allocatable = capacity - system-reserved = 8 Gi
적절한 노드 구성 맵에 다음을 추가합니다.
kubeletArguments: system-reserved: - "memory=2Gi" eviction-hard: - "memory.available<.5Gi" eviction-soft: - "memory.available<1Gi" eviction-soft-grace-period: - "memory.available=30s"
이 구성을 사용하면 스케줄러에서 Pod를 노드에 배치하지 않고 즉시 메모리 부족을 줄이고 제거를 트리거합니다. 이 구성에서는 해당 포드가 구성된 요청보다 적게 사용한다고 가정합니다.