Observability - Metrics

쿠버네티스 메트릭스

쿠버네티스는 각 컨테이너의 리소스 사용량을 통제하고 지속적으로 모니터링하면서 최적의 상태를 유지합니다. 따라서 리소스 사용량을 확인하고, 해당 데이터를 기반으로 컨테이너 리소스 사용량이 적절히 설정되었는지를 확인하는 과정은 쿠버네티스 모니터링의 기본적인 패턴이라고 할 수 있습니다.

CPU와 Memory 메트릭

컨테이너의 CPU Request/Limit, Memory Request/Limit이 대표적인 쿠버네티스 리소스 설정입니다. 다음은 리소스 설정 예시입니다.

---
apiVersion: v1
kind: Pod
metadata:
  name: <Pod명>
spec:
  containers:
  - name: <컨테이너1명>
    image: <컨테이너1이미지>
    resources:
      requests:
        memory: "64Mi"
        cpu: "100m"
      limits:
        memory: "128Mi"
        cpu: "200m"
  - name: <컨테이너2명>
    image: <컨테이너2이미지>
    resources:
      requests:
        memory: "128Mi"
        cpu: "250m"
      limits:
        memory: "256Mi"
        cpu: "500m"

위 파드 내에는 2개의 컨테이너가 존재하며 각 컨테이너의 리소스 설정은 다음과 같습니다.

대상 컨테이너

리소스 구분

리소스 설정

컨테이너1

CPU

Request

100m

Limit

200m

Memory

Request

64Mi

Limit

128Mi

컨테이너2

CPU

Request

250m

Limit

500m

Memory

Request

128Mi

Limit

256Mi

하지만 이러한 각 컨테이너의 리소스 설정 정보 및 현재 사용량을 가시적으로 파악하기란 쉽지 않습니다. 그러면 어떻게 해야 할까요?

바로 와탭 쿠버네티스를 사용하면 됩니다. 와탭은 특정 단일 컨테이너, 사용자가 선택한 복수의 컨테이너들, 혹은 Deployment 전체를 대상으로 리소스 설정과 현재 사용량을 쉽게 확인할 수 있습니다.

whatap kubernetes container map resource example
Figure 1. 컨테이너 맵 > 상세화면 > 메트릭스 - 리소스 사용량 모니터링 및 분석

위 데이터를 보면 CPU는 Request 150m, Limit 300m로 설정되어 있습니다. 현재 CPU 사용량은 14.01m (5초 평균) 입니다. 우측의 CPU 관련 추이 그래프를 확인해도 Request 설정까지 충분한 여유가 있습니다.

Memory는 Request 96MiB, Limit 192MiB로 설정되어 있습니다. 그런데 현재 Memory 사용량은 186.7MiB입니다. 우측의 Memory 관련 추이 그래프를 보면 이미 Request는 초과하였고 Limit에도 거의 도달한 상태를 유지하고 있습니다. 컨테이너의 Memory 설정 점검이 필요합니다.

CPU, Memory 관련 주요 와탭 메트릭은 다음과 같습니다.

대상 리소스

Shortname

Name

Description

CPU

CpuTotUsage

Container CPU Usage (millicore)

컨테이너 CPU 사용률

CpuByRequest

Container CPU Usage by Request (%)

컨테이너 CPU 요청 대비 사용률

CpuByLimit

Container CPU Usage by Limit (%)

CPU Limit 기준 CPU 전체 사용률

Memory

MemWs

Container Memory Working Set (byte)

컨테이너 메모리 working set

MemWsByRequest

Container Memory Working Set by Request (%)

컨테이너 메모리 요청량 기준 working set 사용량

MemWsByLimit

Container Memory Working Set by Limit (%)

컨테이너 메모리 할당량 기준 working set 사용량

Pod가 실행 중인 노드에 사용 가능한 리소스가 충분하면 컨테이너에 설정된 Request 이상의 리소스를 사용할 수 있습니다. 와탭 메트릭 중 "Container CPU Usage by Request (%)", "Container Memory Working Set by Request (%)"의 값이 100%를 넘어설 수 있는 이유입니다.

예를 들어 컨테이너의 Memory Request를 128MiB로 설정하였다고 가정하겠습니다. 컨테이너(Pod)가 실행 중인 노드의 총 메모리가 4GiB이고, 해당 노드에 다른 Pod가 없는 경우 이 컨테이너는 128MiB이상의 메모리를 사용할 수 있습니다.

그 외 메트릭

와탭은 CPU, Memory 관련 메트릭 외에도 다양한 메트릭을 제공합니다.

  • Container Block I/O Read Byte (IoReadBytes)

  • Container Block I/O Write Byte (IoWriteBytes)

  • Container Network Receive Byte (NetRxBytes)

  • Container Network Transmit Byte (NetTxByes)

와탭 쿠버네티스 메트릭의 자세한 정보는 [활용하기] > [메트릭스] > [쿠버네티스] 문서를 참고하시기 바랍니다.