support configurable cluster resync perioud
Signed-off-by: yuswift <yuswiftli@yunify.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,6 +42,9 @@ 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
|
||||
@@ -46,6 +55,7 @@ func NewOptions() *Options {
|
||||
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.")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user