mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-30 21:30:16 +00:00 
			
		
		
		
	split generic etcdoption out of main struct
This commit is contained in:
		| @@ -36,7 +36,6 @@ go_library( | ||||
|         "//pkg/generated/openapi:go_default_library", | ||||
|         "//pkg/genericapiserver:go_default_library", | ||||
|         "//pkg/genericapiserver/authorizer:go_default_library", | ||||
|         "//pkg/genericapiserver/validation:go_default_library", | ||||
|         "//pkg/master:go_default_library", | ||||
|         "//pkg/registry/cachesize:go_default_library", | ||||
|         "//pkg/runtime/schema:go_default_library", | ||||
|   | ||||
| @@ -70,7 +70,7 @@ func (s *ServerRunOptions) AddFlags(fs *pflag.FlagSet) { | ||||
| 	// Add the generic flags. | ||||
| 	s.GenericServerRunOptions.AddUniversalFlags(fs) | ||||
| 	//Add etcd specific flags. | ||||
| 	s.GenericServerRunOptions.AddEtcdStorageFlags(fs) | ||||
| 	s.GenericServerRunOptions.Etcd.AddEtcdStorageFlags(fs) | ||||
| 	// Note: the weird ""+ in below lines seems to be the only way to get gofmt to | ||||
| 	// arrange these text blocks sensibly. Grrr. | ||||
|  | ||||
|   | ||||
| @@ -50,11 +50,11 @@ import ( | ||||
| 	generatedopenapi "k8s.io/kubernetes/pkg/generated/openapi" | ||||
| 	"k8s.io/kubernetes/pkg/genericapiserver" | ||||
| 	"k8s.io/kubernetes/pkg/genericapiserver/authorizer" | ||||
| 	genericvalidation "k8s.io/kubernetes/pkg/genericapiserver/validation" | ||||
| 	"k8s.io/kubernetes/pkg/master" | ||||
| 	"k8s.io/kubernetes/pkg/registry/cachesize" | ||||
| 	"k8s.io/kubernetes/pkg/runtime/schema" | ||||
| 	"k8s.io/kubernetes/pkg/serviceaccount" | ||||
| 	utilerrors "k8s.io/kubernetes/pkg/util/errors" | ||||
| 	utilnet "k8s.io/kubernetes/pkg/util/net" | ||||
| 	"k8s.io/kubernetes/pkg/util/wait" | ||||
| 	"k8s.io/kubernetes/pkg/version" | ||||
| @@ -80,7 +80,9 @@ cluster's shared state through which all other components interact.`, | ||||
|  | ||||
| // Run runs the specified APIServer.  This should never exit. | ||||
| func Run(s *options.ServerRunOptions) error { | ||||
| 	genericvalidation.VerifyEtcdServersList(s.GenericServerRunOptions) | ||||
| 	if errs := s.GenericServerRunOptions.Etcd.Validate(); len(errs) > 0 { | ||||
| 		return utilerrors.NewAggregate(errs) | ||||
| 	} | ||||
| 	genericapiserver.DefaultAndValidateRunOptions(s.GenericServerRunOptions) | ||||
| 	genericConfig := genericapiserver.NewConfig(). // create the new config | ||||
| 							ApplyOptions(s.GenericServerRunOptions). // apply the options selected | ||||
| @@ -142,7 +144,7 @@ func Run(s *options.ServerRunOptions) error { | ||||
| 	// Proxying to pods and services is IP-based... don't expect to be able to verify the hostname | ||||
| 	proxyTLSClientConfig := &tls.Config{InsecureSkipVerify: true} | ||||
|  | ||||
| 	if s.GenericServerRunOptions.StorageConfig.DeserializationCacheSize == 0 { | ||||
| 	if s.GenericServerRunOptions.Etcd.StorageConfig.DeserializationCacheSize == 0 { | ||||
| 		// When size of cache is not explicitly set, estimate its size based on | ||||
| 		// target memory usage. | ||||
| 		glog.V(2).Infof("Initalizing deserialization cache size based on %dMB limit", s.GenericServerRunOptions.TargetRAMMB) | ||||
| @@ -158,9 +160,9 @@ func Run(s *options.ServerRunOptions) error { | ||||
| 		// size to compute its size. We may even go further and measure | ||||
| 		// collective sizes of the objects in the cache. | ||||
| 		clusterSize := s.GenericServerRunOptions.TargetRAMMB / 60 | ||||
| 		s.GenericServerRunOptions.StorageConfig.DeserializationCacheSize = 25 * clusterSize | ||||
| 		if s.GenericServerRunOptions.StorageConfig.DeserializationCacheSize < 1000 { | ||||
| 			s.GenericServerRunOptions.StorageConfig.DeserializationCacheSize = 1000 | ||||
| 		s.GenericServerRunOptions.Etcd.StorageConfig.DeserializationCacheSize = 25 * clusterSize | ||||
| 		if s.GenericServerRunOptions.Etcd.StorageConfig.DeserializationCacheSize < 1000 { | ||||
| 			s.GenericServerRunOptions.Etcd.StorageConfig.DeserializationCacheSize = 1000 | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -169,7 +171,7 @@ func Run(s *options.ServerRunOptions) error { | ||||
| 		glog.Fatalf("error generating storage version map: %s", err) | ||||
| 	} | ||||
| 	storageFactory, err := genericapiserver.BuildDefaultStorageFactory( | ||||
| 		s.GenericServerRunOptions.StorageConfig, s.GenericServerRunOptions.DefaultStorageMediaType, api.Codecs, | ||||
| 		s.GenericServerRunOptions.Etcd.StorageConfig, s.GenericServerRunOptions.DefaultStorageMediaType, api.Codecs, | ||||
| 		genericapiserver.NewDefaultResourceEncodingConfig(), storageGroupsToEncodingVersion, | ||||
| 		// FIXME: this GroupVersionResource override should be configurable | ||||
| 		[]schema.GroupVersionResource{batch.Resource("cronjobs").WithVersion("v2alpha1")}, | ||||
| @@ -179,7 +181,7 @@ func Run(s *options.ServerRunOptions) error { | ||||
| 	} | ||||
| 	storageFactory.AddCohabitatingResources(batch.Resource("jobs"), extensions.Resource("jobs")) | ||||
| 	storageFactory.AddCohabitatingResources(autoscaling.Resource("horizontalpodautoscalers"), extensions.Resource("horizontalpodautoscalers")) | ||||
| 	for _, override := range s.GenericServerRunOptions.EtcdServersOverrides { | ||||
| 	for _, override := range s.GenericServerRunOptions.Etcd.EtcdServersOverrides { | ||||
| 		tokens := strings.Split(override, "#") | ||||
| 		if len(tokens) != 2 { | ||||
| 			glog.Errorf("invalid value of etcd server overrides: %s", override) | ||||
|   | ||||
| @@ -32,6 +32,7 @@ import ( | ||||
| 	"k8s.io/kubernetes/pkg/registry/generic" | ||||
| 	"k8s.io/kubernetes/pkg/runtime/schema" | ||||
| 	"k8s.io/kubernetes/pkg/storage/storagebackend" | ||||
| 	utilerrors "k8s.io/kubernetes/pkg/util/errors" | ||||
|  | ||||
| 	// Install the testgroup API | ||||
| 	_ "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/test_apis/testgroup/install" | ||||
| @@ -64,9 +65,11 @@ func Run(serverOptions *genericoptions.ServerRunOptions, stopCh <-chan struct{}) | ||||
| 	// Set ServiceClusterIPRange | ||||
| 	_, serviceClusterIPRange, _ := net.ParseCIDR("10.0.0.0/24") | ||||
| 	serverOptions.ServiceClusterIPRange = *serviceClusterIPRange | ||||
| 	serverOptions.StorageConfig.ServerList = []string{"http://127.0.0.1:2379"} | ||||
| 	serverOptions.Etcd.StorageConfig.ServerList = []string{"http://127.0.0.1:2379"} | ||||
| 	genericvalidation.ValidateRunOptions(serverOptions) | ||||
| 	genericvalidation.VerifyEtcdServersList(serverOptions) | ||||
| 	if errs := serverOptions.Etcd.Validate(); len(errs) > 0 { | ||||
| 		return utilerrors.NewAggregate(errs) | ||||
| 	} | ||||
| 	config := genericapiserver.NewConfig().ApplyOptions(serverOptions).Complete() | ||||
| 	if err := config.MaybeGenerateServingCerts(); err != nil { | ||||
| 		// this wasn't treated as fatal for this process before | ||||
|   | ||||
| @@ -43,7 +43,6 @@ go_library( | ||||
|         "//pkg/generated/openapi:go_default_library", | ||||
|         "//pkg/genericapiserver:go_default_library", | ||||
|         "//pkg/genericapiserver/authorizer:go_default_library", | ||||
|         "//pkg/genericapiserver/validation:go_default_library", | ||||
|         "//pkg/registry/cachesize:go_default_library", | ||||
|         "//pkg/registry/core/configmap/etcd:go_default_library", | ||||
|         "//pkg/registry/core/event/etcd:go_default_library", | ||||
|   | ||||
| @@ -45,7 +45,7 @@ func (s *ServerRunOptions) AddFlags(fs *pflag.FlagSet) { | ||||
| 	// Add the generic flags. | ||||
| 	s.GenericServerRunOptions.AddUniversalFlags(fs) | ||||
| 	//Add etcd specific flags. | ||||
| 	s.GenericServerRunOptions.AddEtcdStorageFlags(fs) | ||||
| 	s.GenericServerRunOptions.Etcd.AddEtcdStorageFlags(fs) | ||||
|  | ||||
| 	fs.DurationVar(&s.EventTTL, "event-ttl", s.EventTTL, | ||||
| 		"Amount of time to retain events. Default is 1h.") | ||||
|   | ||||
| @@ -38,7 +38,6 @@ import ( | ||||
| 	"k8s.io/kubernetes/pkg/generated/openapi" | ||||
| 	"k8s.io/kubernetes/pkg/genericapiserver" | ||||
| 	"k8s.io/kubernetes/pkg/genericapiserver/authorizer" | ||||
| 	genericvalidation "k8s.io/kubernetes/pkg/genericapiserver/validation" | ||||
| 	"k8s.io/kubernetes/pkg/registry/cachesize" | ||||
| 	"k8s.io/kubernetes/pkg/registry/generic" | ||||
| 	"k8s.io/kubernetes/pkg/registry/generic/registry" | ||||
| @@ -67,7 +66,9 @@ cluster's shared state through which all other components interact.`, | ||||
|  | ||||
| // Run runs the specified APIServer.  This should never exit. | ||||
| func Run(s *options.ServerRunOptions) error { | ||||
| 	genericvalidation.VerifyEtcdServersList(s.GenericServerRunOptions) | ||||
| 	if errs := s.GenericServerRunOptions.Etcd.Validate(); len(errs) > 0 { | ||||
| 		glog.Fatal(errs) | ||||
| 	} | ||||
| 	genericapiserver.DefaultAndValidateRunOptions(s.GenericServerRunOptions) | ||||
| 	genericConfig := genericapiserver.NewConfig(). // create the new config | ||||
| 							ApplyOptions(s.GenericServerRunOptions). // apply the options selected | ||||
| @@ -80,23 +81,23 @@ func Run(s *options.ServerRunOptions) error { | ||||
| 	// TODO: register cluster federation resources here. | ||||
| 	resourceConfig := genericapiserver.NewResourceConfig() | ||||
|  | ||||
| 	if s.GenericServerRunOptions.StorageConfig.DeserializationCacheSize == 0 { | ||||
| 	if s.GenericServerRunOptions.Etcd.StorageConfig.DeserializationCacheSize == 0 { | ||||
| 		// When size of cache is not explicitly set, set it to 50000 | ||||
| 		s.GenericServerRunOptions.StorageConfig.DeserializationCacheSize = 50000 | ||||
| 		s.GenericServerRunOptions.Etcd.StorageConfig.DeserializationCacheSize = 50000 | ||||
| 	} | ||||
| 	storageGroupsToEncodingVersion, err := s.GenericServerRunOptions.StorageGroupsToEncodingVersion() | ||||
| 	if err != nil { | ||||
| 		glog.Fatalf("error generating storage version map: %s", err) | ||||
| 	} | ||||
| 	storageFactory, err := genericapiserver.BuildDefaultStorageFactory( | ||||
| 		s.GenericServerRunOptions.StorageConfig, s.GenericServerRunOptions.DefaultStorageMediaType, api.Codecs, | ||||
| 		s.GenericServerRunOptions.Etcd.StorageConfig, s.GenericServerRunOptions.DefaultStorageMediaType, api.Codecs, | ||||
| 		genericapiserver.NewDefaultResourceEncodingConfig(), storageGroupsToEncodingVersion, | ||||
| 		[]schema.GroupVersionResource{}, resourceConfig, s.GenericServerRunOptions.RuntimeConfig) | ||||
| 	if err != nil { | ||||
| 		glog.Fatalf("error in initializing storage factory: %s", err) | ||||
| 	} | ||||
|  | ||||
| 	for _, override := range s.GenericServerRunOptions.EtcdServersOverrides { | ||||
| 	for _, override := range s.GenericServerRunOptions.Etcd.EtcdServersOverrides { | ||||
| 		tokens := strings.Split(override, "#") | ||||
| 		if len(tokens) != 2 { | ||||
| 			glog.Errorf("invalid value of etcd server overrides: %s", override) | ||||
|   | ||||
| @@ -17,20 +17,55 @@ limitations under the License. | ||||
| package options | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
|  | ||||
| 	"github.com/spf13/pflag" | ||||
|  | ||||
| 	"k8s.io/kubernetes/pkg/storage/storagebackend" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	DefaultEtcdPathPrefix = "/registry" | ||||
| ) | ||||
|  | ||||
| // AddEtcdFlags adds flags related to etcd storage for a specific APIServer to the specified FlagSet | ||||
| func (s *ServerRunOptions) AddEtcdStorageFlags(fs *pflag.FlagSet) { | ||||
| type EtcdOptions struct { | ||||
| 	StorageConfig storagebackend.Config | ||||
|  | ||||
| 	EtcdServersOverrides []string | ||||
| } | ||||
|  | ||||
| func NewDefaultEtcdOptions() *EtcdOptions { | ||||
| 	return &EtcdOptions{ | ||||
| 		StorageConfig: storagebackend.Config{ | ||||
| 			Prefix: DefaultEtcdPathPrefix, | ||||
| 			// Default cache size to 0 - if unset, its size will be set based on target | ||||
| 			// memory usage. | ||||
| 			DeserializationCacheSize: 0, | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *EtcdOptions) Validate() []error { | ||||
| 	allErrors := []error{} | ||||
| 	if len(s.StorageConfig.ServerList) == 0 { | ||||
| 		allErrors = append(allErrors, fmt.Errorf("--etcd-servers must be specified")) | ||||
| 	} | ||||
|  | ||||
| 	return allErrors | ||||
| } | ||||
|  | ||||
| // AddEtcdFlags adds flags related to etcd storage for a specific APIServer to the specified FlagSet | ||||
| func (s *EtcdOptions) AddEtcdStorageFlags(fs *pflag.FlagSet) { | ||||
| 	fs.StringSliceVar(&s.EtcdServersOverrides, "etcd-servers-overrides", s.EtcdServersOverrides, ""+ | ||||
| 		"Per-resource etcd servers overrides, comma separated. The individual override "+ | ||||
| 		"format: group/resource#servers, where servers are http://ip:port, semicolon separated.") | ||||
|  | ||||
| 	fs.StringVar(&s.StorageConfig.Type, "storage-backend", s.StorageConfig.Type, | ||||
| 		"The storage backend for persistence. Options: 'etcd2' (default), 'etcd3'.") | ||||
|  | ||||
| 	fs.IntVar(&s.StorageConfig.DeserializationCacheSize, "deserialization-cache-size", s.StorageConfig.DeserializationCacheSize, | ||||
| 		"Number of deserialized json objects to cache in memory.") | ||||
|  | ||||
| 	fs.StringSliceVar(&s.StorageConfig.ServerList, "etcd-servers", s.StorageConfig.ServerList, | ||||
| 		"List of etcd servers to connect with (scheme://ip:port), comma separated.") | ||||
|  | ||||
|   | ||||
| @@ -29,7 +29,6 @@ import ( | ||||
| 	clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" | ||||
| 	"k8s.io/kubernetes/pkg/client/restclient" | ||||
| 	"k8s.io/kubernetes/pkg/runtime/schema" | ||||
| 	"k8s.io/kubernetes/pkg/storage/storagebackend" | ||||
| 	"k8s.io/kubernetes/pkg/util/config" | ||||
| 	utilnet "k8s.io/kubernetes/pkg/util/net" | ||||
|  | ||||
| @@ -55,6 +54,8 @@ var AuthorizationModeChoices = []string{ModeAlwaysAllow, ModeAlwaysDeny, ModeABA | ||||
|  | ||||
| // ServerRunOptions contains the options while running a generic api server. | ||||
| type ServerRunOptions struct { | ||||
| 	Etcd *EtcdOptions | ||||
|  | ||||
| 	AdmissionControl           string | ||||
| 	AdmissionControlConfigFile string | ||||
| 	AdvertiseAddress           net.IP | ||||
| @@ -86,8 +87,6 @@ type ServerRunOptions struct { | ||||
| 	EnableContentionProfiling    bool | ||||
| 	EnableSwaggerUI              bool | ||||
| 	EnableWatchCache             bool | ||||
| 	EtcdServersOverrides         []string | ||||
| 	StorageConfig                storagebackend.Config | ||||
| 	ExternalHost                 string | ||||
| 	InsecureBindAddress          net.IP | ||||
| 	InsecurePort                 int | ||||
| @@ -157,12 +156,7 @@ func NewServerRunOptions() *ServerRunOptions { | ||||
| } | ||||
|  | ||||
| func (o *ServerRunOptions) WithEtcdOptions() *ServerRunOptions { | ||||
| 	o.StorageConfig = storagebackend.Config{ | ||||
| 		Prefix: DefaultEtcdPathPrefix, | ||||
| 		// Default cache size to 0 - if unset, its size will be set based on target | ||||
| 		// memory usage. | ||||
| 		DeserializationCacheSize: 0, | ||||
| 	} | ||||
| 	o.Etcd = NewDefaultEtcdOptions() | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| @@ -472,12 +466,6 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) { | ||||
| 	fs.Var(&s.ServiceNodePortRange, "service-node-ports", "DEPRECATED: see --service-node-port-range instead") | ||||
| 	fs.MarkDeprecated("service-node-ports", "see --service-node-port-range instead") | ||||
|  | ||||
| 	fs.StringVar(&s.StorageConfig.Type, "storage-backend", s.StorageConfig.Type, | ||||
| 		"The storage backend for persistence. Options: 'etcd2' (default), 'etcd3'.") | ||||
|  | ||||
| 	fs.IntVar(&s.StorageConfig.DeserializationCacheSize, "deserialization-cache-size", s.StorageConfig.DeserializationCacheSize, | ||||
| 		"Number of deserialized json objects to cache in memory.") | ||||
|  | ||||
| 	deprecatedStorageVersion := "" | ||||
| 	fs.StringVar(&deprecatedStorageVersion, "storage-version", deprecatedStorageVersion, | ||||
| 		"DEPRECATED: the version to store the legacy v1 resources with. Defaults to server preferred.") | ||||
|   | ||||
| @@ -12,10 +12,7 @@ load( | ||||
|  | ||||
| go_library( | ||||
|     name = "go_default_library", | ||||
|     srcs = [ | ||||
|         "etcd_validation.go", | ||||
|         "universal_validation.go", | ||||
|     ], | ||||
|     srcs = ["universal_validation.go"], | ||||
|     tags = ["automanaged"], | ||||
|     deps = [ | ||||
|         "//pkg/genericapiserver/options:go_default_library", | ||||
|   | ||||
| @@ -1,28 +0,0 @@ | ||||
| /* | ||||
| Copyright 2014 The Kubernetes Authors. | ||||
|  | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
|  | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
|  | ||||
| package validation | ||||
|  | ||||
| import ( | ||||
| 	"github.com/golang/glog" | ||||
| 	"k8s.io/kubernetes/pkg/genericapiserver/options" | ||||
| ) | ||||
|  | ||||
| func VerifyEtcdServersList(options *options.ServerRunOptions) { | ||||
| 	if len(options.StorageConfig.ServerList) == 0 { | ||||
| 		glog.Fatalf("--etcd-servers must be specified") | ||||
| 	} | ||||
| } | ||||
| @@ -41,7 +41,7 @@ func NewAPIServer() *APIServer { | ||||
| // Start starts the apiserver, returns when apiserver is ready. | ||||
| func (a *APIServer) Start() error { | ||||
| 	config := options.NewServerRunOptions() | ||||
| 	config.GenericServerRunOptions.StorageConfig.ServerList = []string{getEtcdClientURL()} | ||||
| 	config.GenericServerRunOptions.Etcd.StorageConfig.ServerList = []string{getEtcdClientURL()} | ||||
| 	_, ipnet, err := net.ParseCIDR(clusterIPRange) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
|   | ||||
		Reference in New Issue
	
	Block a user