-
Kubernetes의 Informer와 Watcher 차이점Kubernetes 2025. 3. 2. 10:31728x90
Watcher와 Informer 모두 Kubernetes에서 클러스터 리소스를 모니터링하고 변경 사항을 감지하는 두 가지 주요 메커니즘
Watcher란?
Watcher는 Kubernetes API 서버에서 특정 리소스의 변경 사항을 실시간으로 감지하는 기본 기능이야.
- kubectl get pods -w 명령어처럼 동작한다고 보면 돼.
- API 서버와 Persistent Connection(예: HTTP Long Polling 또는 WebSocket) 을 유지하면서 변경 사항이 발생하면 바로 이벤트를 받아.
🔹 Watcher의 동작 방식
- 클라이언트가 Kubernetes API 서버에 WATCH 요청을 보냄.
- API 서버는 해당 리소스의 변경 사항(추가, 수정, 삭제)을 스트리밍 방식으로 전송.
- 클라이언트는 변경 사항을 즉시 처리 가능.
🔹 예제 코드 (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의 동작 방식
- 리소스 리스트를 한 번 가져와서(Cache 저장) 기본 상태를 설정
- Watcher를 실행하여 실시간 변경 사항을 감지하고 캐시를 업데이트
- 컨트롤러는 캐시에서 데이터를 가져와서 활용 → 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'Kubernetes' 카테고리의 다른 글
Kubernetes Operator 구현에 Watcher 사용 (0) 2025.03.02 Kubernetes Operator 작성 시 Watcher 또는 Informer 사용? (0) 2025.03.02 Kubernetes에서 Controller와 Operator의 차이 (0) 2025.03.02 Kubernetes Operator Pattern: 클러스터 운영 자동화 (0) 2025.03.02 K8S API 서버의 gRPC 지원? (0) 2025.03.02