From 9e0a4b69e828dd5576d6d405b99c832b06f782d3 Mon Sep 17 00:00:00 2001 From: yuswift Date: Mon, 21 Dec 2020 12:28:24 +0800 Subject: [PATCH] support configurable cluster resync perioud Signed-off-by: yuswift --- cmd/controller-manager/app/controllers.go | 8 +++++-- cmd/controller-manager/app/server.go | 2 +- pkg/controller/cluster/cluster_controller.go | 21 +++++++--------- pkg/simple/client/multicluster/options.go | 25 +++++++++++++++----- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/cmd/controller-manager/app/controllers.go b/cmd/controller-manager/app/controllers.go index 77585ff4b..cb90b5903 100644 --- a/cmd/controller-manager/app/controllers.go +++ b/cmd/controller-manager/app/controllers.go @@ -52,6 +52,7 @@ import ( "kubesphere.io/kubesphere/pkg/simple/client/devops" "kubesphere.io/kubesphere/pkg/simple/client/k8s" ldapclient "kubesphere.io/kubesphere/pkg/simple/client/ldap" + "kubesphere.io/kubesphere/pkg/simple/client/multicluster" "kubesphere.io/kubesphere/pkg/simple/client/network" ippoolclient "kubesphere.io/kubesphere/pkg/simple/client/network/ippool" calicoclient "kubesphere.io/kubesphere/pkg/simple/client/network/ippool/calico" @@ -71,7 +72,7 @@ func addControllers( options *k8s.KubernetesOptions, authenticationOptions *authoptions.AuthenticationOptions, openpitrixClient openpitrix.Client, - multiClusterEnabled bool, + multiClusterOptions *multicluster.Options, networkOptions *network.Options, serviceMeshEnabled bool, kubectlImage string, @@ -82,6 +83,8 @@ func addControllers( kubesphereInformer := informerFactory.KubeSphereSharedInformerFactory() applicationInformer := informerFactory.ApplicationSharedInformerFactory() + multiClusterEnabled := multiClusterOptions.Enable + var vsController, drController manager.Runnable if serviceMeshEnabled { vsController = virtualservice.NewVirtualServiceController(kubernetesInformer.Core().V1().Services(), @@ -278,7 +281,8 @@ func addControllers( client.Config(), kubesphereInformer.Cluster().V1alpha1().Clusters(), client.KubeSphere().ClusterV1alpha1().Clusters(), - openpitrixClient) + openpitrixClient, + multiClusterOptions.ClusterControllerResyncSecond) } var nsnpController manager.Runnable diff --git a/cmd/controller-manager/app/server.go b/cmd/controller-manager/app/server.go index da7998e55..92c18f950 100644 --- a/cmd/controller-manager/app/server.go +++ b/cmd/controller-manager/app/server.go @@ -217,7 +217,7 @@ func run(s *options.KubeSphereControllerManagerOptions, stopCh <-chan struct{}) s.KubernetesOptions, s.AuthenticationOptions, openpitrixClient, - s.MultiClusterOptions.Enable, + s.MultiClusterOptions, s.NetworkOptions, servicemeshEnabled, s.AuthenticationOptions.KubectlImage, stopCh); err != nil { diff --git a/pkg/controller/cluster/cluster_controller.go b/pkg/controller/cluster/cluster_controller.go index c3c179196..9de16f21b 100644 --- a/pkg/controller/cluster/cluster_controller.go +++ b/pkg/controller/cluster/cluster_controller.go @@ -157,6 +157,8 @@ type clusterController struct { mu sync.RWMutex clusterMap map[string]*clusterData + + resyncPeriod time.Duration } func NewClusterController( @@ -165,6 +167,7 @@ func NewClusterController( clusterInformer clusterinformer.ClusterInformer, clusterClient clusterclient.ClusterInterface, openpitrixClient openpitrix.Client, + resyncPeriod time.Duration, ) *clusterController { broadcaster := record.NewBroadcaster() @@ -184,23 +187,18 @@ func NewClusterController( queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "cluster"), workerLoopPeriod: time.Second, clusterMap: make(map[string]*clusterData), + resyncPeriod: resyncPeriod, } - c.clusterLister = clusterInformer.Lister() c.clusterHasSynced = clusterInformer.Informer().HasSynced - clusterInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + clusterInformer.Informer().AddEventHandlerWithResyncPeriod(cache.ResourceEventHandlerFuncs{ AddFunc: c.addCluster, UpdateFunc: func(oldObj, newObj interface{}) { - newCluster := newObj.(*clusterv1alpha1.Cluster) - oldCluster := oldObj.(*clusterv1alpha1.Cluster) - if newCluster.ResourceVersion == oldCluster.ResourceVersion { - return - } c.addCluster(newObj) }, DeleteFunc: c.addCluster, - }) + }, resyncPeriod) return c } @@ -226,15 +224,11 @@ func (c *clusterController) Run(workers int, stopCh <-chan struct{}) error { // refresh cluster configz every 2 minutes go wait.Until(func() { - if err := c.syncStatus(); err != nil { - klog.Errorf("Error periodically sync cluster status, %v", err) - } - if err := c.reconcileHostCluster(); err != nil { klog.Errorf("Error create host cluster, error %v", err) } - }, 2*time.Minute, stopCh) + }, c.resyncPeriod, stopCh) <-stopCh return nil @@ -354,6 +348,7 @@ func (c *clusterController) reconcileHostCluster() error { } func (c *clusterController) syncCluster(key string) error { + klog.V(5).Infof("starting to sync cluster %s", key) startTime := time.Now() _, name, err := cache.SplitMetaNamespaceKey(key) diff --git a/pkg/simple/client/multicluster/options.go b/pkg/simple/client/multicluster/options.go index bde771230..7c31cc3fd 100644 --- a/pkg/simple/client/multicluster/options.go +++ b/pkg/simple/client/multicluster/options.go @@ -16,7 +16,13 @@ limitations under the License. package multicluster -import "github.com/spf13/pflag" +import ( + "time" + + "github.com/spf13/pflag" +) + +const DefaultResyncPeriod = time.Duration(120) * time.Second type Options struct { // Enable @@ -36,16 +42,20 @@ type Options struct { // AgentImage is the image used when generating deployment for all cluster agents. AgentImage string `json:"agentImage,omitempty"` + + // ClusterControllerResyncSecond is the resync period used by cluster controller. + ClusterControllerResyncSecond time.Duration `json:"clusterControllerResyncSecond,omitempty" yaml:"clusterControllerResyncSecond"` } // NewOptions() returns a default nil options func NewOptions() *Options { return &Options{ - Enable: false, - EnableFederation: false, - ProxyPublishAddress: "", - ProxyPublishService: "", - AgentImage: "kubesphere/tower:v1.0", + Enable: false, + EnableFederation: false, + ProxyPublishAddress: "", + ProxyPublishService: "", + AgentImage: "kubesphere/tower:v1.0", + ClusterControllerResyncSecond: DefaultResyncPeriod, } } @@ -67,4 +77,7 @@ func (o *Options) AddFlags(fs *pflag.FlagSet, s *Options) { fs.StringVar(&o.AgentImage, "agent-image", s.AgentImage, ""+ "This field is used when generating deployment yaml for agent.") + + fs.DurationVar(&o.ClusterControllerResyncSecond, "cluster-controller-resync-second", s.ClusterControllerResyncSecond, + "Cluster controller resync second to sync cluster resource.") }