diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index 74580901464..fd7662d4352 100644 --- a/pkg/kubelet/BUILD +++ b/pkg/kubelet/BUILD @@ -95,7 +95,6 @@ go_library( "//pkg/kubelet/util/queue:go_default_library", "//pkg/kubelet/util/sliceutils:go_default_library", "//pkg/kubelet/volumemanager:go_default_library", - "//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/security/apparmor:go_default_library", "//pkg/security/podsecuritypolicy/sysctl:go_default_library", @@ -240,6 +239,7 @@ go_test( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", + "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 9fa8fcf52ec..3bade9e8904 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -34,7 +34,6 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" v1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" @@ -106,7 +105,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/util/queue" "k8s.io/kubernetes/pkg/kubelet/util/sliceutils" "k8s.io/kubernetes/pkg/kubelet/volumemanager" - "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/security/apparmor" sysctlwhitelist "k8s.io/kubernetes/pkg/security/podsecuritypolicy/sysctl" utilipt "k8s.io/kubernetes/pkg/util/iptables" @@ -458,7 +456,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, r := cache.NewReflector(nodeLW, &v1.Node{}, nodeIndexer, 0) go r.Run(wait.NeverStop) } - nodeInfo := &CachedNodeInfo{NodeLister: corelisters.NewNodeLister(nodeIndexer)} + nodeLister := corelisters.NewNodeLister(nodeIndexer) // TODO: get the real node object of ourself, // and use the real node name and UID. @@ -506,7 +504,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, registerSchedulable: registerSchedulable, dnsConfigurer: dns.NewConfigurer(kubeDeps.Recorder, nodeRef, parsedNodeIP, clusterDNS, kubeCfg.ClusterDomain, kubeCfg.ResolverConfig), serviceLister: serviceLister, - nodeInfo: nodeInfo, + nodeLister: nodeLister, masterServiceNamespace: masterServiceNamespace, streamingConnectionIdleTimeout: kubeCfg.StreamingConnectionIdleTimeout.Duration, recorder: kubeDeps.Recorder, @@ -959,8 +957,8 @@ type Kubelet struct { masterServiceNamespace string // serviceLister knows how to list services serviceLister serviceLister - // nodeInfo knows how to get information about the node for this kubelet. - nodeInfo predicates.NodeInfo + // nodeLister knows how to list nodes + nodeLister corelisters.NodeLister // a list of node labels to register nodeLabels map[string]string @@ -2306,23 +2304,3 @@ func getStreamingConfig(kubeCfg *kubeletconfiginternal.KubeletConfiguration, kub } return config } - -// CachedNodeInfo implements NodeInfo -type CachedNodeInfo struct { - corelisters.NodeLister -} - -// GetNodeInfo returns cached data for the node name. -func (c *CachedNodeInfo) GetNodeInfo(nodeName string) (*v1.Node, error) { - node, err := c.Get(nodeName) - - if apierrors.IsNotFound(err) { - return nil, err - } - - if err != nil { - return nil, fmt.Errorf("error retrieving node '%v' from cache: %v", nodeName, err) - } - - return node, nil -} diff --git a/pkg/kubelet/kubelet_getters.go b/pkg/kubelet/kubelet_getters.go index 92ec4a9f6a4..21c329d6f29 100644 --- a/pkg/kubelet/kubelet_getters.go +++ b/pkg/kubelet/kubelet_getters.go @@ -227,7 +227,7 @@ func (kl *Kubelet) GetNode() (*v1.Node, error) { if kl.kubeClient == nil { return kl.initialNode() } - return kl.nodeInfo.GetNodeInfo(string(kl.nodeName)) + return kl.nodeLister.Get(string(kl.nodeName)) } // getNodeAnyWay() must return a *v1.Node which is required by RunGeneralPredicates(). @@ -237,7 +237,7 @@ func (kl *Kubelet) GetNode() (*v1.Node, error) { // zero capacity, and the default labels. func (kl *Kubelet) getNodeAnyWay() (*v1.Node, error) { if kl.kubeClient != nil { - if n, err := kl.nodeInfo.GetNodeInfo(string(kl.nodeName)); err == nil { + if n, err := kl.nodeLister.Get(string(kl.nodeName)); err == nil { return n, nil } } diff --git a/pkg/kubelet/kubelet_resources_test.go b/pkg/kubelet/kubelet_resources_test.go index ec75f4ab0fd..9fae485d734 100644 --- a/pkg/kubelet/kubelet_resources_test.go +++ b/pkg/kubelet/kubelet_resources_test.go @@ -30,7 +30,7 @@ import ( func TestPodResourceLimitsDefaulting(t *testing.T) { tk := newTestKubelet(t, true) defer tk.Cleanup() - tk.kubelet.nodeInfo = &testNodeInfo{ + tk.kubelet.nodeLister = &testNodeLister{ nodes: []*v1.Node{ { ObjectMeta: metav1.ObjectMeta{ diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 7b92438807e..4957a1bc2b6 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -30,12 +30,14 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes/fake" + corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" @@ -178,7 +180,7 @@ func newTestKubeletWithImageList( kubelet.sourcesReady = config.NewSourcesReady(func(_ sets.String) bool { return true }) kubelet.masterServiceNamespace = metav1.NamespaceDefault kubelet.serviceLister = testServiceLister{} - kubelet.nodeInfo = testNodeInfo{ + kubelet.nodeLister = testNodeLister{ nodes: []*v1.Node{ { ObjectMeta: metav1.ObjectMeta{ @@ -426,17 +428,25 @@ func TestSyncPodsDeletesWhenSourcesAreReady(t *testing.T) { fakeRuntime.AssertKilledPods([]string{"12345678"}) } -type testNodeInfo struct { +type testNodeLister struct { nodes []*v1.Node } -func (ls testNodeInfo) GetNodeInfo(id string) (*v1.Node, error) { - for _, node := range ls.nodes { - if node.Name == id { +func (nl testNodeLister) Get(name string) (*v1.Node, error) { + for _, node := range nl.nodes { + if node.Name == name { return node, nil } } - return nil, fmt.Errorf("Node with name: %s does not exist", id) + return nil, fmt.Errorf("Node with name: %s does not exist", name) +} + +func (nl testNodeLister) List(_ labels.Selector) (ret []*v1.Node, err error) { + return nl.nodes, nil +} + +func (nl testNodeLister) ListWithPredicate(_ corelisters.NodeConditionPredicate) ([]*v1.Node, error) { + return nl.nodes, nil } func checkPodStatus(t *testing.T, kl *Kubelet, pod *v1.Pod, phase v1.PodPhase) { @@ -451,7 +461,7 @@ func TestHandlePortConflicts(t *testing.T) { defer testKubelet.Cleanup() kl := testKubelet.kubelet - kl.nodeInfo = testNodeInfo{nodes: []*v1.Node{ + kl.nodeLister = testNodeLister{nodes: []*v1.Node{ { ObjectMeta: metav1.ObjectMeta{Name: string(kl.nodeName)}, Status: v1.NodeStatus{ @@ -497,7 +507,7 @@ func TestHandleHostNameConflicts(t *testing.T) { defer testKubelet.Cleanup() kl := testKubelet.kubelet - kl.nodeInfo = testNodeInfo{nodes: []*v1.Node{ + kl.nodeLister = testNodeLister{nodes: []*v1.Node{ { ObjectMeta: metav1.ObjectMeta{Name: "127.0.0.1"}, Status: v1.NodeStatus{ @@ -549,7 +559,7 @@ func TestHandleNodeSelector(t *testing.T) { }, }, } - kl.nodeInfo = testNodeInfo{nodes: nodes} + kl.nodeLister = testNodeLister{nodes: nodes} recorder := record.NewFakeRecorder(20) nodeRef := &v1.ObjectReference{ @@ -589,7 +599,7 @@ func TestHandleMemExceeded(t *testing.T) { v1.ResourcePods: *resource.NewQuantity(40, resource.DecimalSI), }}}, } - kl.nodeInfo = testNodeInfo{nodes: nodes} + kl.nodeLister = testNodeLister{nodes: nodes} recorder := record.NewFakeRecorder(20) nodeRef := &v1.ObjectReference{ @@ -650,7 +660,7 @@ func TestHandlePluginResources(t *testing.T) { v1.ResourcePods: allowedPodQuantity, }}}, } - kl.nodeInfo = testNodeInfo{nodes: nodes} + kl.nodeLister = testNodeLister{nodes: nodes} updatePluginResourcesFunc := func(node *schedulernodeinfo.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error { // Maps from resourceName to the value we use to set node.allocatableResource[resourceName]. @@ -1801,7 +1811,7 @@ func TestHandlePodAdditionsInvokesPodAdmitHandlers(t *testing.T) { testKubelet := newTestKubelet(t, false /* controllerAttachDetachEnabled */) defer testKubelet.Cleanup() kl := testKubelet.kubelet - kl.nodeInfo = testNodeInfo{nodes: []*v1.Node{ + kl.nodeLister = testNodeLister{nodes: []*v1.Node{ { ObjectMeta: metav1.ObjectMeta{Name: string(kl.nodeName)}, Status: v1.NodeStatus{ diff --git a/pkg/kubelet/runonce_test.go b/pkg/kubelet/runonce_test.go index 7239133e481..92462fc2a7c 100644 --- a/pkg/kubelet/runonce_test.go +++ b/pkg/kubelet/runonce_test.go @@ -75,7 +75,7 @@ func TestRunOnce(t *testing.T) { rootDirectory: basePath, recorder: &record.FakeRecorder{}, cadvisor: cadvisor, - nodeInfo: testNodeInfo{}, + nodeLister: testNodeLister{}, statusManager: status.NewManager(nil, podManager, &statustest.FakePodDeletionSafetyProvider{}), podManager: podManager, os: &containertest.FakeOS{},