From b42564a5cb4f5f6cc8172390a6088a09266684c8 Mon Sep 17 00:00:00 2001 From: liz Date: Mon, 4 Jun 2018 14:04:10 -0400 Subject: [PATCH] Kubeadm-initialised kubelet uses provided hostname if present If --node-name is passed in to `kubeadm init`, `--hostname-override` will be passed to kubelet. --- cmd/kubeadm/app/phases/kubelet/flags.go | 8 ++- cmd/kubeadm/app/phases/kubelet/flags_test.go | 62 ++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 cmd/kubeadm/app/phases/kubelet/flags_test.go diff --git a/cmd/kubeadm/app/phases/kubelet/flags.go b/cmd/kubeadm/app/phases/kubelet/flags.go index 6c50e160e64..91f876e0c47 100644 --- a/cmd/kubeadm/app/phases/kubelet/flags.go +++ b/cmd/kubeadm/app/phases/kubelet/flags.go @@ -28,6 +28,7 @@ import ( kubeadmapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha2" "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" + nodeutil "k8s.io/kubernetes/pkg/util/node" "k8s.io/kubernetes/pkg/util/procfs" utilsexec "k8s.io/utils/exec" ) @@ -78,7 +79,12 @@ func buildKubeletArgMap(nodeRegOpts *kubeadmapi.NodeRegistrationOptions, registe kubeletFlags["resolv-conf"] = "/run/systemd/resolve/resolv.conf" } - // TODO: Pass through --hostname-override if a custom name is used? + // Make sure the node name we're passed will work with Kubelet + if nodeRegOpts.Name != "" && nodeRegOpts.Name != nodeutil.GetHostname("") { + glog.V(1).Info("setting kubelet hostname-override to %q", nodeRegOpts.Name) + kubeletFlags["hostname-override"] = nodeRegOpts.Name + } + // TODO: Conditionally set `--cgroup-driver` to either `systemd` or `cgroupfs` for CRI other than Docker return kubeletFlags diff --git a/cmd/kubeadm/app/phases/kubelet/flags_test.go b/cmd/kubeadm/app/phases/kubelet/flags_test.go new file mode 100644 index 00000000000..32646647d43 --- /dev/null +++ b/cmd/kubeadm/app/phases/kubelet/flags_test.go @@ -0,0 +1,62 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kubelet + +import ( + "testing" + + kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + nodeutil "k8s.io/kubernetes/pkg/util/node" +) + +func TestBuildKubeletArgMap(t *testing.T) { + + tests := []struct { + name string + hostname string + expectedHostname string + }{ + { + name: "manually set to current hostname", + hostname: nodeutil.GetHostname(""), + expectedHostname: "", + }, + { + name: "unset hostname", + hostname: "", + expectedHostname: "", + }, + { + name: "override hostname", + hostname: "my-node", + expectedHostname: "my-node", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + opts := &kubeadmapi.NodeRegistrationOptions{ + Name: test.hostname, + } + + m := buildKubeletArgMap(opts, false) + if m["hostname-override"] != test.expectedHostname { + t.Errorf("expected hostname %q, got %q", test.expectedHostname, m["hostname-override"]) + } + }) + } +}