From 01aeb239fdcc77309b9a68551f4b36399ab4e9a1 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sat, 16 Sep 2017 23:47:41 -0400 Subject: [PATCH] Disable the watch cache for most resources by default Any resource named by the heuristics gets a watch cache by default. Admins can restore the previous behavior by setting `--default-watch-cache-size` to a positive integer. This reduces the amount of total memory allocated on large cluster significantly at minor cost in CPU on the etcd process and an increase in network bandwidth to etcd. --- pkg/cmd/server/kubernetes/master/master_config.go | 4 +--- test/integration/watch_cache_test.go | 11 +++++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pkg/cmd/server/kubernetes/master/master_config.go b/pkg/cmd/server/kubernetes/master/master_config.go index 06cf334b554f..c190af7f326e 100644 --- a/pkg/cmd/server/kubernetes/master/master_config.go +++ b/pkg/cmd/server/kubernetes/master/master_config.go @@ -80,8 +80,6 @@ import ( "github.com/openshift/origin/pkg/version" ) -const DefaultWatchCacheSize = 1000 - // request paths that match this regular expression will be treated as long running // and not subjected to the default server timeout. const originLongRunningEndpointsRE = "(/|^)(buildconfigs/.*/instantiatebinary|imagestreamimports)$" @@ -150,7 +148,7 @@ func BuildKubeAPIserverOptions(masterConfig configapi.MasterConfig) (*kapiserver server.Etcd.StorageConfig.KeyFile = masterConfig.EtcdClientInfo.ClientCert.KeyFile server.Etcd.StorageConfig.CertFile = masterConfig.EtcdClientInfo.ClientCert.CertFile server.Etcd.StorageConfig.CAFile = masterConfig.EtcdClientInfo.CA - server.Etcd.DefaultWatchCacheSize = DefaultWatchCacheSize + server.Etcd.DefaultWatchCacheSize = 0 server.GenericServerRunOptions.CorsAllowedOriginList = masterConfig.CORSAllowedOrigins server.GenericServerRunOptions.MaxRequestsInFlight = masterConfig.ServingInfo.MaxRequestsInFlight diff --git a/test/integration/watch_cache_test.go b/test/integration/watch_cache_test.go index a298fb862d51..52d70a26f920 100644 --- a/test/integration/watch_cache_test.go +++ b/test/integration/watch_cache_test.go @@ -15,7 +15,6 @@ import ( coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" configapi "github.com/openshift/origin/pkg/cmd/server/api" - serverkube "github.com/openshift/origin/pkg/cmd/server/kubernetes/master" testutil "github.com/openshift/origin/test/util" testserver "github.com/openshift/origin/test/util/server" ) @@ -124,9 +123,13 @@ func TestDefaultWatchCacheSize(t *testing.T) { etcdOptions := apiserveroptions.NewEtcdOptions(&storagebackend.Config{}) kubeDefaultCacheSize := etcdOptions.DefaultWatchCacheSize if kubeDefaultCacheSize != 100 { - t.Fatalf("upstream DefaultWatchCacheSize changed from 100 to %q", kubeDefaultCacheSize) + t.Fatalf("upstream DefaultWatchCacheSize changed to %d", kubeDefaultCacheSize) } - testWatchCacheWithConfig(t, master, serverkube.DefaultWatchCacheSize, kubeDefaultCacheSize) + if master.KubernetesMasterConfig.APIServerArguments == nil { + master.KubernetesMasterConfig.APIServerArguments = configapi.ExtendedArguments{} + } + master.KubernetesMasterConfig.APIServerArguments["watch-cache-sizes"] = []string{"namespaces#100"} + testWatchCacheWithConfig(t, master, 100, 0) } func TestWatchCacheSizeWithFlag(t *testing.T) { @@ -140,5 +143,5 @@ func TestWatchCacheSizeWithFlag(t *testing.T) { } master.KubernetesMasterConfig.APIServerArguments["watch-cache-sizes"] = []string{"namespaces#2000"} - testWatchCacheWithConfig(t, master, 2000, serverkube.DefaultWatchCacheSize) + testWatchCacheWithConfig(t, master, 2000, 0) }