From 9df1f7ef113bd029d4645249e5845251a8d99d02 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Tue, 17 Oct 2017 11:49:02 -0400 Subject: [PATCH] Do not remove kubelet labels during startup --- pkg/kubelet/kubelet_node_status.go | 4 ++++ pkg/kubelet/kubelet_node_status_test.go | 31 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/pkg/kubelet/kubelet_node_status.go b/pkg/kubelet/kubelet_node_status.go index 08a91a17fd6..f87d14b8c38 100644 --- a/pkg/kubelet/kubelet_node_status.go +++ b/pkg/kubelet/kubelet_node_status.go @@ -169,6 +169,10 @@ func (kl *Kubelet) updateDefaultLabels(initialNode, existingNode *v1.Node) bool var needsUpdate bool = false //Set default labels but make sure to not set labels with empty values for _, label := range defaultLabels { + if _, hasInitialValue := initialNode.Labels[label]; !hasInitialValue { + continue + } + if existingNode.Labels[label] != initialNode.Labels[label] { existingNode.Labels[label] = initialNode.Labels[label] needsUpdate = true diff --git a/pkg/kubelet/kubelet_node_status_test.go b/pkg/kubelet/kubelet_node_status_test.go index 9721f3bef47..87172759441 100644 --- a/pkg/kubelet/kubelet_node_status_test.go +++ b/pkg/kubelet/kubelet_node_status_test.go @@ -1233,6 +1233,37 @@ func TestUpdateDefaultLabels(t *testing.T) { "please-persist": "foo", }, }, + { + name: "make sure existing labels do not get deleted when initial node has no opinion", + initialNode: &v1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{}, + }, + }, + existingNode: &v1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + kubeletapis.LabelHostname: "new-hostname", + kubeletapis.LabelZoneFailureDomain: "new-zone-failure-domain", + kubeletapis.LabelZoneRegion: "new-zone-region", + kubeletapis.LabelInstanceType: "new-instance-type", + kubeletapis.LabelOS: "new-os", + kubeletapis.LabelArch: "new-arch", + "please-persist": "foo", + }, + }, + }, + needsUpdate: false, + finalLabels: map[string]string{ + kubeletapis.LabelHostname: "new-hostname", + kubeletapis.LabelZoneFailureDomain: "new-zone-failure-domain", + kubeletapis.LabelZoneRegion: "new-zone-region", + kubeletapis.LabelInstanceType: "new-instance-type", + kubeletapis.LabelOS: "new-os", + kubeletapis.LabelArch: "new-arch", + "please-persist": "foo", + }, + }, { name: "no update needed", initialNode: &v1.Node{