11.3. 최적의 노드 리소스 사용을 나타내는 메트릭 식별
노드 메트릭 대시보드는 중요 , 이상치 , 평균 기간 , 작업 수의 네 가지 범주로 구성됩니다. 중요 범주의 메트릭은 최적의 노드 리소스 사용량을 나타내는 데 도움이 됩니다. 이러한 측정 항목에는 다음이 포함됩니다.
- 지난 하루 동안 OOM 킬이 가장 많았던 상위 3개 컨테이너
- 지난 1시간 동안 이미지 풀링 실패율
- 시스템 예약 메모리 사용률이 80% 이상인 노드
- Kubelet 시스템이 예약한 메모리 사용률이 50% 이상인 노드
- CRI-O 시스템이 예약한 메모리 사용률이 50% 이상인 노드
- 시스템 예약 CPU 사용률이 80% 이상인 노드
- Kubelet 시스템이 예약된 노드의 CPU 사용률이 50% 이상입니다.
- CRI-O 시스템이 예약된 노드의 CPU 사용률이 50% 이상입니다.
11.3.1. 지난 하루 동안 OOM 킬이 가장 많았던 상위 3개 컨테이너 링크 복사링크가 클립보드에 복사되었습니다!
지난 하루 동안 가장 많은 OOM 종료가 발생한 상위 3개 컨테이너 쿼리는 전날 가장 많은 OOM(메모리 부족) 종료가 발생한 상위 3개 컨테이너에 대한 세부 정보를 가져옵니다.
기본 쿼리 예시
topk(3, sum(increase(container_runtime_crio_containers_oom_count_total[1d])) by (name))
topk(3, sum(increase(container_runtime_crio_containers_oom_count_total[1d])) by (name))
OOM kill은 메모리가 부족하여 시스템이 일부 프로세스를 종료하도록 강제합니다. 빈번한 OOM 킬은 노드의 기능을 방해할 뿐만 아니라 전체 Kubernetes 생태계에도 영향을 미칠 수 있습니다. OOM 종료가 자주 발생하는 컨테이너는 필요 이상으로 메모리를 사용하고 있을 수 있으며, 이로 인해 시스템이 불안정해질 수 있습니다.
이 메트릭을 사용하면 OOM 종료가 자주 발생하는 컨테이너를 식별하고 이러한 컨테이너가 과도한 양의 메모리를 사용하는 이유를 조사할 수 있습니다. 필요한 경우 리소스 할당을 조정하고 메모리 사용량에 따라 컨테이너 크기를 조정하는 것을 고려하세요. 또한 이상치 , 평균 기간 , 작업 수 범주에서 메트릭을 검토하여 노드의 상태와 안정성에 대한 추가적인 통찰력을 얻을 수 있습니다.
11.3.2. 지난 1시간 동안 이미지 풀링 실패율 링크 복사링크가 클립보드에 복사되었습니다!
지난 1시간 동안의 이미지 풀에 대한 실패율은 실패한 이미지 풀의 총 수를 성공한 이미지 풀과 실패한 이미지 풀의 합계로 나누어 실패 비율을 제공합니다.
기본 쿼리 예시
rate(container_runtime_crio_image_pulls_failure_total[1h]) / (rate(container_runtime_crio_image_pulls_success_total[1h]) + rate(container_runtime_crio_image_pulls_failure_total[1h]))
rate(container_runtime_crio_image_pulls_failure_total[1h]) / (rate(container_runtime_crio_image_pulls_success_total[1h]) + rate(container_runtime_crio_image_pulls_failure_total[1h]))
이미지 풀의 실패율을 이해하는 것은 노드의 상태를 유지하는 데 매우 중요합니다. 높은 실패율은 네트워킹 문제, 스토리지 문제, 구성 오류 또는 포드 밀도와 새로운 컨테이너 배포를 방해할 수 있는 기타 문제를 나타낼 수 있습니다.
이 쿼리의 결과가 높으면 네트워크 연결, 원격 저장소의 가용성, 노드 스토리지, 이미지 참조의 정확성 등의 가능한 원인을 조사하세요. 또한 이상치 , 평균 기간 , 작업 수 범주에서 측정 항목을 검토하여 추가적인 통찰력을 얻을 수 있습니다.
11.3.3. 시스템 예약 메모리 사용률이 80% 이상인 노드 링크 복사링크가 클립보드에 복사되었습니다!
시스템 예약 메모리 사용률이 80% 이상인 노드 쿼리는 각 노드에서 사용되는 시스템 예약 메모리의 백분율을 계산합니다. 계산은 전체 상주 세트 크기(RSS)를 할당 가능한 메모리에서 뺀 노드의 총 메모리 용량으로 나눕니다. RSS는 프로세스가 차지하는 시스템 메모리의 일부로, 주 메모리(RAM)에 보관됩니다. 결과 값이 80% 임계값과 같거나 초과하면 노드에 플래그가 지정됩니다.
기본 쿼리 예시
sum by (node) (container_memory_rss{id="/system.slice"}) / sum by (node) (kube_node_status_capacity{resource="memory"} - kube_node_status_allocatable{resource="memory"}) * 100 >= 80
sum by (node) (container_memory_rss{id="/system.slice"}) / sum by (node) (kube_node_status_capacity{resource="memory"} - kube_node_status_allocatable{resource="memory"}) * 100 >= 80
시스템 예약 메모리는 시스템 데몬과 Kubernetes 시스템 데몬을 실행하는 데 사용되므로 Kubernetes 노드에 매우 중요합니다. 시스템에서 예약된 메모리 사용률이 80%를 초과하는 경우 시스템과 Kubernetes 데몬이 너무 많은 메모리를 사용하고 있음을 나타내며, 실행 중인 Pod의 성능에 영향을 줄 수 있는 노드 불안정성을 나타낼 수 있습니다. 과도한 메모리 소비는 메모리 확보를 위해 중요한 시스템 프로세스를 종료시킬 수 있는 OOM(메모리 부족) 킬러를 발생시킬 수 있습니다.
이 메트릭에 의해 노드에 플래그가 지정되면 과도한 메모리를 사용하는 시스템이나 Kubernetes 프로세스를 식별하고 상황을 완화하기 위한 적절한 조치를 취합니다. 이러한 작업에는 중요하지 않은 프로세스를 축소하고, 메모리 사용량을 줄이기 위해 프로그램 구성을 최적화하거나, 노드 시스템을 메모리 용량이 더 큰 하드웨어로 업그레이드하는 것이 포함될 수 있습니다. 또한 이상치 , 평균 기간 , 작업 수 범주에서 메트릭을 검토하여 노드 성능에 대한 추가적인 통찰력을 얻을 수 있습니다.
11.3.4. Kubelet 시스템이 예약한 메모리 사용률이 50% 이상인 노드 링크 복사링크가 클립보드에 복사되었습니다!
Kubelet 시스템의 예약된 메모리 사용률이 50%를 초과하는 노드 쿼리는 Kubelet 시스템의 예약된 메모리 사용률이 50%를 초과하는 노드를 나타냅니다. 이 쿼리는 Kubelet 프로세스 자체가 노드에서 사용하는 메모리를 조사합니다.
기본 쿼리 예시
sum by (node) (container_memory_rss{id="/system.slice/kubelet.service"}) / sum by (node) (kube_node_status_capacity{resource="memory"} - kube_node_status_allocatable{resource="memory"}) * 100 >= 50
sum by (node) (container_memory_rss{id="/system.slice/kubelet.service"}) / sum by (node) (kube_node_status_capacity{resource="memory"} - kube_node_status_allocatable{resource="memory"}) * 100 >= 50
이 쿼리는 노드 작업의 안정성과 효율성에 영향을 줄 수 있는 노드의 메모리 부족 상황을 식별하는 데 도움이 됩니다. Kubelet 메모리 사용률이 시스템 예약 메모리의 50%를 지속적으로 초과하는 경우, 시스템 예약 설정이 올바르게 구성되지 않았으며 노드가 불안정해질 위험이 높다는 것을 나타냅니다.
이 지표가 강조 표시되면 구성 정책을 검토하고 Kubelet에 대한 시스템 예약 설정이나 리소스 제한 설정을 조정하는 것을 고려하세요. 또한 Kubelet 메모리 사용률이 지속적으로 전체 예약된 시스템 메모리의 절반을 초과하는 경우 이상치 , 평균 기간 및 작업 수 범주에서 메트릭을 검사하여 더 정확한 진단을 위한 추가 정보를 얻으세요.
11.3.5. CRI-O 시스템이 예약한 메모리 사용률이 50% 이상인 노드 링크 복사링크가 클립보드에 복사되었습니다!
CRI-O 시스템 예약 메모리 사용률이 50% 이상인 노드 쿼리는 CRI-O 시스템에 예약된 사용 메모리 비율이 50% 이상인 모든 노드를 계산합니다. 이 경우 메모리 사용량은 RSS(Resident Set Size)에 의해 정의됩니다. RSS는 CRI-O 시스템 메모리 중 RAM에 보관된 부분입니다.
기본 쿼리 예시
sum by (node) (container_memory_rss{id="/system.slice/crio.service"}) / sum by (node) (kube_node_status_capacity{resource="memory"} - kube_node_status_allocatable{resource="memory"}) * 100 >= 50
sum by (node) (container_memory_rss{id="/system.slice/crio.service"}) / sum by (node) (kube_node_status_capacity{resource="memory"} - kube_node_status_allocatable{resource="memory"}) * 100 >= 50
이 쿼리는 각 노드에서 CRI-O 시스템에 예약된 메모리 상태를 모니터링하는 데 도움이 됩니다. 높은 활용도는 사용 가능한 리소스가 부족하고 성능 문제가 발생할 가능성이 있음을 나타냅니다. CRI-O 시스템에 예약된 메모리가 권장 한도인 50%를 초과하는 경우, 노드에서 CRI-O가 시스템 예약 메모리의 절반을 사용하고 있음을 나타냅니다.
메모리 할당과 사용량을 확인하고, 노드 불안정성을 방지하기 위해 메모리 리소스를 이동하거나 늘려야 하는지 평가합니다. 또한 이상치 , 평균 기간 , 작업 수 범주에서 측정 항목을 검토하여 추가적인 통찰력을 얻을 수 있습니다.
11.3.6. 시스템 예약 CPU 사용률이 80% 이상인 노드 링크 복사링크가 클립보드에 복사되었습니다!
시스템 예약 CPU 사용률이 80% 이상인 노드 쿼리는 시스템 예약 CPU 사용률이 80%를 넘는 노드를 식별합니다. 이 쿼리는 지난 5분 동안의 CPU 사용률을 계산하기 위해 시스템에 예약된 용량에 초점을 맞추고 이를 노드에서 사용 가능한 CPU 리소스와 비교합니다. 비율이 80%를 초과하면 노드의 결과가 메트릭에 표시됩니다.
기본 쿼리 예시
sum by (node) (rate(container_cpu_usage_seconds_total{id="/system.slice"}[5m]) * 100) / sum by (node) (kube_node_status_capacity{resource="cpu"} - kube_node_status_allocatable{resource="cpu"}) >= 80
sum by (node) (rate(container_cpu_usage_seconds_total{id="/system.slice"}[5m]) * 100) / sum by (node) (kube_node_status_capacity{resource="cpu"} - kube_node_status_allocatable{resource="cpu"}) >= 80
이 쿼리는 리소스 고갈로 이어질 수 있는 시스템 예약 CPU 사용량의 위험 수준을 나타냅니다. 시스템에 예약된 CPU 사용량이 높으면 시스템 프로세스(Kubelet 및 CRI-O 포함)가 노드의 리소스를 적절하게 관리하지 못할 수 있습니다. 이 쿼리는 과도한 시스템 프로세스나 잘못 구성된 CPU 할당을 나타낼 수 있습니다.
가능한 시정 조치로는 다른 노드로 작업 부하를 재분배하거나 노드에 할당된 CPU 리소스를 늘리는 것이 있습니다. 시스템 CPU 사용률이 높은 원인을 조사하고 이상치 , 평균 기간 , 작업 수 범주에서 해당 메트릭을 검토하여 노드 동작에 대한 추가적인 통찰력을 얻으세요.
11.3.7. Kubelet 시스템이 예약된 노드의 CPU 사용률이 50% 이상입니다. 링크 복사링크가 클립보드에 복사되었습니다!
Kubelet 시스템이 예약한 CPU 사용률이 50% 이상인 노드 쿼리는 Kubelet 시스템이 현재 시스템 예약에서 사용 중인 CPU의 백분율을 계산합니다.
기본 쿼리 예시
sum by (node) (rate(container_cpu_usage_seconds_total{id="/system.slice/kubelet.service"}[5m]) * 100) / sum by (node) (kube_node_status_capacity{resource="cpu"} - kube_node_status_allocatable{resource="cpu"}) >= 50
sum by (node) (rate(container_cpu_usage_seconds_total{id="/system.slice/kubelet.service"}[5m]) * 100) / sum by (node) (kube_node_status_capacity{resource="cpu"} - kube_node_status_allocatable{resource="cpu"}) >= 50
Kubelet은 시스템에 예약된 CPU를 자체 작업과 중요한 시스템 서비스를 실행하는 데 사용합니다. 노드의 상태를 유지하려면 시스템 예비 CPU 사용량이 50% 임계값을 초과하지 않도록 하는 것이 중요합니다. 이 한도를 초과하면 Kubelet의 사용률이나 부하가 과도하게 높아져 노드 안정성에 영향을 미치고 전체 Kubernetes 클러스터의 성능에 영향을 미칠 수 있습니다.
이 지표에 노드가 표시되면 Kubelet과 시스템 전체에 과부하가 걸리고 있는 것입니다. 클러스터의 다른 노드에 부하를 분산하면 특정 노드의 과부하를 줄일 수 있습니다. 추가 통찰력을 얻고 필요한 시정 조치를 취하려면 이상치 , 평균 기간 및 작업 수 범주에서 다른 쿼리 메트릭을 확인하세요.
11.3.8. CRI-O 시스템이 예약된 노드의 CPU 사용률이 50% 이상입니다. 링크 복사링크가 클립보드에 복사되었습니다!
CRI-O 시스템의 예약된 CPU 사용률이 50%를 초과하는 노드 쿼리는 지난 5분 동안 CRI-O 시스템의 예약된 CPU 사용률이 50%를 초과한 노드를 식별합니다. 이 쿼리는 컨테이너 런타임인 CRI-O의 CPU 리소스 소비를 노드별로 모니터링합니다.
기본 쿼리 예시
sum by (node) (rate(container_cpu_usage_seconds_total{id="/system.slice/crio.service"}[5m]) * 100) / sum by (node) (kube_node_status_capacity{resource="cpu"} - kube_node_status_allocatable{resource="cpu"}) >= 50
sum by (node) (rate(container_cpu_usage_seconds_total{id="/system.slice/crio.service"}[5m]) * 100) / sum by (node) (kube_node_status_capacity{resource="cpu"} - kube_node_status_allocatable{resource="cpu"}) >= 50
이 쿼리를 사용하면 Pod 성능에 부정적인 영향을 미칠 수 있는 비정상적인 시작 시간을 빠르게 식별할 수 있습니다. 이 쿼리가 높은 값을 반환하는 경우 Pod 시작 시간이 평소보다 느리다는 뜻이며, 이는 kubelet, Pod 구성 또는 리소스에 문제가 있을 가능성이 있음을 의미합니다.
포드 구성과 할당된 리소스를 확인하여 자세히 조사해 보세요. 이것이 귀하의 시스템 기능과 일치하는지 확인하세요. 여전히 시작 시간이 길다면 대시보드의 다른 카테고리에서 메트릭 패널을 살펴보고 시스템 구성 요소의 상태를 확인하세요.