JuHyung Son

View Original

쿠버네티스 이해하기: watcher vs informer

Kubernetes는 다양한 환경에서 컨테이너화된 애플리케이션을 관리하기 위한 오케스트레이션 표준으로 자리 잡았는데, 그 이유 중 하나는 애플리케이션이 클러스터 내의 상태 변화에 동적으로 대응할 수 있기 때문이다. 이러한 기능을 가능하게 하는 두 가지 핵심 개념은 와처와 인포머이다. 이 포스팅에서는 이 두 개념이 무엇인지, 어떻게 다른지, 언제 두 개념을 함께 사용해야 하는지에 

Watcher: 쿠버네티스의 실시간 알림

쿠버네티스의 와처는 즉각성과 실시간 업데이트에 관한 것이다. 쿠버네티스 리소스에서 와처를 사용하면 애플리케이션이 쿠버네티스 API 서버와 직접 통신을 연결한다. 이는 파드, 서비스 또는 디플로이먼트와 같은 특정 리소스 유형에 대한 업데이트를 subscribe하는 것과 비슷하다.

작동 방식은 다음과 같다. 쿠버네티스 API 서버는 클라이언트에 대해 HTTP 연결을 열어둔다. 파드, 서비스와 같은 지정된 리소스가 변경될 때마다 해당 리소스의 현재 상태를 나타내는 새 JSON 객체를 보낸다. 이는 변경 사항이 발생할 때 애플리케이션에 정보를 제공하는 간단하고 직관적인 방법이다.

하지만 단순하고 저순준 api인 만큼 대가가 따른다. 와처는 상태를 유지하지 않고 단지 변경 사항을 알리기만 한다. 애플리케이션에서 전체 컨텍스트를 이해하거나 변경 이력을 유지해야 하는 경우 직접 컴포넌트 개발이 

Informer: 정교하고 상태가 저장된 감시

인포머는 와처를 한 단계 더 발전시킨 것이다. 이는 쿠버네티스의 고 패키지인 ’client-go’의 일부이며 쿠버네티스 API와 상호 작용하는 보다 정교한 방법을 제공한다. 인포머는  와처를 아래 추가 기능들로 감싼다.

1. 캐싱: 인포머는 감시하는 리소스의 로컬 캐시를 유지하여 애플리케이션이 API 서버에 접속하지 않고도 리소스의 현재 상태를 쿼리할 수 있도록 한다.

2. 인덱싱: 이 기능을 사용하면 특정 리소스 필드를 기반으로 빠른 조회 및 목록 작업을 수행할 수 있다.

3. 이벤트 핸들러: 핸들러를 사용하면 다양한 유형의 리소스 변경(추가, 업데이트, 삭제)에 대한 이벤트 핸들러를 등록하여 변경에 구조적으로 대응할 수 있다.

4. 복원력: API 서버의 감시가 중단될 경우 자동으로 재연결 로직을 처리하여 서버 상태의 일관성을 보장한다.

인포머의 로컬 캐시는 특히 강력합니다. 이 캐시는 API 서버의 이벤트 스트림을 수신하여 로컬 저장소를 업데이트하고 클러스터의 현재 상태와 항상 동기화되도록 한다. 그런 다음 이 캐시는 애플리케이션에 대한 단일 데이터 소스 역할을 하게 된다. 와처에 비해 불필요한 요청과 리소스를 많이 줄게 된다.

파이썬으로 작성된 와처 예시를 보면 와처는 스트림으로 이벤트를 계속 받는다. 이후 이벤트 타입에 따라 다르게 처리되는데 캐싱, 이벤트 핸들러등은 직접 구현하여야 한다.

인포머는 와처에서 추상화 레이어가 추가된 고수준 기능이다. 로컬 캐싱 메커니즘, 정교한 이벤트 핸들러, 운영 내부에 복원력과 같은 기능이 추가되었다. 인포머는 변경 사항을 알려줄 뿐만 아니라 리소스의 현재 상태를 유지하고, 재연결을 처리하며, 복잡한 이벤트 중심 로직에 집중할 수 있게 한다.

인포머의 예시 코드를 보자. 인포머는 파이썬 kubernetes 패키지엔 없고, 고 패키지에 구현되어 있다. 인포머의 경우, 인포머 자체에서 처리해주는 것들이 있기 때문에 사용자는 단순히 이벤트 핸들러에만 집중할 수 있고, 와처에 비해 효율적이다.

와처와 인포머를 사용할 경우

와처를 사용할지 인포머를 사용할지는 어플리케이션의 복잡성에 따라 결정된다.

와처를 사용하는 경우:

  - 변경 사항에 대한 응답으로 간단한 작업을 수행해야 하는 경우.

  - 애플리케이션이 상태를 유지할 필요가 없는 경우.

  - 적은 수의 리소스를 관리하고 있는 경우.

인포머를 사용해야 하는 경우:

  - 리소스의 로컬 상태를 최신 상태로 유지해야 하는 경우.

  - 리소스를 관리하거나 모니터링하는 컨트롤러 또는 운영자를 구축하는 경우.

  - 이벤트 핸들러를 사용하여 이벤트를 보다 체계적으로 처리하려는 경우.

  - 복원력 및 자동 재연결 처리가 필요한 경우

요약

와처는 좋아하는 프로그램이 새 에피소드를 공개하는 순간 알려주는 기본 구독 서비스와 같다. 반면, 인포머는 알림뿐만 아니라 에피소드를 녹화하고, 출연진에 대한 추가 정보를 제공하며, 연결이 끊어질 경우 중단한 지점부터 재생을 재개하는 프리미엄 서비스와 비슷하다.

쿠버네티스를 기반으로 구축하는 개발자에게는 와처와 인포머 중 어느 쪽을 이해하고 선택하는 것이 중요하다. 올바른 선택은 코드를 간소화하고, 성능을 개선하며, 동적 컨테이너 환경에서 애플리케이션이 필요한 만큼의 응답성과 복원력을 갖도록 보장할 수 있다.