increase the QPS for namespace controller
This commit is contained in:
parent
fcd9b7f7ba
commit
575c6d7ad8
@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint"
|
endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint"
|
||||||
"k8s.io/kubernetes/pkg/controller/garbagecollector"
|
"k8s.io/kubernetes/pkg/controller/garbagecollector"
|
||||||
@ -102,9 +103,16 @@ func startNamespaceController(ctx ControllerContext) (bool, error) {
|
|||||||
// TODO: should use a dynamic RESTMapper built from the discovery results.
|
// TODO: should use a dynamic RESTMapper built from the discovery results.
|
||||||
restMapper := api.Registry.RESTMapper()
|
restMapper := api.Registry.RESTMapper()
|
||||||
|
|
||||||
|
// the namespace cleanup controller is very chatty. It makes lots of discovery calls and then it makes lots of delete calls
|
||||||
|
// the ratelimiter negatively affects its speed. Deleting 100 total items in a namespace (that's only a few of each resource
|
||||||
|
// including events), takes ~10 seconds by default.
|
||||||
|
nsKubeconfig := ctx.ClientBuilder.ConfigOrDie("namespace-controller")
|
||||||
|
nsKubeconfig.QPS *= 10
|
||||||
|
nsKubeconfig.Burst *= 10
|
||||||
|
namespaceKubeClient := clientset.NewForConfigOrDie(nsKubeconfig)
|
||||||
|
namespaceClientPool := dynamic.NewClientPool(nsKubeconfig, restMapper, dynamic.LegacyAPIPathResolverFunc)
|
||||||
|
|
||||||
// Find the list of namespaced resources via discovery that the namespace controller must manage
|
// Find the list of namespaced resources via discovery that the namespace controller must manage
|
||||||
namespaceKubeClient := ctx.ClientBuilder.ClientOrDie("namespace-controller")
|
|
||||||
namespaceClientPool := dynamic.NewClientPool(ctx.ClientBuilder.ConfigOrDie("namespace-controller"), restMapper, dynamic.LegacyAPIPathResolverFunc)
|
|
||||||
// TODO: consider using a list-watch + cache here rather than polling
|
// TODO: consider using a list-watch + cache here rather than polling
|
||||||
resources, err := namespaceKubeClient.Discovery().ServerResources()
|
resources, err := namespaceKubeClient.Discovery().ServerResources()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -50,20 +50,12 @@ const (
|
|||||||
|
|
||||||
// NamespaceController is responsible for performing actions dependent upon a namespace phase
|
// NamespaceController is responsible for performing actions dependent upon a namespace phase
|
||||||
type NamespaceController struct {
|
type NamespaceController struct {
|
||||||
// client that purges namespace content, must have list/delete privileges on all content
|
|
||||||
kubeClient clientset.Interface
|
|
||||||
// clientPool manages a pool of dynamic clients
|
|
||||||
clientPool dynamic.ClientPool
|
|
||||||
// lister that can list namespaces from a shared cache
|
// lister that can list namespaces from a shared cache
|
||||||
lister corelisters.NamespaceLister
|
lister corelisters.NamespaceLister
|
||||||
// returns true when the namespace cache is ready
|
// returns true when the namespace cache is ready
|
||||||
listerSynced cache.InformerSynced
|
listerSynced cache.InformerSynced
|
||||||
// namespaces that have been queued up for processing by workers
|
// namespaces that have been queued up for processing by workers
|
||||||
queue workqueue.RateLimitingInterface
|
queue workqueue.RateLimitingInterface
|
||||||
// function to list of preferred resources for namespace deletion
|
|
||||||
discoverResourcesFn func() ([]*metav1.APIResourceList, error)
|
|
||||||
// finalizerToken is the finalizer token managed by this controller
|
|
||||||
finalizerToken v1.FinalizerName
|
|
||||||
// helper to delete all resources in the namespace when the namespace is deleted.
|
// helper to delete all resources in the namespace when the namespace is deleted.
|
||||||
namespacedResourcesDeleter deletion.NamespacedResourcesDeleterInterface
|
namespacedResourcesDeleter deletion.NamespacedResourcesDeleterInterface
|
||||||
}
|
}
|
||||||
@ -79,11 +71,7 @@ func NewNamespaceController(
|
|||||||
|
|
||||||
// create the controller so we can inject the enqueue function
|
// create the controller so we can inject the enqueue function
|
||||||
namespaceController := &NamespaceController{
|
namespaceController := &NamespaceController{
|
||||||
kubeClient: kubeClient,
|
|
||||||
clientPool: clientPool,
|
|
||||||
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "namespace"),
|
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "namespace"),
|
||||||
discoverResourcesFn: discoverResourcesFn,
|
|
||||||
finalizerToken: finalizerToken,
|
|
||||||
namespacedResourcesDeleter: deletion.NewNamespacedResourcesDeleter(kubeClient.Core().Namespaces(), clientPool, kubeClient.Core(), discoverResourcesFn, finalizerToken, true),
|
namespacedResourcesDeleter: deletion.NewNamespacedResourcesDeleter(kubeClient.Core().Namespaces(), clientPool, kubeClient.Core(), discoverResourcesFn, finalizerToken, true),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user