mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +00:00
Merge pull request #82802 from deads2k/reduce-max-backoff-for-namespace
make namespace-lifecycle controller more responsive
This commit is contained in:
commit
c234e5bac6
@ -27,6 +27,7 @@ go_library(
|
|||||||
"//staging/src/k8s.io/client-go/metadata:go_default_library",
|
"//staging/src/k8s.io/client-go/metadata:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/tools/cache:go_default_library",
|
"//staging/src/k8s.io/client-go/tools/cache:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
|
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
|
||||||
|
"//vendor/golang.org/x/time/rate:go_default_library",
|
||||||
"//vendor/k8s.io/klog:go_default_library",
|
"//vendor/k8s.io/klog:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -20,6 +20,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/time/rate"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -71,7 +73,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{
|
||||||
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "namespace"),
|
queue: workqueue.NewNamedRateLimitingQueue(nsControllerRateLimiter(), "namespace"),
|
||||||
namespacedResourcesDeleter: deletion.NewNamespacedResourcesDeleter(kubeClient.CoreV1().Namespaces(), metadataClient, kubeClient.CoreV1(), discoverResourcesFn, finalizerToken),
|
namespacedResourcesDeleter: deletion.NewNamespacedResourcesDeleter(kubeClient.CoreV1().Namespaces(), metadataClient, kubeClient.CoreV1(), discoverResourcesFn, finalizerToken),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,6 +101,18 @@ func NewNamespaceController(
|
|||||||
return namespaceController
|
return namespaceController
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nsControllerRateLimiter is tuned for a faster than normal recycle time with default backoff speed and default overall
|
||||||
|
// requeing speed. We do this so that namespace cleanup is reliably faster and we know that the number of namespaces being
|
||||||
|
// deleted is smaller than total number of other namespace scoped resources in a cluster.
|
||||||
|
func nsControllerRateLimiter() workqueue.RateLimiter {
|
||||||
|
return workqueue.NewMaxOfRateLimiter(
|
||||||
|
// this ensures that we retry namespace deletion at least every minute, never longer.
|
||||||
|
workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 60*time.Second),
|
||||||
|
// 10 qps, 100 bucket size. This is only for retry speed and its only the overall factor (not per item)
|
||||||
|
&workqueue.BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// enqueueNamespace adds an object to the controller work queue
|
// enqueueNamespace adds an object to the controller work queue
|
||||||
// obj could be an *v1.Namespace, or a DeletionFinalStateUnknown item.
|
// obj could be an *v1.Namespace, or a DeletionFinalStateUnknown item.
|
||||||
func (nm *NamespaceController) enqueueNamespace(obj interface{}) {
|
func (nm *NamespaceController) enqueueNamespace(obj interface{}) {
|
||||||
|
Loading…
Reference in New Issue
Block a user