Table of Contents
1.章节介绍
本章首先介绍SharedInformerFactory,了解其组成和作用。
然后以Podinformer为例,了解一个资源实例的Informer应该需要实现哪些函数。
本节并没有设计到具体图中的informer机制,只是从大的入口入手,看看SharedInformerFactory到底是什么
2. SharedInformerFactory
SharedInformerFactory封装了NewSharedIndexInformer方法。字如其名,SharedInformerFactory使用的是工厂模式来生成各类的Informer。无论是k8s控制器,还是自定义控制器, SharedInformerFactory都是非常重要的一环。所以首先分析SharedInformerFactory。这里以一个实例入手分析SharedInformerFactory。
2.1 SharedInformerFactory实例介绍
package main import ( "fmt" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/informers" "k8s.io/client-go/tools/cache" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" "time" ) func main() { config := &rest.Config{ Host: "http://172.21.0.16:8080", } client := clientset.NewForConfigOrDie(config) // 生成SharedInformerFactory factory := informers.NewSharedInformerFactory(client, 5 * time.Second) // 生成PodInformer podInformer := factory.Core().V1().Pods() // 获得一个cache.SharedIndexInformer 单例模式 sharedInformer := podInformer.Informer() //注册add, update, del处理事件 sharedInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) {fmt.Printf("add: %v\n&