Remove references to the config structs that have moved to their own shared packages

This commit is contained in:
Lucas Käldström 2018-08-14 19:02:06 +03:00
parent 6274590518
commit 4bef926218
No known key found for this signature in database
GPG Key ID: 3FA3783D77751514
13 changed files with 59 additions and 165 deletions

View File

@ -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,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,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,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,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,DeploymentControllerConfiguration,DeploymentControllerSyncPeriod
API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,DeprecatedControllerConfiguration,DeletingPodsQps API rule violation: names_match,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,DeprecatedControllerConfiguration,DeletingPodsQps

View File

@ -26,9 +26,9 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
apiserverconfig "k8s.io/apiserver/pkg/apis/config"
apiserveroptions "k8s.io/apiserver/pkg/server/options" apiserveroptions "k8s.io/apiserver/pkg/server/options"
cmoptions "k8s.io/kubernetes/cmd/controller-manager/app/options" cmoptions "k8s.io/kubernetes/cmd/controller-manager/app/options"
"k8s.io/kubernetes/pkg/apis/componentconfig"
) )
func TestDefaultFlags(t *testing.T) { func TestDefaultFlags(t *testing.T) {
@ -48,7 +48,7 @@ func TestDefaultFlags(t *testing.T) {
KubeAPIQPS: 20.0, KubeAPIQPS: 20.0,
KubeAPIBurst: 30, KubeAPIBurst: 30,
ControllerStartInterval: metav1.Duration{Duration: 0}, ControllerStartInterval: metav1.Duration{Duration: 0},
LeaderElection: componentconfig.LeaderElectionConfiguration{ LeaderElection: apiserverconfig.LeaderElectionConfiguration{
ResourceLock: "endpoints", ResourceLock: "endpoints",
LeaderElect: true, LeaderElect: true,
LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
@ -145,7 +145,7 @@ func TestAddFlags(t *testing.T) {
KubeAPIQPS: 50.0, KubeAPIQPS: 50.0,
KubeAPIBurst: 100, KubeAPIBurst: 100,
ControllerStartInterval: metav1.Duration{Duration: 2 * time.Minute}, ControllerStartInterval: metav1.Duration{Duration: 2 * time.Minute},
LeaderElection: componentconfig.LeaderElectionConfiguration{ LeaderElection: apiserverconfig.LeaderElectionConfiguration{
ResourceLock: "configmap", ResourceLock: "configmap",
LeaderElect: false, LeaderElect: false,
LeaseDuration: metav1.Duration{Duration: 30 * time.Second}, LeaseDuration: metav1.Duration{Duration: 30 * time.Second},

View File

@ -19,7 +19,7 @@ package options
import ( import (
"github.com/spf13/pflag" "github.com/spf13/pflag"
"k8s.io/kubernetes/pkg/apis/componentconfig" apiserverconfig "k8s.io/apiserver/pkg/apis/config"
) )
// DebuggingOptions holds the Debugging options. // DebuggingOptions holds the Debugging options.
@ -41,7 +41,7 @@ func (o *DebuggingOptions) AddFlags(fs *pflag.FlagSet) {
} }
// ApplyTo fills up Debugging config with options. // 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 { if o == nil {
return nil return nil
} }

View File

@ -20,6 +20,7 @@ import (
"github.com/spf13/pflag" "github.com/spf13/pflag"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 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/apis/componentconfig"
"k8s.io/kubernetes/pkg/client/leaderelectionconfig" "k8s.io/kubernetes/pkg/client/leaderelectionconfig"
) )
@ -31,7 +32,7 @@ type GenericComponentConfigOptions struct {
KubeAPIQPS float32 KubeAPIQPS float32
KubeAPIBurst int32 KubeAPIBurst int32
ControllerStartInterval metav1.Duration ControllerStartInterval metav1.Duration
LeaderElection componentconfig.LeaderElectionConfiguration LeaderElection apiserverconfig.LeaderElectionConfiguration
} }
// NewGenericComponentConfigOptions returns generic configuration default values for both // NewGenericComponentConfigOptions returns generic configuration default values for both

View File

@ -22,6 +22,7 @@ import (
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
apiserverconfig "k8s.io/apiserver/pkg/apis/config"
genericapifilters "k8s.io/apiserver/pkg/endpoints/filters" genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
apirequest "k8s.io/apiserver/pkg/endpoints/request" apirequest "k8s.io/apiserver/pkg/endpoints/request"
apiserver "k8s.io/apiserver/pkg/server" apiserver "k8s.io/apiserver/pkg/server"
@ -30,7 +31,6 @@ import (
"k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/mux"
"k8s.io/apiserver/pkg/server/routes" "k8s.io/apiserver/pkg/server/routes"
"k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/apis/componentconfig"
"k8s.io/kubernetes/pkg/util/configz" "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. // 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") mux := mux.NewPathRecorderMux("controller-manager")
healthz.InstallHandler(mux) healthz.InstallHandler(mux)
if c.EnableProfiling { if c.EnableProfiling {

View File

@ -27,6 +27,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
apiserverconfig "k8s.io/apiserver/pkg/apis/config"
apiserveroptions "k8s.io/apiserver/pkg/server/options" apiserveroptions "k8s.io/apiserver/pkg/server/options"
cmoptions "k8s.io/kubernetes/cmd/controller-manager/app/options" cmoptions "k8s.io/kubernetes/cmd/controller-manager/app/options"
"k8s.io/kubernetes/pkg/apis/componentconfig" "k8s.io/kubernetes/pkg/apis/componentconfig"
@ -130,7 +131,7 @@ func TestAddFlags(t *testing.T) {
KubeAPIQPS: 50.0, KubeAPIQPS: 50.0,
KubeAPIBurst: 100, KubeAPIBurst: 100,
ControllerStartInterval: metav1.Duration{Duration: 2 * time.Minute}, ControllerStartInterval: metav1.Duration{Duration: 2 * time.Minute},
LeaderElection: componentconfig.LeaderElectionConfiguration{ LeaderElection: apiserverconfig.LeaderElectionConfiguration{
ResourceLock: "configmap", ResourceLock: "configmap",
LeaderElect: false, LeaderElect: false,
LeaseDuration: metav1.Duration{Duration: 30 * time.Second}, LeaseDuration: metav1.Duration{Duration: 30 * time.Second},

View File

@ -27,6 +27,7 @@ import (
"github.com/spf13/pflag" "github.com/spf13/pflag"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
apimachineryconfig "k8s.io/apimachinery/pkg/apis/config"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/uuid"
apiserveroptions "k8s.io/apiserver/pkg/server/options" 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. // createClients creates a kube client and an event client 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 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 { if len(config.Kubeconfig) == 0 && len(masterOverride) == 0 {
glog.Warningf("Neither --kubeconfig nor --master was specified. Using default API client. This might not work.") glog.Warningf("Neither --kubeconfig nor --master was specified. Using default API client. This might not work.")
} }

View File

@ -26,6 +26,7 @@ import (
"strings" "strings"
"testing" "testing"
apimachineryconfig "k8s.io/apimachinery/pkg/apis/config"
"k8s.io/kubernetes/pkg/apis/componentconfig" "k8s.io/kubernetes/pkg/apis/componentconfig"
) )
@ -141,7 +142,7 @@ users:
name: "kubeconfig flag", name: "kubeconfig flag",
options: &Options{ options: &Options{
ComponentConfig: componentconfig.KubeSchedulerConfiguration{ ComponentConfig: componentconfig.KubeSchedulerConfiguration{
ClientConnection: componentconfig.ClientConnectionConfiguration{ ClientConnection: apimachineryconfig.ClientConnectionConfiguration{
Kubeconfig: flagKubeconfig}}}, Kubeconfig: flagKubeconfig}}},
expectedUsername: "flag", expectedUsername: "flag",
}, },

View File

@ -17,25 +17,11 @@ limitations under the License.
package componentconfig package componentconfig
import ( import (
apimachineryconfig "k8s.io/apimachinery/pkg/apis/config"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 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 // SchedulerPolicyConfigMapKey defines the key of the element in the
// scheduler's policy ConfigMap that contains scheduler's policy config. // scheduler's policy ConfigMap that contains scheduler's policy config.
const SchedulerPolicyConfigMapKey string = "policy.cfg" const SchedulerPolicyConfigMapKey string = "policy.cfg"
@ -79,6 +65,11 @@ type SchedulerAlgorithmSource struct {
type KubeSchedulerConfiguration struct { type KubeSchedulerConfiguration struct {
metav1.TypeMeta 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 // schedulerName is name of the scheduler, used to select which pods
// will be processed by this scheduler, based on pod's "spec.SchedulerName". // will be processed by this scheduler, based on pod's "spec.SchedulerName".
SchedulerName string SchedulerName string
@ -94,19 +85,13 @@ type KubeSchedulerConfiguration struct {
// ClientConnection specifies the kubeconfig file and client connection // ClientConnection specifies the kubeconfig file and client connection
// settings for the proxy server to use when communicating with the apiserver. // 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, // HealthzBindAddress is the IP address and port for the health check server to serve on,
// defaulting to 0.0.0.0:10251 // defaulting to 0.0.0.0:10251
HealthzBindAddress string HealthzBindAddress string
// MetricsBindAddress is the IP address and port for the metrics server to // MetricsBindAddress is the IP address and port for the metrics server to
// serve on, defaulting to 0.0.0.0:10251. // serve on, defaulting to 0.0.0.0:10251.
MetricsBindAddress string 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. // Indicate the "all topologies" set for empty topologyKey when it's used for PreferredDuringScheduling pod anti-affinity.
// DEPRECATED: This is no longer used. // DEPRECATED: This is no longer used.
@ -119,7 +104,7 @@ type KubeSchedulerConfiguration struct {
// KubeSchedulerLeaderElectionConfiguration expands LeaderElectionConfiguration // KubeSchedulerLeaderElectionConfiguration expands LeaderElectionConfiguration
// to include scheduler specific configuration. // to include scheduler specific configuration.
type KubeSchedulerLeaderElectionConfiguration struct { type KubeSchedulerLeaderElectionConfiguration struct {
LeaderElectionConfiguration apiserverconfig.LeaderElectionConfiguration
// LockObjectNamespace defines the namespace of the lock object // LockObjectNamespace defines the namespace of the lock object
LockObjectNamespace string LockObjectNamespace string
@ -127,34 +112,6 @@ type KubeSchedulerLeaderElectionConfiguration struct {
LockObjectName string 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 { type GroupResource struct {
// group is the group portion of the GroupResource. // group is the group portion of the GroupResource.
Group string Group string
@ -170,7 +127,7 @@ type KubeControllerManagerConfiguration struct {
// CloudProviderConfiguration holds configuration for CloudProvider related features. // CloudProviderConfiguration holds configuration for CloudProvider related features.
CloudProvider CloudProviderConfiguration CloudProvider CloudProviderConfiguration
// DebuggingConfiguration holds configuration for Debugging related features. // DebuggingConfiguration holds configuration for Debugging related features.
Debugging DebuggingConfiguration Debugging apiserverconfig.DebuggingConfiguration
// GenericComponentConfiguration holds configuration for GenericComponent // GenericComponentConfiguration holds configuration for GenericComponent
// related features both in cloud controller manager and kube-controller manager. // related features both in cloud controller manager and kube-controller manager.
GenericComponent GenericComponentConfiguration GenericComponent GenericComponentConfiguration
@ -252,7 +209,7 @@ type CloudControllerManagerConfiguration struct {
// CloudProviderConfiguration holds configuration for CloudProvider related features. // CloudProviderConfiguration holds configuration for CloudProvider related features.
CloudProvider CloudProviderConfiguration CloudProvider CloudProviderConfiguration
// DebuggingConfiguration holds configuration for Debugging related features. // DebuggingConfiguration holds configuration for Debugging related features.
Debugging DebuggingConfiguration Debugging apiserverconfig.DebuggingConfiguration
// GenericComponentConfiguration holds configuration for GenericComponent // GenericComponentConfiguration holds configuration for GenericComponent
// related features both in cloud controller manager and kube-controller manager. // related features both in cloud controller manager and kube-controller manager.
GenericComponent GenericComponentConfiguration GenericComponent GenericComponentConfiguration
@ -273,14 +230,6 @@ type CloudProviderConfiguration struct {
CloudConfigFile string 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 { type GenericComponentConfiguration struct {
// minResyncPeriod is the resync period in reflectors; will be random between // minResyncPeriod is the resync period in reflectors; will be random between
// minResyncPeriod and 2*minResyncPeriod. // minResyncPeriod and 2*minResyncPeriod.
@ -294,7 +243,7 @@ type GenericComponentConfiguration struct {
// How long to wait between starting controller managers // How long to wait between starting controller managers
ControllerStartInterval metav1.Duration ControllerStartInterval metav1.Duration
// leaderElection defines the configuration of leader election client. // leaderElection defines the configuration of leader election client.
LeaderElection LeaderElectionConfiguration LeaderElection apiserverconfig.LeaderElectionConfiguration
} }
type KubeCloudSharedConfiguration struct { type KubeCloudSharedConfiguration struct {

View File

@ -21,8 +21,10 @@ import (
"strconv" "strconv"
"time" "time"
apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kruntime "k8s.io/apimachinery/pkg/runtime" kruntime "k8s.io/apimachinery/pkg/runtime"
apiserverconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1"
api "k8s.io/kubernetes/pkg/apis/core" api "k8s.io/kubernetes/pkg/apis/core"
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
"k8s.io/kubernetes/pkg/master/ports" "k8s.io/kubernetes/pkg/master/ports"
@ -163,6 +165,9 @@ func SetDefaults_GenericComponentConfiguration(obj *GenericComponentConfiguratio
if obj.ControllerStartInterval == zero { if obj.ControllerStartInterval == zero {
obj.ControllerStartInterval = metav1.Duration{Duration: 0 * time.Second} obj.ControllerStartInterval = metav1.Duration{Duration: 0 * time.Second}
} }
// Use the default LeaderElectionConfiguration options
apiserverconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection)
} }
func SetDefaults_KubeCloudSharedConfiguration(obj *KubeCloudSharedConfiguration) { 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)) 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 { if obj.ClientConnection.QPS == 0.0 {
obj.ClientConnection.QPS = 50.0 obj.ClientConnection.QPS = 50.0
} }
if obj.ClientConnection.Burst == 0 { if obj.ClientConnection.Burst == 0 {
obj.ClientConnection.Burst = 100 obj.ClientConnection.Burst = 100
} }
@ -274,24 +277,8 @@ func SetDefaults_KubeSchedulerConfiguration(obj *KubeSchedulerConfiguration) {
if len(obj.FailureDomains) == 0 { if len(obj.FailureDomains) == 0 {
obj.FailureDomains = kubeletapis.DefaultFailureDomains obj.FailureDomains = kubeletapis.DefaultFailureDomains
} }
}
func SetDefaults_LeaderElectionConfiguration(obj *LeaderElectionConfiguration) { // Use the default ClientConnectionConfiguration and LeaderElectionConfiguration options
zero := metav1.Duration{} apimachineryconfigv1alpha1.RecommendedDefaultClientConnectionConfiguration(&obj.ClientConnection)
if obj.LeaseDuration == zero { apiserverconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection.LeaderElectionConfiguration)
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)
}
} }

View File

@ -14,8 +14,15 @@ See the License for the specific language governing permissions and
limitations under the License. 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:deepcopy-gen=package
// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/componentconfig // +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:openapi-gen=true
// +k8s:defaulter-gen=TypeMeta // +k8s:defaulter-gen=TypeMeta

View File

@ -17,26 +17,11 @@ limitations under the License.
package v1alpha1 package v1alpha1
import ( import (
apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 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 // SchedulerPolicySource configures a means to obtain a scheduler Policy. One
// source field must be specified, and source fields are mutually exclusive. // source field must be specified, and source fields are mutually exclusive.
type SchedulerPolicySource struct { type SchedulerPolicySource struct {
@ -76,6 +61,11 @@ type SchedulerAlgorithmSource struct {
type KubeSchedulerConfiguration struct { type KubeSchedulerConfiguration struct {
metav1.TypeMeta `json:",inline"` 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 // SchedulerName is name of the scheduler, used to select which pods
// will be processed by this scheduler, based on pod's "spec.SchedulerName". // will be processed by this scheduler, based on pod's "spec.SchedulerName".
SchedulerName string `json:"schedulerName"` SchedulerName string `json:"schedulerName"`
@ -87,23 +77,18 @@ type KubeSchedulerConfiguration struct {
HardPodAffinitySymmetricWeight int32 `json:"hardPodAffinitySymmetricWeight"` HardPodAffinitySymmetricWeight int32 `json:"hardPodAffinitySymmetricWeight"`
// LeaderElection defines the configuration of leader election client. // LeaderElection defines the configuration of leader election client.
// TODO: Migrate the kube-scheduler-specific stuff into the generic LeaderElectionConfig?
LeaderElection KubeSchedulerLeaderElectionConfiguration `json:"leaderElection"` LeaderElection KubeSchedulerLeaderElectionConfiguration `json:"leaderElection"`
// ClientConnection specifies the kubeconfig file and client connection // ClientConnection specifies the kubeconfig file and client connection
// settings for the proxy server to use when communicating with the apiserver. // 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, // HealthzBindAddress is the IP address and port for the health check server to serve on,
// defaulting to 0.0.0.0:10251 // defaulting to 0.0.0.0:10251
HealthzBindAddress string `json:"healthzBindAddress"` HealthzBindAddress string `json:"healthzBindAddress"`
// MetricsBindAddress is the IP address and port for the metrics server to // MetricsBindAddress is the IP address and port for the metrics server to
// serve on, defaulting to 0.0.0.0:10251. // serve on, defaulting to 0.0.0.0:10251.
MetricsBindAddress string `json:"metricsBindAddress"` 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. // Indicate the "all topologies" set for empty topologyKey when it's used for PreferredDuringScheduling pod anti-affinity.
FailureDomains string `json:"failureDomains"` FailureDomains string `json:"failureDomains"`
@ -112,38 +97,10 @@ type KubeSchedulerConfiguration struct {
DisablePreemption bool `json:"disablePreemption"` 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 // KubeSchedulerLeaderElectionConfiguration expands LeaderElectionConfiguration
// to include scheduler specific configuration. // to include scheduler specific configuration.
type KubeSchedulerLeaderElectionConfiguration struct { type KubeSchedulerLeaderElectionConfiguration struct {
LeaderElectionConfiguration `json:",inline"` apiserverconfigv1alpha1.LeaderElectionConfiguration `json:",inline"`
// LockObjectNamespace defines the namespace of the lock object // LockObjectNamespace defines the namespace of the lock object
LockObjectNamespace string `json:"lockObjectNamespace"` LockObjectNamespace string `json:"lockObjectNamespace"`
// LockObjectName defines the lock object name // LockObjectName defines the lock object name
@ -213,7 +170,7 @@ type KubeControllerManagerConfiguration struct {
// CloudProviderConfiguration holds configuration for CloudProvider related features. // CloudProviderConfiguration holds configuration for CloudProvider related features.
CloudProvider CloudProviderConfiguration CloudProvider CloudProviderConfiguration
// DebuggingConfiguration holds configuration for Debugging related features. // DebuggingConfiguration holds configuration for Debugging related features.
Debugging DebuggingConfiguration Debugging apiserverconfigv1alpha1.DebuggingConfiguration
// GenericComponentConfiguration holds configuration for GenericComponent // GenericComponentConfiguration holds configuration for GenericComponent
// related features both in cloud controller manager and kube-controller manager. // related features both in cloud controller manager and kube-controller manager.
GenericComponent GenericComponentConfiguration GenericComponent GenericComponentConfiguration
@ -295,7 +252,7 @@ type CloudControllerManagerConfiguration struct {
// CloudProviderConfiguration holds configuration for CloudProvider related features. // CloudProviderConfiguration holds configuration for CloudProvider related features.
CloudProvider CloudProviderConfiguration CloudProvider CloudProviderConfiguration
// DebuggingConfiguration holds configuration for Debugging related features. // DebuggingConfiguration holds configuration for Debugging related features.
Debugging DebuggingConfiguration Debugging apiserverconfigv1alpha1.DebuggingConfiguration
// GenericComponentConfiguration holds configuration for GenericComponent // GenericComponentConfiguration holds configuration for GenericComponent
// related features both in cloud controller manager and kube-controller manager. // related features both in cloud controller manager and kube-controller manager.
GenericComponent GenericComponentConfiguration GenericComponent GenericComponentConfiguration
@ -316,14 +273,6 @@ type CloudProviderConfiguration struct {
CloudConfigFile string 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 { type GenericComponentConfiguration struct {
// minResyncPeriod is the resync period in reflectors; will be random between // 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 // How long to wait between starting controller managers
ControllerStartInterval metav1.Duration ControllerStartInterval metav1.Duration
// leaderElection defines the configuration of leader election client. // leaderElection defines the configuration of leader election client.
LeaderElection LeaderElectionConfiguration LeaderElection apiserverconfigv1alpha1.LeaderElectionConfiguration
} }
type KubeCloudSharedConfiguration struct { type KubeCloudSharedConfiguration struct {

View File

@ -20,15 +20,15 @@ import (
"time" "time"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"k8s.io/kubernetes/pkg/apis/componentconfig" apiserverconfig "k8s.io/apiserver/pkg/apis/config"
) )
const ( const (
DefaultLeaseDuration = 15 * time.Second DefaultLeaseDuration = 15 * time.Second
) )
// BindFlags binds the common LeaderElectionCLIConfig flags to a flagset // BindFlags binds the LeaderElectionConfiguration struct fields to a flagset
func BindFlags(l *componentconfig.LeaderElectionConfiguration, fs *pflag.FlagSet) { func BindFlags(l *apiserverconfig.LeaderElectionConfiguration, fs *pflag.FlagSet) {
fs.BoolVar(&l.LeaderElect, "leader-elect", l.LeaderElect, ""+ fs.BoolVar(&l.LeaderElect, "leader-elect", l.LeaderElect, ""+
"Start a leader election client and gain leadership before "+ "Start a leader election client and gain leadership before "+
"executing the main loop. Enable this when running replicated "+ "executing the main loop. Enable this when running replicated "+