aboutsummaryrefslogtreecommitdiff
path: root/plugin/kubernetes/controller.go
diff options
context:
space:
mode:
authorGravatar Mat Lowery <mlowery@ebay.com> 2021-07-29 21:27:25 -0600
committerGravatar GitHub <noreply@github.com> 2021-07-29 23:27:25 -0400
commit9d5b8cd13d541cc3d2b7598ab255643d6298ba9d (patch)
tree5ac6f17f1d1a6b0e9033c759fb276a52c3ffab4e /plugin/kubernetes/controller.go
parent8ff7c4b83444c488051384cea0606f085e5b6959 (diff)
downloadcoredns-9d5b8cd13d541cc3d2b7598ab255643d6298ba9d.tar.gz
coredns-9d5b8cd13d541cc3d2b7598ab255643d6298ba9d.tar.zst
coredns-9d5b8cd13d541cc3d2b7598ab255643d6298ba9d.zip
kubernetes: Improve namespace usage (#4767)
* Use GetByKey instead of List in GetNamespaceByName. * Add ToNamespace to reduce memory for namespace cache. Signed-off-by: Mat Lowery <mlowery@ebay.com>
Diffstat (limited to 'plugin/kubernetes/controller.go')
-rw-r--r--plugin/kubernetes/controller.go33
1 files changed, 18 insertions, 15 deletions
diff --git a/plugin/kubernetes/controller.go b/plugin/kubernetes/controller.go
index 7155c320e..f3dbff454 100644
--- a/plugin/kubernetes/controller.go
+++ b/plugin/kubernetes/controller.go
@@ -39,7 +39,7 @@ type dnsController interface {
EpIndexReverse(string) []*object.Endpoints
GetNodeByName(context.Context, string) (*api.Node, error)
- GetNamespaceByName(string) (*api.Namespace, error)
+ GetNamespaceByName(string) (*object.Namespace, error)
Run()
HasSynced() bool
@@ -150,14 +150,16 @@ func newdnsController(ctx context.Context, kubeClient kubernetes.Interface, opts
dns.epLock.Unlock()
}
- dns.nsLister, dns.nsController = cache.NewInformer(
+ dns.nsLister, dns.nsController = object.NewIndexerInformer(
&cache.ListWatch{
ListFunc: namespaceListFunc(ctx, dns.client, dns.namespaceSelector),
WatchFunc: namespaceWatchFunc(ctx, dns.client, dns.namespaceSelector),
},
&api.Namespace{},
- defaultResyncPeriod,
- cache.ResourceEventHandlerFuncs{})
+ cache.ResourceEventHandlerFuncs{},
+ cache.Indexers{},
+ object.DefaultProcessor(object.ToNamespace, nil),
+ )
return &dns
}
@@ -539,18 +541,19 @@ func (dns *dnsControl) GetNodeByName(ctx context.Context, name string) (*api.Nod
}
// GetNamespaceByName returns the namespace by name. If nothing is found an error is returned.
-func (dns *dnsControl) GetNamespaceByName(name string) (*api.Namespace, error) {
- os := dns.nsLister.List()
- for _, o := range os {
- ns, ok := o.(*api.Namespace)
- if !ok {
- continue
- }
- if name == ns.ObjectMeta.Name {
- return ns, nil
- }
+func (dns *dnsControl) GetNamespaceByName(name string) (*object.Namespace, error) {
+ o, exists, err := dns.nsLister.GetByKey(name)
+ if err != nil {
+ return nil, err
+ }
+ if !exists {
+ return nil, fmt.Errorf("namespace not found")
+ }
+ ns, ok := o.(*object.Namespace)
+ if !ok {
+ return nil, fmt.Errorf("found key but not namespace")
}
- return nil, fmt.Errorf("namespace not found")
+ return ns, nil
}
func (dns *dnsControl) Add(obj interface{}) { dns.updateModified() }