mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
Merge pull request #81185 from andrewsykim/service-controller-node-resync
service controller: add node event handlers for faster LB backend sync
This commit is contained in:
commit
3a0417cc4b
@ -19,11 +19,10 @@ package service
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"reflect"
|
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
@ -96,6 +95,7 @@ type serviceCache struct {
|
|||||||
type Controller struct {
|
type Controller struct {
|
||||||
cloud cloudprovider.Interface
|
cloud cloudprovider.Interface
|
||||||
knownHosts []*v1.Node
|
knownHosts []*v1.Node
|
||||||
|
knownHostsLock sync.Mutex
|
||||||
servicesToUpdate []*v1.Service
|
servicesToUpdate []*v1.Service
|
||||||
kubeClient clientset.Interface
|
kubeClient clientset.Interface
|
||||||
clusterName string
|
clusterName string
|
||||||
@ -170,6 +170,21 @@ func New(
|
|||||||
s.serviceLister = serviceInformer.Lister()
|
s.serviceLister = serviceInformer.Lister()
|
||||||
s.serviceListerSynced = serviceInformer.Informer().HasSynced
|
s.serviceListerSynced = serviceInformer.Informer().HasSynced
|
||||||
|
|
||||||
|
nodeInformer.Informer().AddEventHandlerWithResyncPeriod(
|
||||||
|
cache.ResourceEventHandlerFuncs{
|
||||||
|
AddFunc: func(cur interface{}) {
|
||||||
|
s.nodeSyncLoop()
|
||||||
|
},
|
||||||
|
UpdateFunc: func(old, cur interface{}) {
|
||||||
|
s.nodeSyncLoop()
|
||||||
|
},
|
||||||
|
DeleteFunc: func(old interface{}) {
|
||||||
|
s.nodeSyncLoop()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
time.Duration(0),
|
||||||
|
)
|
||||||
|
|
||||||
if err := s.init(); err != nil {
|
if err := s.init(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -637,6 +652,8 @@ func getNodeConditionPredicate() NodeConditionPredicate {
|
|||||||
// nodeSyncLoop handles updating the hosts pointed to by all load
|
// nodeSyncLoop handles updating the hosts pointed to by all load
|
||||||
// balancers whenever the set of nodes in the cluster changes.
|
// balancers whenever the set of nodes in the cluster changes.
|
||||||
func (s *Controller) nodeSyncLoop() {
|
func (s *Controller) nodeSyncLoop() {
|
||||||
|
s.knownHostsLock.Lock()
|
||||||
|
defer s.knownHostsLock.Unlock()
|
||||||
newHosts, err := listWithPredicate(s.nodeLister, getNodeConditionPredicate())
|
newHosts, err := listWithPredicate(s.nodeLister, getNodeConditionPredicate())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
runtime.HandleError(fmt.Errorf("Failed to retrieve current set of nodes from node lister: %v", err))
|
runtime.HandleError(fmt.Errorf("Failed to retrieve current set of nodes from node lister: %v", err))
|
||||||
|
Loading…
Reference in New Issue
Block a user