diff --git a/cmd/kube-apiserver/app/options/options_test.go b/cmd/kube-apiserver/app/options/options_test.go index d76166b8bcc..c3ef30e2c33 100644 --- a/cmd/kube-apiserver/app/options/options_test.go +++ b/cmd/kube-apiserver/app/options/options_test.go @@ -111,7 +111,7 @@ func TestAddFlags(t *testing.T) { "--proxy-client-cert-file=/var/run/kubernetes/proxy.crt", "--proxy-client-key-file=/var/run/kubernetes/proxy.key", "--request-timeout=2m", - "--storage-backend=etcd2", + "--storage-backend=etcd3", } fs.Parse(args) @@ -141,15 +141,14 @@ func TestAddFlags(t *testing.T) { }, Etcd: &apiserveroptions.EtcdOptions{ StorageConfig: storagebackend.Config{ - Type: "etcd2", - ServerList: nil, - Prefix: "/registry", - DeserializationCacheSize: 0, - KeyFile: "/var/run/kubernetes/etcd.key", - CAFile: "/var/run/kubernetes/etcdca.crt", - CertFile: "/var/run/kubernetes/etcdce.crt", - CompactionInterval: storagebackend.DefaultCompactInterval, - CountMetricPollPeriod: time.Minute, + Type: "etcd3", + ServerList: nil, + Prefix: "/registry", + KeyFile: "/var/run/kubernetes/etcd.key", + CAFile: "/var/run/kubernetes/etcdca.crt", + CertFile: "/var/run/kubernetes/etcdce.crt", + CompactionInterval: storagebackend.DefaultCompactInterval, + CountMetricPollPeriod: time.Minute, }, DefaultStorageMediaType: "application/vnd.kubernetes.protobuf", DeleteCollectionWorkers: 1, diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index c9ef1e13c8f..c880c1a5d39 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -699,27 +699,6 @@ func Complete(s *options.ServerRunOptions) (completedServerRunOptions, error) { } } - if s.Etcd.StorageConfig.DeserializationCacheSize == 0 { - // When size of cache is not explicitly set, estimate its size based on - // target memory usage. - glog.V(2).Infof("Initializing deserialization cache size based on %dMB limit", s.GenericServerRunOptions.TargetRAMMB) - - // This is the heuristics that from memory capacity is trying to infer - // the maximum number of nodes in the cluster and set cache sizes based - // on that value. - // From our documentation, we officially recommend 120GB machines for - // 2000 nodes, and we scale from that point. Thus we assume ~60MB of - // capacity per node. - // TODO: We may consider deciding that some percentage of memory will - // be used for the deserialization cache and divide it by the max object - // 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.Etcd.StorageConfig.DeserializationCacheSize = 25 * clusterSize - if s.Etcd.StorageConfig.DeserializationCacheSize < 1000 { - s.Etcd.StorageConfig.DeserializationCacheSize = 1000 - } - } if s.Etcd.EnableWatchCache { glog.V(2).Infof("Initializing cache sizes based on %dMB limit", s.GenericServerRunOptions.TargetRAMMB) sizes := cachesize.NewHeuristicWatchCacheSizes(s.GenericServerRunOptions.TargetRAMMB) diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go b/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go index b994794edf8..7c2a08ba0ae 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go @@ -59,7 +59,6 @@ type EtcdOptions struct { } var storageTypes = sets.NewString( - storagebackend.StorageTypeUnset, storagebackend.StorageTypeETCD3, ) @@ -86,8 +85,8 @@ func (s *EtcdOptions) Validate() []error { allErrors = append(allErrors, fmt.Errorf("--etcd-servers must be specified")) } - if !storageTypes.Has(s.StorageConfig.Type) { - allErrors = append(allErrors, fmt.Errorf("--storage-backend invalid, must be 'etcd3' or 'etcd2'. If not specified, it will default to 'etcd3'")) + if s.StorageConfig.Type != storagebackend.StorageTypeUnset && !storageTypes.Has(s.StorageConfig.Type) { + allErrors = append(allErrors, fmt.Errorf("--storage-backend invalid, allowed values: %s. If not specified, it will default to 'etcd3'", strings.Join(storageTypes.List(), ", "))) } for _, override := range s.EtcdServersOverrides { @@ -142,10 +141,11 @@ func (s *EtcdOptions) AddFlags(fs *pflag.FlagSet) { "have system defaults set by heuristics, others default to default-watch-cache-size") fs.StringVar(&s.StorageConfig.Type, "storage-backend", s.StorageConfig.Type, - "The storage backend for persistence. Options: 'etcd3' (default), 'etcd2'.") + "The storage backend for persistence. Options: 'etcd3' (default).") - fs.IntVar(&s.StorageConfig.DeserializationCacheSize, "deserialization-cache-size", s.StorageConfig.DeserializationCacheSize, - "Number of deserialized json objects to cache in memory.") + dummyCacheSize := 0 + fs.IntVar(&dummyCacheSize, "deserialization-cache-size", 0, "Number of deserialized json objects to cache in memory.") + fs.MarkDeprecated("deserialization-cache-size", "the deserialization cache was dropped in 1.13 with support for etcd2") fs.StringSliceVar(&s.StorageConfig.ServerList, "etcd-servers", s.StorageConfig.ServerList, "List of etcd servers to connect with (scheme://ip:port), comma separated.") diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/etcd_test.go b/staging/src/k8s.io/apiserver/pkg/server/options/etcd_test.go index 73050e7c4b8..7f772f5b397 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/etcd_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/etcd_test.go @@ -36,15 +36,14 @@ func TestEtcdOptionsValidate(t *testing.T) { name: "test when ServerList is not specified", testOptions: &EtcdOptions{ StorageConfig: storagebackend.Config{ - Type: "etcd2", - ServerList: nil, - Prefix: "/registry", - DeserializationCacheSize: 0, - KeyFile: "/var/run/kubernetes/etcd.key", - CAFile: "/var/run/kubernetes/etcdca.crt", - CertFile: "/var/run/kubernetes/etcdce.crt", - CompactionInterval: storagebackend.DefaultCompactInterval, - CountMetricPollPeriod: time.Minute, + Type: "etcd3", + ServerList: nil, + Prefix: "/registry", + KeyFile: "/var/run/kubernetes/etcd.key", + CAFile: "/var/run/kubernetes/etcdca.crt", + CertFile: "/var/run/kubernetes/etcdce.crt", + CompactionInterval: storagebackend.DefaultCompactInterval, + CountMetricPollPeriod: time.Minute, }, DefaultStorageMediaType: "application/vnd.kubernetes.protobuf", DeleteCollectionWorkers: 1, @@ -59,15 +58,14 @@ func TestEtcdOptionsValidate(t *testing.T) { name: "test when storage-backend is invalid", testOptions: &EtcdOptions{ StorageConfig: storagebackend.Config{ - Type: "etcd4", - ServerList: []string{"http://127.0.0.1"}, - Prefix: "/registry", - DeserializationCacheSize: 0, - KeyFile: "/var/run/kubernetes/etcd.key", - CAFile: "/var/run/kubernetes/etcdca.crt", - CertFile: "/var/run/kubernetes/etcdce.crt", - CompactionInterval: storagebackend.DefaultCompactInterval, - CountMetricPollPeriod: time.Minute, + Type: "etcd4", + ServerList: []string{"http://127.0.0.1"}, + Prefix: "/registry", + KeyFile: "/var/run/kubernetes/etcd.key", + CAFile: "/var/run/kubernetes/etcdca.crt", + CertFile: "/var/run/kubernetes/etcdce.crt", + CompactionInterval: storagebackend.DefaultCompactInterval, + CountMetricPollPeriod: time.Minute, }, DefaultStorageMediaType: "application/vnd.kubernetes.protobuf", DeleteCollectionWorkers: 1, @@ -76,21 +74,20 @@ func TestEtcdOptionsValidate(t *testing.T) { DefaultWatchCacheSize: 100, EtcdServersOverrides: []string{"/events#http://127.0.0.1:4002"}, }, - expectErr: "--storage-backend invalid, must be 'etcd3' or 'etcd2'. If not specified, it will default to 'etcd3'", + expectErr: "--storage-backend invalid, allowed values: etcd3. If not specified, it will default to 'etcd3'", }, { name: "test when etcd-servers-overrides is invalid", testOptions: &EtcdOptions{ StorageConfig: storagebackend.Config{ - Type: "etcd3", - ServerList: []string{"http://127.0.0.1"}, - Prefix: "/registry", - DeserializationCacheSize: 0, - KeyFile: "/var/run/kubernetes/etcd.key", - CAFile: "/var/run/kubernetes/etcdca.crt", - CertFile: "/var/run/kubernetes/etcdce.crt", - CompactionInterval: storagebackend.DefaultCompactInterval, - CountMetricPollPeriod: time.Minute, + Type: "etcd3", + ServerList: []string{"http://127.0.0.1"}, + Prefix: "/registry", + KeyFile: "/var/run/kubernetes/etcd.key", + CAFile: "/var/run/kubernetes/etcdca.crt", + CertFile: "/var/run/kubernetes/etcdce.crt", + CompactionInterval: storagebackend.DefaultCompactInterval, + CountMetricPollPeriod: time.Minute, }, DefaultStorageMediaType: "application/vnd.kubernetes.protobuf", DeleteCollectionWorkers: 1, @@ -105,15 +102,14 @@ func TestEtcdOptionsValidate(t *testing.T) { name: "test when EtcdOptions is valid", testOptions: &EtcdOptions{ StorageConfig: storagebackend.Config{ - Type: "etcd3", - ServerList: []string{"http://127.0.0.1"}, - Prefix: "/registry", - DeserializationCacheSize: 0, - KeyFile: "/var/run/kubernetes/etcd.key", - CAFile: "/var/run/kubernetes/etcdca.crt", - CertFile: "/var/run/kubernetes/etcdce.crt", - CompactionInterval: storagebackend.DefaultCompactInterval, - CountMetricPollPeriod: time.Minute, + Type: "etcd3", + ServerList: []string{"http://127.0.0.1"}, + Prefix: "/registry", + KeyFile: "/var/run/kubernetes/etcd.key", + CAFile: "/var/run/kubernetes/etcdca.crt", + CertFile: "/var/run/kubernetes/etcdce.crt", + CompactionInterval: storagebackend.DefaultCompactInterval, + CountMetricPollPeriod: time.Minute, }, DefaultStorageMediaType: "application/vnd.kubernetes.protobuf", DeleteCollectionWorkers: 1, diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd/etcdtest/etcdtest.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd/etcdtest/etcdtest.go index a4a9ce24360..591108952ec 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd/etcdtest/etcdtest.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd/etcdtest/etcdtest.go @@ -21,9 +21,6 @@ import ( "path" ) -// Cache size to use for tests. -const DeserializationCacheSize = 150 - // Returns the prefix set via the ETCD_PREFIX environment variable (if any). func PathPrefix() string { pref := os.Getenv("ETCD_PREFIX") diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd/testing/utils.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd/testing/utils.go index d5a770d8640..d8e1f20f84c 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd/testing/utils.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd/testing/utils.go @@ -293,11 +293,10 @@ func NewUnsecuredEtcd3TestClientServer(t *testing.T) (*EtcdTestServer, *storageb } server.V3Client = server.v3Cluster.RandClient() config := &storagebackend.Config{ - Type: "etcd3", - Prefix: etcdtest.PathPrefix(), - ServerList: server.V3Client.Endpoints(), - DeserializationCacheSize: etcdtest.DeserializationCacheSize, - Paging: true, + Type: "etcd3", + Prefix: etcdtest.PathPrefix(), + ServerList: server.V3Client.Endpoints(), + Paging: true, } return server, config } diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/config.go b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/config.go index 4b7564344fd..f18ac76dd9f 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/config.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/config.go @@ -32,7 +32,7 @@ const ( // Config is configuration for creating a storage backend. type Config struct { - // Type defines the type of storage backend, e.g. "etcd2", etcd3". Default ("") is "etcd3". + // Type defines the type of storage backend. Default ("") is "etcd3". Type string // Prefix is the prefix to all keys passed to storage.Interface methods. Prefix string @@ -47,10 +47,6 @@ type Config struct { // resource type not wishing to allow paging, and is not intended for end users to // set. Paging bool - // DeserializationCacheSize is the size of cache of deserialized objects. - // Currently this is only supported in etcd2. - // We will drop the cache once using protobuf. - DeserializationCacheSize int Codec runtime.Codec // Transformer allows the value to be transformed prior to persisting into etcd. @@ -66,11 +62,8 @@ type Config struct { func NewDefaultConfig(prefix string, codec runtime.Codec) *Config { return &Config{ - Prefix: prefix, - // Default cache size to 0 - if unset, its size will be set based on target - // memory usage. - DeserializationCacheSize: 0, - Codec: codec, - CompactionInterval: DefaultCompactInterval, + Prefix: prefix, + Codec: codec, + CompactionInterval: DefaultCompactInterval, } }