mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
[Kube-scheduler] Lower timeout for leaderelection resourcelock
Migrate how resource lock and leader election config is generated to new way, hidding kubeClient. This also halfs kubeClient timeout, making it an useful value.
This commit is contained in:
parent
9caf675ed1
commit
93cf797c50
@ -266,8 +266,14 @@ func (o *Options) Config() (*schedulerappconfig.Config, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prepare kube config.
|
||||||
|
kubeConfig, err := createKubeConfig(c.ComponentConfig.ClientConnection, o.Master)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// Prepare kube clients.
|
// Prepare kube clients.
|
||||||
client, leaderElectionClient, eventClient, err := createClients(c.ComponentConfig.ClientConnection, o.Master, c.ComponentConfig.LeaderElection.RenewDeadline.Duration)
|
client, eventClient, err := createClients(kubeConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -279,7 +285,7 @@ func (o *Options) Config() (*schedulerappconfig.Config, error) {
|
|||||||
if c.ComponentConfig.LeaderElection.LeaderElect {
|
if c.ComponentConfig.LeaderElection.LeaderElect {
|
||||||
// Use the scheduler name in the first profile to record leader election.
|
// Use the scheduler name in the first profile to record leader election.
|
||||||
coreRecorder := c.EventBroadcaster.DeprecatedNewLegacyRecorder(c.ComponentConfig.Profiles[0].SchedulerName)
|
coreRecorder := c.EventBroadcaster.DeprecatedNewLegacyRecorder(c.ComponentConfig.Profiles[0].SchedulerName)
|
||||||
leaderElectionConfig, err = makeLeaderElectionConfig(c.ComponentConfig.LeaderElection, leaderElectionClient, coreRecorder)
|
leaderElectionConfig, err = makeLeaderElectionConfig(c.ComponentConfig.LeaderElection, kubeConfig, coreRecorder)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -294,7 +300,7 @@ func (o *Options) Config() (*schedulerappconfig.Config, error) {
|
|||||||
|
|
||||||
// makeLeaderElectionConfig builds a leader election configuration. It will
|
// makeLeaderElectionConfig builds a leader election configuration. It will
|
||||||
// create a new resource lock associated with the configuration.
|
// create a new resource lock associated with the configuration.
|
||||||
func makeLeaderElectionConfig(config componentbaseconfig.LeaderElectionConfiguration, client clientset.Interface, recorder record.EventRecorder) (*leaderelection.LeaderElectionConfig, error) {
|
func makeLeaderElectionConfig(config componentbaseconfig.LeaderElectionConfiguration, kubeConfig *restclient.Config, recorder record.EventRecorder) (*leaderelection.LeaderElectionConfig, error) {
|
||||||
hostname, err := os.Hostname()
|
hostname, err := os.Hostname()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("unable to get hostname: %v", err)
|
return nil, fmt.Errorf("unable to get hostname: %v", err)
|
||||||
@ -302,15 +308,15 @@ func makeLeaderElectionConfig(config componentbaseconfig.LeaderElectionConfigura
|
|||||||
// add a uniquifier so that two processes on the same host don't accidentally both become active
|
// add a uniquifier so that two processes on the same host don't accidentally both become active
|
||||||
id := hostname + "_" + string(uuid.NewUUID())
|
id := hostname + "_" + string(uuid.NewUUID())
|
||||||
|
|
||||||
rl, err := resourcelock.New(config.ResourceLock,
|
rl, err := resourcelock.NewFromKubeconfig(config.ResourceLock,
|
||||||
config.ResourceNamespace,
|
config.ResourceNamespace,
|
||||||
config.ResourceName,
|
config.ResourceName,
|
||||||
client.CoreV1(),
|
|
||||||
client.CoordinationV1(),
|
|
||||||
resourcelock.ResourceLockConfig{
|
resourcelock.ResourceLockConfig{
|
||||||
Identity: id,
|
Identity: id,
|
||||||
EventRecorder: recorder,
|
EventRecorder: recorder,
|
||||||
})
|
},
|
||||||
|
kubeConfig,
|
||||||
|
config.RenewDeadline.Duration)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("couldn't create resource lock: %v", err)
|
return nil, fmt.Errorf("couldn't create resource lock: %v", err)
|
||||||
}
|
}
|
||||||
@ -325,9 +331,9 @@ func makeLeaderElectionConfig(config componentbaseconfig.LeaderElectionConfigura
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// createClients creates a kube client and an event client from the given config and masterOverride.
|
// createKubeConfig creates a kubeConfig from the given config and masterOverride.
|
||||||
// TODO remove masterOverride when CLI flags are removed.
|
// TODO remove masterOverride when CLI flags are removed.
|
||||||
func createClients(config componentbaseconfig.ClientConnectionConfiguration, masterOverride string, timeout time.Duration) (clientset.Interface, clientset.Interface, clientset.Interface, error) {
|
func createKubeConfig(config componentbaseconfig.ClientConnectionConfiguration, masterOverride string) (*restclient.Config, error) {
|
||||||
if len(config.Kubeconfig) == 0 && len(masterOverride) == 0 {
|
if len(config.Kubeconfig) == 0 && len(masterOverride) == 0 {
|
||||||
klog.Warningf("Neither --kubeconfig nor --master was specified. Using default API client. This might not work.")
|
klog.Warningf("Neither --kubeconfig nor --master was specified. Using default API client. This might not work.")
|
||||||
}
|
}
|
||||||
@ -338,7 +344,7 @@ func createClients(config componentbaseconfig.ClientConnectionConfiguration, mas
|
|||||||
&clientcmd.ClientConfigLoadingRules{ExplicitPath: config.Kubeconfig},
|
&clientcmd.ClientConfigLoadingRules{ExplicitPath: config.Kubeconfig},
|
||||||
&clientcmd.ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: masterOverride}}).ClientConfig()
|
&clientcmd.ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: masterOverride}}).ClientConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeConfig.DisableCompression = true
|
kubeConfig.DisableCompression = true
|
||||||
@ -347,23 +353,20 @@ func createClients(config componentbaseconfig.ClientConnectionConfiguration, mas
|
|||||||
kubeConfig.QPS = config.QPS
|
kubeConfig.QPS = config.QPS
|
||||||
kubeConfig.Burst = int(config.Burst)
|
kubeConfig.Burst = int(config.Burst)
|
||||||
|
|
||||||
|
return kubeConfig, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// createClients creates a kube client and an event client from the given kubeConfig
|
||||||
|
func createClients(kubeConfig *restclient.Config) (clientset.Interface, clientset.Interface, error) {
|
||||||
client, err := clientset.NewForConfig(restclient.AddUserAgent(kubeConfig, "scheduler"))
|
client, err := clientset.NewForConfig(restclient.AddUserAgent(kubeConfig, "scheduler"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, err
|
||||||
}
|
|
||||||
|
|
||||||
// shallow copy, do not modify the kubeConfig.Timeout.
|
|
||||||
restConfig := *kubeConfig
|
|
||||||
restConfig.Timeout = timeout
|
|
||||||
leaderElectionClient, err := clientset.NewForConfig(restclient.AddUserAgent(&restConfig, "leader-election"))
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, nil, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
eventClient, err := clientset.NewForConfig(kubeConfig)
|
eventClient, err := clientset.NewForConfig(kubeConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return client, leaderElectionClient, eventClient, nil
|
return client, eventClient, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user