github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/cloud/pkg/edgecontroller/manager/node.go (about) 1 package manager 2 3 import ( 4 "k8s.io/api/core/v1" 5 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 6 "k8s.io/apimachinery/pkg/labels" 7 "k8s.io/apimachinery/pkg/watch" 8 "k8s.io/client-go/kubernetes" 9 "k8s.io/client-go/tools/cache" 10 ) 11 12 const ( 13 NodeRoleKey = "node-role.kubernetes.io/edge" 14 NodeRoleValue = "" 15 ) 16 17 // NodesManager manage all events of nodes by SharedInformer 18 type NodesManager struct { 19 events chan watch.Event 20 } 21 22 // Events return the channel save events from watch nodes change 23 func (nm *NodesManager) Events() chan watch.Event { 24 return nm.events 25 } 26 27 // NewNodesManager create NodesManager by kube clientset and namespace 28 func NewNodesManager(kubeClient *kubernetes.Clientset, namespace string) (*NodesManager, error) { 29 set := labels.Set{NodeRoleKey: NodeRoleValue} 30 selector := labels.SelectorFromSet(set) 31 optionModifier := func(options *metav1.ListOptions) { 32 options.LabelSelector = selector.String() 33 } 34 lw := cache.NewFilteredListWatchFromClient(kubeClient.CoreV1().RESTClient(), "nodes", namespace, optionModifier) 35 events := make(chan watch.Event) 36 rh := NewCommonResourceEventHandler(events) 37 si := cache.NewSharedInformer(lw, &v1.Node{}, 0) 38 si.AddEventHandler(rh) 39 stopNever := make(chan struct{}) 40 go si.Run(stopNever) 41 42 return &NodesManager{events: events}, nil 43 }