Kubernetes/Kubernetes Advanced

📌 [DaemonSet 심화편 #20] DaemonSet과 Kubernetes 이벤트(Event) 감지 에이전트 구성 방법

ygtoken 2025. 3. 22. 20:58
728x90

1️⃣ 개요

Kubernetes 환경에서 DaemonSet은 노드 단위의 작업을 자동화하거나, 시스템 이벤트를 감지하는 데 활용됩니다.
특히, 노드에서 발생하는 이벤트를 수집하고 분석하는 로직을 DaemonSet으로 구성하면
모든 노드에서 일어나는 다양한 이벤트를 빠르게 파악할 수 있습니다.

이번 글에서는 DaemonSet을 통해 Kubernetes 이벤트 감지 및 알림용 에이전트를 구성하는 방법을 설명합니다.


2️⃣ 이벤트 감지 에이전트 구성 목적

감지 항목 예시 활용 목적
Pod OOMKilled, CrashLoopBackOff 장애 대응 자동화
노드 NotReady 이벤트 노드 상태 모니터링
PersistentVolume 오류 스토리지 이슈 조기 감지
컨테이너 ImagePullBackOff CI/CD 문제 추적

✅ 위 이벤트는 kubectl get events 명령이나 Kubernetes API를 통해 확인 가능하며,
DaemonSet은 이를 자동 수집하고 로그 또는 외부 시스템으로 전송할 수 있습니다.


3️⃣ 이벤트 감지를 위한 방법

  1. kubectl events 명령어 사용 → 임시 확인용
  2. client-go 기반 Custom Agent 구성
  3. Vector, Fluent Bit, Logstash 등의 수집기 활용
  4. kube-eventer, kubewatch 등의 오픈소스 활용
  5. 직접 Curl or Python으로 API polling 구성

4️⃣ 이벤트 감지용 DaemonSet 예제 (Vector 사용)

Vector는 이벤트, 로그, 메트릭 수집에 모두 사용 가능한 에이전트입니다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: event-agent
spec:
  selector:
    matchLabels:
      app: event-agent
  template:
    metadata:
      labels:
        app: event-agent
    spec:
      containers:
        - name: vector
          image: timberio/vector:latest
          volumeMounts:
            - name: vector-config
              mountPath: /etc/vector
      volumes:
        - name: vector-config
          configMap:
            name: vector-config   # Vector 설정은 ConfigMap으로 관리

📌 설명

  • Vector는 Kubernetes API를 통해 이벤트를 수집하도록 설정할 수 있으며,
  • 해당 설정은 ConfigMap에서 YAML 또는 TOML로 관리합니다.

5️⃣ Vector 설정 ConfigMap 예시

apiVersion: v1
kind: ConfigMap
metadata:
  name: vector-config
data:
  vector.toml: |
    [sources.kubernetes_events]
    type = "kubernetes_events"     # Kubernetes 이벤트 수집 활성화

    [sinks.console]
    inputs = ["kubernetes_events"]
    type = "console"
    encoding.codec = "json"        # 수집된 이벤트를 stdout에 JSON 형식으로 출력

📌 설명

  • 위 설정은 DaemonSet이 노드에서 Kubernetes 이벤트를 수집하고 로그로 출력하는 역할을 합니다.
  • 실제 운영에서는 console 대신 loki, elasticsearch, s3 등의 출력 대상(sink)을 설정하면 됩니다.

6️⃣ 이벤트 확인 및 출력 예시

kubectl logs <pod-name> -c vector

 

출력 예시 (JSON):

{
  "reason": "BackOff",
  "message": "Back-off restarting failed container",
  "involved_object": {
    "kind": "Pod",
    "name": "web-app-123",
    "namespace": "default"
  },
  "type": "Warning",
  "timestamp": "2024-03-20T08:00:00Z"
}

📌 설명

  • 이벤트 발생 시 Vector가 이를 감지하여 로그로 출력합니다.
  • 이 데이터를 기반으로 알림 전송 또는 대시보드에 시각화할 수 있습니다.

7️⃣ 다른 이벤트 수집 도구 예시

도구 특징
kube-eventer (Alibaba OSS) 이벤트 수집 후 DingTalk, Slack 등으로 알림 전송 가능
kubewatch 간단한 이벤트 감지 도구, Slack/IRC 연동 가능
Custom Controller client-go 활용, 특정 조건에서 자동 작업 수행 가능

🔥 8️⃣ 결론

DaemonSet을 활용하면 노드 단위에서 Kubernetes 이벤트를 감지하고 수집하는 에이전트를 쉽게 배포할 수 있습니다.
Vector, Fluent Bit, kube-eventer 등 다양한 도구를 사용하여 이벤트 수집과 알림을 자동화할 수 있습니다.
감지된 이벤트를 기반으로 장애 대응, 모니터링, 알림 시스템을 구성할 수 있으며, 운영 효율성을 크게 향상시킬 수 있습니다.

 

728x90