我们使用Client-go中的informer来监听用户微服务与文章微服务的Pod。
Informer代替Controller去访问k8s-apiserver,而Controller的所有操作(如:查状态、对资源进行伸缩等)都和Informer进行交互,可以通过Wath API去监听这些资源状态的变化。
创建Informer
在informer.go中创建PodWatcher函数
func PodWatcher(clientset *kubernetes.Clientset, namespace string) {
// 创建共享的informer
informerFactory := informers.NewSharedInformerFactory(clientset, time.Minute)
podInformer := informerFactory.Core().V1().Pods()
// 加入监听事件
podInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
// 新建Pod event的回调函数
AddFunc: func(obj interface{}) {
pod := obj.(*apiv1.Pod)
fmt.Printf("Add pod: %s\n", pod.Name)
},
// 更新Pod event的回调函数
UpdateFunc: func(oldObj, newObj interface{}) {
oldPod := oldObj.(*apiv1.Pod)
newPod := newObj.(*apiv1.Pod