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>
This commit is contained in:
Mat Lowery 2021-07-29 21:27:25 -06:00 committed by GitHub
parent 8ff7c4b834
commit 9d5b8cd13d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 100 additions and 47 deletions

View file

@ -0,0 +1,61 @@
package object
import (
"fmt"
api "k8s.io/api/core/v1"
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)
// Namespace is a stripped down api.Namespace with only the items we need for CoreDNS.
type Namespace struct {
// Don't add new fields to this struct without talking to the CoreDNS maintainers.
Version string
Name string
*Empty
}
// ToNamespace returns a function that converts an api.Namespace to a *Namespace.
func ToNamespace(obj meta.Object) (meta.Object, error) {
ns, ok := obj.(*api.Namespace)
if !ok {
return nil, fmt.Errorf("unexpected object %v", obj)
}
n := &Namespace{
Version: ns.GetResourceVersion(),
Name: ns.GetName(),
}
*ns = api.Namespace{}
return n, nil
}
var _ runtime.Object = &Namespace{}
// DeepCopyObject implements the ObjectKind interface.
func (n *Namespace) DeepCopyObject() runtime.Object {
n1 := &Namespace{
Version: n.Version,
Name: n.Name,
}
return n1
}
// GetNamespace implements the metav1.Object interface.
func (n *Namespace) GetNamespace() string { return "" }
// SetNamespace implements the metav1.Object interface.
func (n *Namespace) SetNamespace(namespace string) {}
// GetName implements the metav1.Object interface.
func (n *Namespace) GetName() string { return n.Name }
// SetName implements the metav1.Object interface.
func (n *Namespace) SetName(name string) {}
// GetResourceVersion implements the metav1.Object interface.
func (n *Namespace) GetResourceVersion() string { return n.Version }
// SetResourceVersion implements the metav1.Object interface.
func (n *Namespace) SetResourceVersion(version string) {}