Maison  >  Article  >  développement back-end  >  Quand devriez-vous utiliser watch.Interface, cache.NewInformer ou cache.NewSharedIndexInformer dans Kubernetes ?

Quand devriez-vous utiliser watch.Interface, cache.NewInformer ou cache.NewSharedIndexInformer dans Kubernetes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-11 19:56:03572parcourir

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

watch.Interface vs cache.NewInformer vs cache.NewSharedIndexInformer

Lors de la surveillance des ressources dans Kubernetes et de la réaction aux changements, les développeurs ont diverses options qui s'offrent à eux. Comprendre les différences entre ces méthodes est crucial.

watch.Interface

La watch.Interface obtenue grâce à des méthodes comme rest.Request.Watch() fournit un ResultChan qui diffuse événements (ajoutés/modifiés/supprimés) de modifications de ressources. Elle propose une abstraction de bas niveau et fournit uniquement l'état "après" de la ressource.

cache.NewInformer

La fonction cache.NewInformer permet de spécifier un ResourceEventHandler qui gère les appels OnAdd()/OnUpdate()/OnDelete(). Il comprend un mécanisme pour recevoir à la fois les états « avant » et « après » de la ressource. En interne, NewInformer utilise watch.Interface via NewListWatchFromClient.

cache.NewSharedInformer vs cache.NewSharedIndexInformer

Ces fonctions offrent des niveaux d'abstraction plus élevés que NewInformer. Ils utilisent une connexion partagée au serveur API et partagent des ressources entre les informateurs. cache.NewSharedIndexInformer ajoute en outre l'indexation au cache de données.

Recommandation

Pour la plupart des cas d'utilisation, les SharedInformers sont recommandés par rapport aux abstractions de niveau inférieur. SharedInformers partage des ressources et fournit un niveau d'abstraction plus élevé, simplifiant ainsi de nombreuses tâches de niveau inférieur. Lorsque vous travaillez avec un grand ensemble de données, les SharedIndexInformers sont préférés en raison de leur capacité d'indexation.

Instancier des SharedInformers à partir de la même SharedInformerFactory pour partager efficacement les ressources. Un exemple est présenté ci-dessous :

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)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn