본문 바로가기

About/Kubernetes

[k8s] 쿠버네티스 파드 CPU 및 메모리 체크 방법

쿠버네티스 파드 CPU 및 메모리 체크 방법

소개

쿠버네티스(Kubernetes)는 대규모 컨테이너 관리 플랫폼으로, 파드(Pod)는 쿠버네티스에서 가장 작은 배포 단위입니다. 파드는 하나 이상의 컨테이너를 포함하고, 동일한 호스트에서 실행될 수 있습니다. 이 때문에 파드의 CPU 및 메모리 상태를 모니터링하는 것은 매우 중요합니다. 이번에는 파드의 CPU 및 메모리 상태를 체크하는 방법에 대해서 알아보겠습니다.

방법

1. kubectl top 명령어

kubectl top 명령어를 사용하면 쿠버네티스 클러스터에서 실행 중인 파드의 CPU 및 메모리 사용량을 쉽게 확인할 수 있습니다.

# 파드의 CPU 및 메모리 사용량 확인
kubectl top pod <pod-name>

# 파드가 실행되는 노드의 CPU 및 메모리 사용량 확인
kubectl top node <node-name>

위 명령어를 실행하면 다음과 같은 결과가 나옵니다.

$ kubectl top pod nginx
NAME      CPU(cores)   MEMORY(bytes)
nginx     4m           15Mi

$ kubectl top node worker-1
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
worker-1   53m          2%     536Mi           26%

위 결과에서 CPU(cores)는 CPU 사용량을 코어 단위로 표시한 것이고, MEMORY(bytes)는 메모리 사용량을 바이트 단위로 표시한 것입니다.

2. Kubernetes 대시보드

쿠버네티스 대시보드(Kubernetes Dashboard)를 사용하면 쿠버네티스 클러스터에서 실행 중인 파드의 CPU 및 메모리 사용량을 시각적으로 확인할 수 있습니다.

대시보드를 설치하지 않은 경우, 다음 명령어를 사용하여 설치할 수 있습니다.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

 

설치 후, 대시보드를 실행하려면 다음 명령어를 실행합니다.

kubectl proxy

 

위 명령어를 실행하면 다음 URL을 사용하여 대시보드에 접속할 수 있습니다.
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

3. Prometheus

Prometheus는 쿠버네티스 클러스터의 모니터링 시스템으로, 파드의 CPU 및 메모리 사용량을 모니터링할 수 있습니다.

먼저 Prometheus를 설치합니다. 설치 방법은 다음과 같습니다.

1. prometheus.yaml 파일을 만듭니다.

apiVersion: v1
kind: Service
metadata:
  name: prometheus
spec:
  selector:
    app: prometheus
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
spec:
  selector:
    matchLabels:
      app: prometheus
  replicas: 1
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - name: prometheus
        image: prom/prometheus:v2.33.1
        args:
          - "--config.file=/etc/prometheus/prometheus.yml"
        ports:
        - name: web
          containerPort: 9090
        volumeMounts:
        - name: config-volume
          mountPath: /etc/prometheus/
      volumes:
      - name: config-volume
        configMap:
          name: prometheus-config

 

2. config.yaml 파일을 만듭니다.

global:
  scrape_interval: 15s

scrape_configs:
- job_name: 'kubernetes-apiservers'

  kubernetes_sd_configs:
  - role: endpoints
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    insecure_skip_verify: true

  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

  relabel_configs:
  - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: default;kubernetes;https

- job_name: 'kubernetes-pods'

  kubernetes_sd_configs:
  - role: pod

  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_container_port_name]
    action: keep
    regex: .*


  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true

  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    action: replace
    target_label: __metrics_path__
    regex: (.+)

  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    action: replace
    target_label: __address__
    regex: (.+):(?:\d+);(\d+)
    replacement: $1:$2
    # Drop any port information from the target_label
    # that was added via service discovery.
    # __meta_kubernetes_pod_annotation_prometheus_io_port
    # will now be our source of truth.
    regex: .+;(\d+)
    replacement: $1

 

 

3. prometheus-config ConfigMap을 만듭니다.

kubectl create configmap prometheus-config --from-file=prometheus.yaml --from-file=config.yaml

 

4. Prometheus를 설치합니다.

kubectl apply -f prometheus.yaml

설치 후, 다음 URL을 사용하여 Prometheus에 접속할 수 있습니다.
http://<Node-IP>:<NodePort>