From 4bef926218f5474d94e4a002b27f5d1c4aa265b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20K=C3=A4ldstr=C3=B6m?= Date: Tue, 14 Aug 2018 19:02:06 +0300 Subject: [PATCH] Remove references to the config structs that have moved to their own shared packages --- api/api-rules/violation_exceptions.list | 2 - .../app/options/options_test.go | 6 +- .../app/options/debugging.go | 4 +- cmd/controller-manager/app/options/generic.go | 3 +- cmd/controller-manager/app/serve.go | 4 +- .../app/options/options_test.go | 3 +- cmd/kube-scheduler/app/options/options.go | 3 +- .../app/options/options_test.go | 3 +- pkg/apis/componentconfig/types.go | 75 +++--------------- pkg/apis/componentconfig/v1alpha1/defaults.go | 31 +++----- pkg/apis/componentconfig/v1alpha1/doc.go | 7 ++ pkg/apis/componentconfig/v1alpha1/types.go | 77 ++++--------------- pkg/client/leaderelectionconfig/config.go | 6 +- 13 files changed, 59 insertions(+), 165 deletions(-) diff --git a/api/api-rules/violation_exceptions.list b/api/api-rules/violation_exceptions.list index 35403d38e84..ef4d73a0520 100644 --- a/api/api-rules/violation_exceptions.list +++ b/api/api-rules/violation_exceptions.list @@ -71,8 +71,6 @@ API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alp API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,CloudProviderConfiguration,Name API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,CloudProviderConfiguration,CloudConfigFile API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,DaemonSetControllerConfiguration,ConcurrentDaemonSetSyncs -API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,DebuggingConfiguration,EnableProfiling -API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,DebuggingConfiguration,EnableContentionProfiling API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,DeploymentControllerConfiguration,ConcurrentDeploymentSyncs API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,DeploymentControllerConfiguration,DeploymentControllerSyncPeriod API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,DeprecatedControllerConfiguration,DeletingPodsQps diff --git a/cmd/cloud-controller-manager/app/options/options_test.go b/cmd/cloud-controller-manager/app/options/options_test.go index 0f6f54d6eef..84ff245685c 100644 --- a/cmd/cloud-controller-manager/app/options/options_test.go +++ b/cmd/cloud-controller-manager/app/options/options_test.go @@ -26,9 +26,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/diff" + apiserverconfig "k8s.io/apiserver/pkg/apis/config" apiserveroptions "k8s.io/apiserver/pkg/server/options" cmoptions "k8s.io/kubernetes/cmd/controller-manager/app/options" - "k8s.io/kubernetes/pkg/apis/componentconfig" ) func TestDefaultFlags(t *testing.T) { @@ -48,7 +48,7 @@ func TestDefaultFlags(t *testing.T) { KubeAPIQPS: 20.0, KubeAPIBurst: 30, ControllerStartInterval: metav1.Duration{Duration: 0}, - LeaderElection: componentconfig.LeaderElectionConfiguration{ + LeaderElection: apiserverconfig.LeaderElectionConfiguration{ ResourceLock: "endpoints", LeaderElect: true, LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, @@ -145,7 +145,7 @@ func TestAddFlags(t *testing.T) { KubeAPIQPS: 50.0, KubeAPIBurst: 100, ControllerStartInterval: metav1.Duration{Duration: 2 * time.Minute}, - LeaderElection: componentconfig.LeaderElectionConfiguration{ + LeaderElection: apiserverconfig.LeaderElectionConfiguration{ ResourceLock: "configmap", LeaderElect: false, LeaseDuration: metav1.Duration{Duration: 30 * time.Second}, diff --git a/cmd/controller-manager/app/options/debugging.go b/cmd/controller-manager/app/options/debugging.go index fefb015918f..e459b6d4525 100644 --- a/cmd/controller-manager/app/options/debugging.go +++ b/cmd/controller-manager/app/options/debugging.go @@ -19,7 +19,7 @@ package options import ( "github.com/spf13/pflag" - "k8s.io/kubernetes/pkg/apis/componentconfig" + apiserverconfig "k8s.io/apiserver/pkg/apis/config" ) // DebuggingOptions holds the Debugging options. @@ -41,7 +41,7 @@ func (o *DebuggingOptions) AddFlags(fs *pflag.FlagSet) { } // ApplyTo fills up Debugging config with options. -func (o *DebuggingOptions) ApplyTo(cfg *componentconfig.DebuggingConfiguration) error { +func (o *DebuggingOptions) ApplyTo(cfg *apiserverconfig.DebuggingConfiguration) error { if o == nil { return nil } diff --git a/cmd/controller-manager/app/options/generic.go b/cmd/controller-manager/app/options/generic.go index 40d6631749c..66523abb730 100644 --- a/cmd/controller-manager/app/options/generic.go +++ b/cmd/controller-manager/app/options/generic.go @@ -20,6 +20,7 @@ import ( "github.com/spf13/pflag" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + apiserverconfig "k8s.io/apiserver/pkg/apis/config" "k8s.io/kubernetes/pkg/apis/componentconfig" "k8s.io/kubernetes/pkg/client/leaderelectionconfig" ) @@ -31,7 +32,7 @@ type GenericComponentConfigOptions struct { KubeAPIQPS float32 KubeAPIBurst int32 ControllerStartInterval metav1.Duration - LeaderElection componentconfig.LeaderElectionConfiguration + LeaderElection apiserverconfig.LeaderElectionConfiguration } // NewGenericComponentConfigOptions returns generic configuration default values for both diff --git a/cmd/controller-manager/app/serve.go b/cmd/controller-manager/app/serve.go index a6bffbf47a2..a7bd56d08f4 100644 --- a/cmd/controller-manager/app/serve.go +++ b/cmd/controller-manager/app/serve.go @@ -22,6 +22,7 @@ import ( "github.com/prometheus/client_golang/prometheus" + apiserverconfig "k8s.io/apiserver/pkg/apis/config" genericapifilters "k8s.io/apiserver/pkg/endpoints/filters" apirequest "k8s.io/apiserver/pkg/endpoints/request" apiserver "k8s.io/apiserver/pkg/server" @@ -30,7 +31,6 @@ import ( "k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/routes" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/apis/componentconfig" "k8s.io/kubernetes/pkg/util/configz" ) @@ -48,7 +48,7 @@ func BuildHandlerChain(apiHandler http.Handler, authorizationInfo *apiserver.Aut } // NewBaseHandler takes in CompletedConfig and returns a handler. -func NewBaseHandler(c *componentconfig.DebuggingConfiguration) *mux.PathRecorderMux { +func NewBaseHandler(c *apiserverconfig.DebuggingConfiguration) *mux.PathRecorderMux { mux := mux.NewPathRecorderMux("controller-manager") healthz.InstallHandler(mux) if c.EnableProfiling { diff --git a/cmd/kube-controller-manager/app/options/options_test.go b/cmd/kube-controller-manager/app/options/options_test.go index 31962408f28..c5c4b83a0ba 100644 --- a/cmd/kube-controller-manager/app/options/options_test.go +++ b/cmd/kube-controller-manager/app/options/options_test.go @@ -27,6 +27,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/diff" + apiserverconfig "k8s.io/apiserver/pkg/apis/config" apiserveroptions "k8s.io/apiserver/pkg/server/options" cmoptions "k8s.io/kubernetes/cmd/controller-manager/app/options" "k8s.io/kubernetes/pkg/apis/componentconfig" @@ -130,7 +131,7 @@ func TestAddFlags(t *testing.T) { KubeAPIQPS: 50.0, KubeAPIBurst: 100, ControllerStartInterval: metav1.Duration{Duration: 2 * time.Minute}, - LeaderElection: componentconfig.LeaderElectionConfiguration{ + LeaderElection: apiserverconfig.LeaderElectionConfiguration{ ResourceLock: "configmap", LeaderElect: false, LeaseDuration: metav1.Duration{Duration: 30 * time.Second}, diff --git a/cmd/kube-scheduler/app/options/options.go b/cmd/kube-scheduler/app/options/options.go index cb98f5e3ecf..08990fda362 100644 --- a/cmd/kube-scheduler/app/options/options.go +++ b/cmd/kube-scheduler/app/options/options.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/pflag" corev1 "k8s.io/api/core/v1" + apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/uuid" apiserveroptions "k8s.io/apiserver/pkg/server/options" @@ -262,7 +263,7 @@ func makeLeaderElectionConfig(config componentconfig.KubeSchedulerLeaderElection // createClients creates a kube client and an event client from the given config and masterOverride. // TODO remove masterOverride when CLI flags are removed. -func createClients(config componentconfig.ClientConnectionConfiguration, masterOverride string, timeout time.Duration) (clientset.Interface, clientset.Interface, v1core.EventsGetter, error) { +func createClients(config apimachineryconfig.ClientConnectionConfiguration, masterOverride string, timeout time.Duration) (clientset.Interface, clientset.Interface, v1core.EventsGetter, error) { if len(config.Kubeconfig) == 0 && len(masterOverride) == 0 { glog.Warningf("Neither --kubeconfig nor --master was specified. Using default API client. This might not work.") } diff --git a/cmd/kube-scheduler/app/options/options_test.go b/cmd/kube-scheduler/app/options/options_test.go index e241822bf43..e2a53d8deef 100644 --- a/cmd/kube-scheduler/app/options/options_test.go +++ b/cmd/kube-scheduler/app/options/options_test.go @@ -26,6 +26,7 @@ import ( "strings" "testing" + apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" "k8s.io/kubernetes/pkg/apis/componentconfig" ) @@ -141,7 +142,7 @@ users: name: "kubeconfig flag", options: &Options{ ComponentConfig: componentconfig.KubeSchedulerConfiguration{ - ClientConnection: componentconfig.ClientConnectionConfiguration{ + ClientConnection: apimachineryconfig.ClientConnectionConfiguration{ Kubeconfig: flagKubeconfig}}}, expectedUsername: "flag", }, diff --git a/pkg/apis/componentconfig/types.go b/pkg/apis/componentconfig/types.go index c64523ed16b..526ec867e9b 100644 --- a/pkg/apis/componentconfig/types.go +++ b/pkg/apis/componentconfig/types.go @@ -17,25 +17,11 @@ limitations under the License. package componentconfig import ( + apimachineryconfig "k8s.io/apimachinery/pkg/apis/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + apiserverconfig "k8s.io/apiserver/pkg/apis/config" ) -// ClientConnectionConfiguration contains details for constructing a client. -type ClientConnectionConfiguration struct { - // kubeconfig is the path to a KubeConfig file. - Kubeconfig string - // acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the - // default value of 'application/json'. This field will control all connections to the server used by a particular - // client. - AcceptContentTypes string - // contentType is the content type used when sending data to the server from this client. - ContentType string - // qps controls the number of queries per second allowed for this connection. - QPS float32 - // burst allows extra queries to accumulate when a client is exceeding its rate. - Burst int32 -} - // SchedulerPolicyConfigMapKey defines the key of the element in the // scheduler's policy ConfigMap that contains scheduler's policy config. const SchedulerPolicyConfigMapKey string = "policy.cfg" @@ -79,6 +65,11 @@ type SchedulerAlgorithmSource struct { type KubeSchedulerConfiguration struct { metav1.TypeMeta + // DebuggingConfiguration holds profiling- and debugging-related fields + // TODO: DebuggingConfiguration is inlined because it's been like that earlier. + // We might consider making it a "real" sub-struct. + apiserverconfig.DebuggingConfiguration + // schedulerName is name of the scheduler, used to select which pods // will be processed by this scheduler, based on pod's "spec.SchedulerName". SchedulerName string @@ -94,19 +85,13 @@ type KubeSchedulerConfiguration struct { // ClientConnection specifies the kubeconfig file and client connection // settings for the proxy server to use when communicating with the apiserver. - ClientConnection ClientConnectionConfiguration + ClientConnection apimachineryconfig.ClientConnectionConfiguration // HealthzBindAddress is the IP address and port for the health check server to serve on, // defaulting to 0.0.0.0:10251 HealthzBindAddress string // MetricsBindAddress is the IP address and port for the metrics server to // serve on, defaulting to 0.0.0.0:10251. MetricsBindAddress string - // EnableProfiling enables profiling via web interface on /debug/pprof - // handler. Profiling handlers will be handled by metrics server. - EnableProfiling bool - // EnableContentionProfiling enables lock contention profiling, if - // EnableProfiling is true. - EnableContentionProfiling bool // Indicate the "all topologies" set for empty topologyKey when it's used for PreferredDuringScheduling pod anti-affinity. // DEPRECATED: This is no longer used. @@ -119,7 +104,7 @@ type KubeSchedulerConfiguration struct { // KubeSchedulerLeaderElectionConfiguration expands LeaderElectionConfiguration // to include scheduler specific configuration. type KubeSchedulerLeaderElectionConfiguration struct { - LeaderElectionConfiguration + apiserverconfig.LeaderElectionConfiguration // LockObjectNamespace defines the namespace of the lock object LockObjectNamespace string @@ -127,34 +112,6 @@ type KubeSchedulerLeaderElectionConfiguration struct { LockObjectName string } -// LeaderElectionConfiguration defines the configuration of leader election -// clients for components that can run with leader election enabled. -type LeaderElectionConfiguration struct { - // leaderElect enables a leader election client to gain leadership - // before executing the main loop. Enable this when running replicated - // components for high availability. - LeaderElect bool - // leaseDuration is the duration that non-leader candidates will wait - // after observing a leadership renewal until attempting to acquire - // leadership of a led but unrenewed leader slot. This is effectively the - // maximum duration that a leader can be stopped before it is replaced - // by another candidate. This is only applicable if leader election is - // enabled. - LeaseDuration metav1.Duration - // renewDeadline is the interval between attempts by the acting master to - // renew a leadership slot before it stops leading. This must be less - // than or equal to the lease duration. This is only applicable if leader - // election is enabled. - RenewDeadline metav1.Duration - // retryPeriod is the duration the clients should wait between attempting - // acquisition and renewal of a leadership. This is only applicable if - // leader election is enabled. - RetryPeriod metav1.Duration - // resourceLock indicates the resource object type that will be used to lock - // during leader election cycles. - ResourceLock string -} - type GroupResource struct { // group is the group portion of the GroupResource. Group string @@ -170,7 +127,7 @@ type KubeControllerManagerConfiguration struct { // CloudProviderConfiguration holds configuration for CloudProvider related features. CloudProvider CloudProviderConfiguration // DebuggingConfiguration holds configuration for Debugging related features. - Debugging DebuggingConfiguration + Debugging apiserverconfig.DebuggingConfiguration // GenericComponentConfiguration holds configuration for GenericComponent // related features both in cloud controller manager and kube-controller manager. GenericComponent GenericComponentConfiguration @@ -252,7 +209,7 @@ type CloudControllerManagerConfiguration struct { // CloudProviderConfiguration holds configuration for CloudProvider related features. CloudProvider CloudProviderConfiguration // DebuggingConfiguration holds configuration for Debugging related features. - Debugging DebuggingConfiguration + Debugging apiserverconfig.DebuggingConfiguration // GenericComponentConfiguration holds configuration for GenericComponent // related features both in cloud controller manager and kube-controller manager. GenericComponent GenericComponentConfiguration @@ -273,14 +230,6 @@ type CloudProviderConfiguration struct { CloudConfigFile string } -type DebuggingConfiguration struct { - // enableProfiling enables profiling via web interface host:port/debug/pprof/ - EnableProfiling bool - // EnableContentionProfiling enables lock contention profiling, if - // EnableProfiling is true. - EnableContentionProfiling bool -} - type GenericComponentConfiguration struct { // minResyncPeriod is the resync period in reflectors; will be random between // minResyncPeriod and 2*minResyncPeriod. @@ -294,7 +243,7 @@ type GenericComponentConfiguration struct { // How long to wait between starting controller managers ControllerStartInterval metav1.Duration // leaderElection defines the configuration of leader election client. - LeaderElection LeaderElectionConfiguration + LeaderElection apiserverconfig.LeaderElectionConfiguration } type KubeCloudSharedConfiguration struct { diff --git a/pkg/apis/componentconfig/v1alpha1/defaults.go b/pkg/apis/componentconfig/v1alpha1/defaults.go index e44b7447e62..089593b1a76 100644 --- a/pkg/apis/componentconfig/v1alpha1/defaults.go +++ b/pkg/apis/componentconfig/v1alpha1/defaults.go @@ -21,8 +21,10 @@ import ( "strconv" "time" + apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kruntime "k8s.io/apimachinery/pkg/runtime" + apiserverconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1" api "k8s.io/kubernetes/pkg/apis/core" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/master/ports" @@ -163,6 +165,9 @@ func SetDefaults_GenericComponentConfiguration(obj *GenericComponentConfiguratio if obj.ControllerStartInterval == zero { obj.ControllerStartInterval = metav1.Duration{Duration: 0 * time.Second} } + + // Use the default LeaderElectionConfiguration options + apiserverconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection) } func SetDefaults_KubeCloudSharedConfiguration(obj *KubeCloudSharedConfiguration) { @@ -254,12 +259,10 @@ func SetDefaults_KubeSchedulerConfiguration(obj *KubeSchedulerConfiguration) { obj.MetricsBindAddress = net.JoinHostPort("0.0.0.0", strconv.Itoa(ports.SchedulerPort)) } - if len(obj.ClientConnection.ContentType) == 0 { - obj.ClientConnection.ContentType = "application/vnd.kubernetes.protobuf" - } if obj.ClientConnection.QPS == 0.0 { obj.ClientConnection.QPS = 50.0 } + if obj.ClientConnection.Burst == 0 { obj.ClientConnection.Burst = 100 } @@ -274,24 +277,8 @@ func SetDefaults_KubeSchedulerConfiguration(obj *KubeSchedulerConfiguration) { if len(obj.FailureDomains) == 0 { obj.FailureDomains = kubeletapis.DefaultFailureDomains } -} -func SetDefaults_LeaderElectionConfiguration(obj *LeaderElectionConfiguration) { - zero := metav1.Duration{} - if obj.LeaseDuration == zero { - obj.LeaseDuration = metav1.Duration{Duration: 15 * time.Second} - } - if obj.RenewDeadline == zero { - obj.RenewDeadline = metav1.Duration{Duration: 10 * time.Second} - } - if obj.RetryPeriod == zero { - obj.RetryPeriod = metav1.Duration{Duration: 2 * time.Second} - } - if obj.ResourceLock == "" { - // obj.ResourceLock = rl.EndpointsResourceLock - obj.ResourceLock = "endpoints" - } - if obj.LeaderElect == nil { - obj.LeaderElect = utilpointer.BoolPtr(true) - } + // Use the default ClientConnectionConfiguration and LeaderElectionConfiguration options + apimachineryconfigv1alpha1.RecommendedDefaultClientConnectionConfiguration(&obj.ClientConnection) + apiserverconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection.LeaderElectionConfiguration) } diff --git a/pkg/apis/componentconfig/v1alpha1/doc.go b/pkg/apis/componentconfig/v1alpha1/doc.go index e3d63571e58..0cd4bdf9c46 100644 --- a/pkg/apis/componentconfig/v1alpha1/doc.go +++ b/pkg/apis/componentconfig/v1alpha1/doc.go @@ -14,8 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Note: The referenced generic ComponentConfig packages with conversions +// between the types (e.g. the external package) needs to be given as an +// input to conversion-gen for it to find the native conversation funcs to +// call. + // +k8s:deepcopy-gen=package // +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/componentconfig +// +k8s:conversion-gen=k8s.io/apimachinery/pkg/apis/config/v1alpha1 +// +k8s:conversion-gen=k8s.io/apiserver/pkg/apis/config/v1alpha1 // +k8s:openapi-gen=true // +k8s:defaulter-gen=TypeMeta diff --git a/pkg/apis/componentconfig/v1alpha1/types.go b/pkg/apis/componentconfig/v1alpha1/types.go index 07c0236e02a..c6077a638fb 100644 --- a/pkg/apis/componentconfig/v1alpha1/types.go +++ b/pkg/apis/componentconfig/v1alpha1/types.go @@ -17,26 +17,11 @@ limitations under the License. package v1alpha1 import ( + apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + apiserverconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1" ) -// ClientConnectionConfiguration contains details for constructing a client. -// TODO: This struct should be referenced from k8s.io/apimachinery/pkg/apis/config instead. -type ClientConnectionConfiguration struct { - // kubeconfig is the path to a KubeConfig file. - Kubeconfig string `json:"kubeconfig"` - // acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the - // default value of 'application/json'. This field will control all connections to the server used by a particular - // client. - AcceptContentTypes string `json:"acceptContentTypes"` - // contentType is the content type used when sending data to the server from this client. - ContentType string `json:"contentType"` - // qps controls the number of queries per second allowed for this connection. - QPS float32 `json:"qps"` - // burst allows extra queries to accumulate when a client is exceeding its rate. - Burst int32 `json:"burst"` -} - // SchedulerPolicySource configures a means to obtain a scheduler Policy. One // source field must be specified, and source fields are mutually exclusive. type SchedulerPolicySource struct { @@ -76,6 +61,11 @@ type SchedulerAlgorithmSource struct { type KubeSchedulerConfiguration struct { metav1.TypeMeta `json:",inline"` + // DebuggingConfiguration holds profiling- and debugging-related fields + // TODO: DebuggingConfiguration is inlined because it's been like that earlier. + // We might consider making it a "real" sub-struct. + apiserverconfigv1alpha1.DebuggingConfiguration `json:",inline"` + // SchedulerName is name of the scheduler, used to select which pods // will be processed by this scheduler, based on pod's "spec.SchedulerName". SchedulerName string `json:"schedulerName"` @@ -87,23 +77,18 @@ type KubeSchedulerConfiguration struct { HardPodAffinitySymmetricWeight int32 `json:"hardPodAffinitySymmetricWeight"` // LeaderElection defines the configuration of leader election client. + // TODO: Migrate the kube-scheduler-specific stuff into the generic LeaderElectionConfig? LeaderElection KubeSchedulerLeaderElectionConfiguration `json:"leaderElection"` // ClientConnection specifies the kubeconfig file and client connection // settings for the proxy server to use when communicating with the apiserver. - ClientConnection ClientConnectionConfiguration `json:"clientConnection"` + ClientConnection apimachineryconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection"` // HealthzBindAddress is the IP address and port for the health check server to serve on, // defaulting to 0.0.0.0:10251 HealthzBindAddress string `json:"healthzBindAddress"` // MetricsBindAddress is the IP address and port for the metrics server to // serve on, defaulting to 0.0.0.0:10251. MetricsBindAddress string `json:"metricsBindAddress"` - // EnableProfiling enables profiling via web interface on /debug/pprof - // handler. Profiling handlers will be handled by metrics server. - EnableProfiling bool `json:"enableProfiling"` - // EnableContentionProfiling enables lock contention profiling, if - // EnableProfiling is true. - EnableContentionProfiling bool `json:"enableContentionProfiling"` // Indicate the "all topologies" set for empty topologyKey when it's used for PreferredDuringScheduling pod anti-affinity. FailureDomains string `json:"failureDomains"` @@ -112,38 +97,10 @@ type KubeSchedulerConfiguration struct { DisablePreemption bool `json:"disablePreemption"` } -// LeaderElectionConfiguration defines the configuration of leader election -// clients for components that can run with leader election enabled. -type LeaderElectionConfiguration struct { - // leaderElect enables a leader election client to gain leadership - // before executing the main loop. Enable this when running replicated - // components for high availability. - LeaderElect *bool `json:"leaderElect"` - // leaseDuration is the duration that non-leader candidates will wait - // after observing a leadership renewal until attempting to acquire - // leadership of a led but unrenewed leader slot. This is effectively the - // maximum duration that a leader can be stopped before it is replaced - // by another candidate. This is only applicable if leader election is - // enabled. - LeaseDuration metav1.Duration `json:"leaseDuration"` - // renewDeadline is the interval between attempts by the acting master to - // renew a leadership slot before it stops leading. This must be less - // than or equal to the lease duration. This is only applicable if leader - // election is enabled. - RenewDeadline metav1.Duration `json:"renewDeadline"` - // retryPeriod is the duration the clients should wait between attempting - // acquisition and renewal of a leadership. This is only applicable if - // leader election is enabled. - RetryPeriod metav1.Duration `json:"retryPeriod"` - // resourceLock indicates the resource object type that will be used to lock - // during leader election cycles. - ResourceLock string `json:"resourceLock"` -} - // KubeSchedulerLeaderElectionConfiguration expands LeaderElectionConfiguration // to include scheduler specific configuration. type KubeSchedulerLeaderElectionConfiguration struct { - LeaderElectionConfiguration `json:",inline"` + apiserverconfigv1alpha1.LeaderElectionConfiguration `json:",inline"` // LockObjectNamespace defines the namespace of the lock object LockObjectNamespace string `json:"lockObjectNamespace"` // LockObjectName defines the lock object name @@ -213,7 +170,7 @@ type KubeControllerManagerConfiguration struct { // CloudProviderConfiguration holds configuration for CloudProvider related features. CloudProvider CloudProviderConfiguration // DebuggingConfiguration holds configuration for Debugging related features. - Debugging DebuggingConfiguration + Debugging apiserverconfigv1alpha1.DebuggingConfiguration // GenericComponentConfiguration holds configuration for GenericComponent // related features both in cloud controller manager and kube-controller manager. GenericComponent GenericComponentConfiguration @@ -295,7 +252,7 @@ type CloudControllerManagerConfiguration struct { // CloudProviderConfiguration holds configuration for CloudProvider related features. CloudProvider CloudProviderConfiguration // DebuggingConfiguration holds configuration for Debugging related features. - Debugging DebuggingConfiguration + Debugging apiserverconfigv1alpha1.DebuggingConfiguration // GenericComponentConfiguration holds configuration for GenericComponent // related features both in cloud controller manager and kube-controller manager. GenericComponent GenericComponentConfiguration @@ -316,14 +273,6 @@ type CloudProviderConfiguration struct { CloudConfigFile string } -type DebuggingConfiguration struct { - // enableProfiling enables profiling via web interface host:port/debug/pprof/ - EnableProfiling bool - // EnableContentionProfiling enables lock contention profiling, if - // EnableProfiling is true. - EnableContentionProfiling bool -} - type GenericComponentConfiguration struct { // minResyncPeriod is the resync period in reflectors; will be random between @@ -338,7 +287,7 @@ type GenericComponentConfiguration struct { // How long to wait between starting controller managers ControllerStartInterval metav1.Duration // leaderElection defines the configuration of leader election client. - LeaderElection LeaderElectionConfiguration + LeaderElection apiserverconfigv1alpha1.LeaderElectionConfiguration } type KubeCloudSharedConfiguration struct { diff --git a/pkg/client/leaderelectionconfig/config.go b/pkg/client/leaderelectionconfig/config.go index acbcee8fc51..310f1313795 100644 --- a/pkg/client/leaderelectionconfig/config.go +++ b/pkg/client/leaderelectionconfig/config.go @@ -20,15 +20,15 @@ import ( "time" "github.com/spf13/pflag" - "k8s.io/kubernetes/pkg/apis/componentconfig" + apiserverconfig "k8s.io/apiserver/pkg/apis/config" ) const ( DefaultLeaseDuration = 15 * time.Second ) -// BindFlags binds the common LeaderElectionCLIConfig flags to a flagset -func BindFlags(l *componentconfig.LeaderElectionConfiguration, fs *pflag.FlagSet) { +// BindFlags binds the LeaderElectionConfiguration struct fields to a flagset +func BindFlags(l *apiserverconfig.LeaderElectionConfiguration, fs *pflag.FlagSet) { fs.BoolVar(&l.LeaderElect, "leader-elect", l.LeaderElect, ""+ "Start a leader election client and gain leadership before "+ "executing the main loop. Enable this when running replicated "+