쿠버네티스 파드 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>