>  기사  >  백엔드 개발  >  언제 Kubernetes에서 watch.Interface, 캐시.NewInformer 또는 캐시.NewSharedIndexInformer를 사용해야 합니까?

언제 Kubernetes에서 watch.Interface, 캐시.NewInformer 또는 캐시.NewSharedIndexInformer를 사용해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-11 19:56:03604검색

When Should You Use watch.Interface, cache.NewInformer, or cache.NewSharedIndexInformer in Kubernetes?

watch.Interface vs.cache.NewInformer vs.cache.NewSharedIndexInformer

Kubernetes의 리소스를 모니터링하고 변경 사항에 대응할 때 개발자는 다양한 사용할 수 있는 옵션입니다. 이러한 메소드 간의 차이점을 이해하는 것이 중요합니다.

watch.Interface

rest.Request.Watch()와 같은 메소드를 통해 얻은 watch.Interface는 스트리밍하는 ResultChan을 제공합니다. 리소스 변경 이벤트(추가/수정/삭제)입니다. 이는 낮은 수준의 추상화를 제공하며 리소스의 "이후" 상태만 제공합니다.

cache.NewInformer

cache.NewInformer 함수를 사용하면 OnAdd()/OnUpdate()/OnDelete() 호출을 처리하는 ResourceEventHandler입니다. 여기에는 리소스의 "이전" 상태와 "이후" 상태를 모두 수신하는 메커니즘이 포함되어 있습니다. 내부적으로 NewInformer는 NewListWatchFromClient를 통해 watch.Interface를 활용합니다.

cache.NewSharedInformer와 캐시.NewSharedIndexInformer

이러한 함수는 NewInformer보다 더 높은 수준의 추상화를 제공합니다. 이들은 API 서버에 대한 공유 연결을 사용하고 정보원 간에 리소스를 공유합니다. 캐시.NewSharedIndexInformer는 데이터 캐시에 인덱싱을 추가로 추가합니다.

권장 사항

대부분의 사용 사례에서는 하위 수준 추상화보다 SharedInformers를 사용하는 것이 좋습니다. SharedInformers는 리소스를 공유하고 더 높은 수준의 추상화를 제공하여 많은 하위 수준 작업을 단순화합니다. 대규모 데이터 세트로 작업할 때는 인덱싱 기능으로 인해 SharedIndexInformers가 선호됩니다.

동일한 SharedInformerFactory에서 SharedInformer를 인스턴스화하여 리소스를 효율적으로 공유하세요. 예는 다음과 같습니다.

informerFactory := informers.NewSharedInformerFactory(clientset, time.Second*30)

podInformer := informerFactory.Core().V1().Pods()
serviceInformer := informerFactory.Core().V1().Services()

podInformer.Informer().AddEventHandler(
  // Add event handling 
)
// Add event handling for serviceInformer

informerFactory.Start(wait.NeverStop)
informerFactory.WaitForCacheSync(wait.NeverStop)

위 내용은 언제 Kubernetes에서 watch.Interface, 캐시.NewInformer 또는 캐시.NewSharedIndexInformer를 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.