ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes의 Informer와 Watcher 차이점
    Kubernetes 2025. 3. 2. 10:31
    728x90

    Watcher와 Informer 모두 Kubernetes에서 클러스터 리소스를 모니터링하고 변경 사항을 감지하는 두 가지 주요 메커니즘

     

    Watcher란?

    Watcher는 Kubernetes API 서버에서 특정 리소스의 변경 사항을 실시간으로 감지하는 기본 기능이야.

    • kubectl get pods -w 명령어처럼 동작한다고 보면 돼.
    • API 서버와 Persistent Connection(예: HTTP Long Polling 또는 WebSocket) 을 유지하면서 변경 사항이 발생하면 바로 이벤트를 받아.

    🔹 Watcher의 동작 방식

    1. 클라이언트가 Kubernetes API 서버에 WATCH 요청을 보냄.
    2. API 서버는 해당 리소스의 변경 사항(추가, 수정, 삭제)을 스트리밍 방식으로 전송.
    3. 클라이언트는 변경 사항을 즉시 처리 가능.

    🔹 예제 코드 (Watcher 사용)

    watcher, err := clientset.CoreV1().Pods("default").Watch(context.TODO(), metav1.ListOptions{})
    if err != nil {
        log.Fatal(err)
    }
    
    for event := range watcher.ResultChan() {
        fmt.Println("Event Type:", event.Type)
        fmt.Println("Pod Object:", event.Object)
    }
     

    Watcher는 실시간 반응이 빠르지만, 네트워크 연결이 끊어지거나 장애가 발생하면 다시 요청을 보내야 해!

    Informer란?

    Informer는 Watcher를 기반으로 구현된 고급 캐싱 메커니즘이야.

    • Watcher가 직접 API 서버와 지속적인 연결을 유지하는 반면, Informer는 API 서버에서 데이터를 가져와 내부 캐시(Store)에 저장하고 활용해.
    • 따라서 API 요청 부담을 줄이면서도 변경 사항을 빠르게 감지할 수 있어.

    🔹 Informer의 동작 방식

    1. 리소스 리스트를 한 번 가져와서(Cache 저장) 기본 상태를 설정
    2. Watcher를 실행하여 실시간 변경 사항을 감지하고 캐시를 업데이트
    3. 컨트롤러는 캐시에서 데이터를 가져와서 활용 → API 서버 부담 감소

    🔹 예제 코드 (Informer 사용)

    factory := informers.NewSharedInformerFactory(clientset, time.Minute*5)
    podInformer := factory.Core().V1().Pods().Informer()
    
    podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
        AddFunc: func(obj interface{}) {
            fmt.Println("Pod Created:", obj)
        },
        UpdateFunc: func(oldObj, newObj interface{}) {
            fmt.Println("Pod Updated:", newObj)
        },
        DeleteFunc: func(obj interface{}) {
            fmt.Println("Pod Deleted:", obj)
        },
    })
    
    stopCh := make(chan struct{})
    factory.Start(stopCh)
    <-stopCh

     

     

    Informer는 API 요청을 최소화하면서도 빠르게 리소스 변경을 감지할 수 있어!

     

     

    Watcher는 실시간 반응이 중요할 때 사용하고, Informer는 성능 최적화와 확장성이 중요한 경우 사용

     

     

    728x90
Designed by Tistory.