Maison > Article > développement back-end > Quand devriez-vous utiliser watch.Interface, cache.NewInformer ou cache.NewSharedIndexInformer dans 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!