1️⃣ 개요
Kubernetes 클러스터에서는 각 노드 및 Pod의 리소스 사용량(CPU, 메모리 등)을 수집하여 모니터링하는 것이 중요합니다.
이를 위해 Metrics Server를 설치하고, 각 노드의 리소스를 주기적으로 수집하여 외부 시스템으로 전달하는 구조를 구성할 수 있습니다.
이 글에서는 DaemonSet을 활용하여 Metrics Server의 정보를 기반으로 각 노드의 리소스를 수집하고, 이를 가공하거나 외부에 전송하는 방식을 설명합니다.
2️⃣ Metrics Server란?
항목 | 설명 |
역할 | Kubernetes에서 CPU, 메모리 등 리소스 사용량을 수집하고 제공하는 컴포넌트 |
데이터 소스 | 각 노드의 Kubelet에서 제공하는 /metrics/resource API |
활용 위치 | kubectl top, HPA(Horizontal Pod Autoscaler), 대시보드 등 |
✅ Metrics Server는 kubelet과 통신하여 리소스를 수집하고, Kubernetes API를 통해 제공하는 중간 서버입니다.
3️⃣ Metrics Server 설치 확인
# metrics-server가 배포되어 있는지 확인
kubectl get deployment metrics-server -n kube-system
# 현재 노드들의 리소스 사용량 확인
kubectl top node
📌 위 명령어를 통해 Metrics Server가 정상적으로 작동 중인지 확인할 수 있습니다.
4️⃣ DaemonSet 기반 리소스 수집기 구성 구조
아래 구조를 기반으로 노드마다 리소스 정보를 수집합니다:
- DaemonSet Pod가 각 노드에 배포됨
- Pod 내부에서 API 서버에 요청하여 노드 메트릭 조회 (kubectl top node와 유사)
- 결과를 로그 출력, 파일 저장, 외부 전송 등의 방식으로 활용 가능
5️⃣ ServiceAccount 및 RBAC 설정
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-metrics-reader # DaemonSet에서 사용할 서비스 어카운트
namespace: default # DaemonSet이 배포될 네임스페이스
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: node-metrics-role # 모든 노드의 metrics를 읽기 위한 클러스터 롤 정의
rules:
- apiGroups: [""] # core API group (metrics는 여기에 포함됨)
resources: ["nodes", "nodes/metrics"] # 노드 정보 및 메트릭 접근 허용
verbs: ["get", "list"] # get 및 list 권한 부여
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: node-metrics-binding # 위 Role을 ServiceAccount에 바인딩
roleRef:
kind: ClusterRole
name: node-metrics-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: node-metrics-reader
namespace: default
📌 이 RBAC 설정을 통해 DaemonSet이 Metrics API에 접근할 수 있게 됩니다.
6️⃣ DaemonSet 구성 예제
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-metrics-agent # DaemonSet의 이름
spec:
selector:
matchLabels:
app: node-metrics-agent # DaemonSet과 Pod을 연결하는 라벨
template:
metadata:
labels:
app: node-metrics-agent
spec:
serviceAccountName: node-metrics-reader # 메트릭 조회 권한을 가진 SA 지정
containers:
- name: metrics-agent
image: bitnami/kubectl:latest # kubectl 명령어 실행이 가능한 이미지 사용
command:
- /bin/sh
- -c
- |
# 주기적으로 자신의 노드 리소스 사용량을 출력하는 루프
while true; do
echo "📊 Node: $(hostname)"; # 현재 노드 이름 출력
kubectl top node $(hostname); # 해당 노드의 메트릭 조회
sleep 30; # 30초 주기로 반복 실행
done
📌 이 DaemonSet은 각 노드에서 메트릭을 출력하며, 로그 수집 시스템과 연계하여 활용할 수 있습니다.
7️⃣ 활용 방안
목적 | 활용 방식 |
로그 기반 모니터링 | 로그 수집기와 연동하여 리소스 로그 저장 |
알림 시스템 연계 | 일정 수치 이상이면 Slack, Email 알림 |
리소스 예측 | 수집된 데이터를 기반으로 리소스 사용 추이 분석 |
노드 상태 추적 | 노드 리소스 과다 사용 상태를 주기적으로 감시 |
🔥 8️⃣ 결론
✔ Metrics Server는 클러스터 리소스 모니터링의 기반이 되는 컴포넌트이며, DaemonSet을 활용해 이를 각 노드에서 직접 수집할 수 있습니다.
✔ RBAC 설정을 통해 API 접근 권한을 부여하고, 간단한 kubectl top 명령어로 노드 상태를 점검할 수 있습니다.
✔ 수집된 정보는 로그 분석, 알림 시스템, 리소스 계획 등 다양한 방식으로 활용될 수 있습니다.