From f8e90eb5b0e6b085ae00062de90c16a4bb6c643c Mon Sep 17 00:00:00 2001 From: Gab Satch Date: Tue, 12 Nov 2019 16:50:43 -0500 Subject: [PATCH] Replaces modifying node object with returning a map of labels - Adds label to update flow so can be picked up by an existing node --- pkg/kubelet/kubelet_node_status.go | 7 ++++++- pkg/kubelet/kubelet_node_status_others.go | 8 ++------ pkg/kubelet/kubelet_node_status_windows.go | 8 ++++---- staging/src/k8s.io/api/core/v1/well_known_labels.go | 2 ++ 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/pkg/kubelet/kubelet_node_status.go b/pkg/kubelet/kubelet_node_status.go index efba9666679..c1b8f1f72b0 100644 --- a/pkg/kubelet/kubelet_node_status.go +++ b/pkg/kubelet/kubelet_node_status.go @@ -155,6 +155,7 @@ func (kl *Kubelet) updateDefaultLabels(initialNode, existingNode *v1.Node) bool v1.LabelInstanceType, v1.LabelOSStable, v1.LabelArchStable, + v1.LabelWindowsBuild, kubeletapis.LabelOS, kubeletapis.LabelArch, } @@ -230,9 +231,13 @@ func (kl *Kubelet) initialNode(ctx context.Context) (*v1.Node, error) { Unschedulable: !kl.registerSchedulable, }, } - if err := addOSSpecificLabels(node); err != nil { + osLabels, err := getOSSpecificLabels() + if err != nil { return nil, err } + for label, value := range osLabels { + node.Labels[label] = value + } nodeTaints := make([]v1.Taint, 0) if len(kl.registerWithTaints) > 0 { diff --git a/pkg/kubelet/kubelet_node_status_others.go b/pkg/kubelet/kubelet_node_status_others.go index 30d3dd2f84f..ab1e3647265 100644 --- a/pkg/kubelet/kubelet_node_status_others.go +++ b/pkg/kubelet/kubelet_node_status_others.go @@ -18,10 +18,6 @@ limitations under the License. package kubelet -import ( - v1 "k8s.io/api/core/v1" -) - -func addOSSpecificLabels(n *v1.Node) error { - return nil +func getOSSpecificLabels() (map[string]string, error) { + return nil, nil } diff --git a/pkg/kubelet/kubelet_node_status_windows.go b/pkg/kubelet/kubelet_node_status_windows.go index 9ee3ac81d07..53d523bcc88 100644 --- a/pkg/kubelet/kubelet_node_status_windows.go +++ b/pkg/kubelet/kubelet_node_status_windows.go @@ -23,11 +23,11 @@ import ( "k8s.io/kubernetes/pkg/kubelet/winstats" ) -func addOSSpecificLabels(n *v1.Node) error { +func getOSSpecificLabels() (map[string]string, error) { osInfo, err := winstats.GetOSInfo() if err != nil { - return err + return nil, err } - n.Labels[v1.LabelWindowsBuild] = osInfo.GetBuild() - return nil + + return map[string]string{v1.LabelWindowsBuild: osInfo.GetBuild()}, nil } diff --git a/staging/src/k8s.io/api/core/v1/well_known_labels.go b/staging/src/k8s.io/api/core/v1/well_known_labels.go index 55ddbb1cafb..c6e09d9f565 100644 --- a/staging/src/k8s.io/api/core/v1/well_known_labels.go +++ b/staging/src/k8s.io/api/core/v1/well_known_labels.go @@ -26,6 +26,8 @@ const ( LabelOSStable = "kubernetes.io/os" LabelArchStable = "kubernetes.io/arch" + // LabelWindowsBuild is used on Windows nodes to specify the Windows build number starting with v1.17.0. + // It's in the format MajorVersion.MinorVersion.BuildNumber (for ex: 10.0.17763) LabelWindowsBuild = "node.kubernetes.io/windows-build" // LabelNamespaceSuffixKubelet is an allowed label namespace suffix kubelets can self-set ([*.]kubelet.kubernetes.io/*)