From 2adb09f0e103ee669de095675bd549217ef63450 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Thu, 18 Jul 2019 14:34:23 +0300 Subject: [PATCH] kubeadm: remove dependency on pkg/util/procfs Run pidof utility to determine if systemd-resolved is running instead of calling procfs.PidOf. --- cmd/kubeadm/.import-restrictions | 1 - cmd/kubeadm/app/phases/kubelet/BUILD | 1 - cmd/kubeadm/app/phases/kubelet/flags.go | 21 +++++--- cmd/kubeadm/app/phases/kubelet/flags_test.go | 56 ++++++++++---------- 4 files changed, 43 insertions(+), 36 deletions(-) diff --git a/cmd/kubeadm/.import-restrictions b/cmd/kubeadm/.import-restrictions index 2e7ff4019a5..a50a2b285df 100644 --- a/cmd/kubeadm/.import-restrictions +++ b/cmd/kubeadm/.import-restrictions @@ -83,7 +83,6 @@ "k8s.io/kubernetes/pkg/util/ipvs", "k8s.io/kubernetes/pkg/util/metrics", "k8s.io/kubernetes/pkg/util/parsers", - "k8s.io/kubernetes/pkg/util/procfs", "k8s.io/kubernetes/pkg/util/sysctl", "k8s.io/kubernetes/pkg/util/taints" ], diff --git a/cmd/kubeadm/app/phases/kubelet/BUILD b/cmd/kubeadm/app/phases/kubelet/BUILD index 92c9815da05..bd11979867d 100644 --- a/cmd/kubeadm/app/phases/kubelet/BUILD +++ b/cmd/kubeadm/app/phases/kubelet/BUILD @@ -19,7 +19,6 @@ go_library( "//cmd/kubeadm/app/util/apiclient:go_default_library", "//cmd/kubeadm/app/util/initsystem:go_default_library", "//pkg/kubelet/apis/config:go_default_library", - "//pkg/util/procfs:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/rbac/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/cmd/kubeadm/app/phases/kubelet/flags.go b/cmd/kubeadm/app/phases/kubelet/flags.go index 189f7aa8ba9..a6c5d1411ef 100644 --- a/cmd/kubeadm/app/phases/kubelet/flags.go +++ b/cmd/kubeadm/app/phases/kubelet/flags.go @@ -29,7 +29,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/images" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" - "k8s.io/kubernetes/pkg/util/procfs" + "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem" utilsexec "k8s.io/utils/exec" ) @@ -39,7 +39,7 @@ type kubeletFlagsOpts struct { pauseImage string registerTaintsUsingFlags bool execer utilsexec.Interface - pidOfFunc func(string) ([]int, error) + isServiceActiveFunc func(string) (bool, error) defaultHostname string } @@ -57,8 +57,14 @@ func WriteKubeletDynamicEnvFile(cfg *kubeadmapi.ClusterConfiguration, nodeReg *k pauseImage: images.GetPauseImage(cfg), registerTaintsUsingFlags: registerTaintsUsingFlags, execer: utilsexec.New(), - pidOfFunc: procfs.PidOf, - defaultHostname: hostName, + isServiceActiveFunc: func(name string) (bool, error) { + initSystem, err := initsystem.GetInitSystem() + if err != nil { + return false, err + } + return initSystem.ServiceIsActive(name), nil + }, + defaultHostname: hostName, } stringMap := buildKubeletArgMap(flagOpts) argList := kubeadmutil.BuildArgumentListFromMap(stringMap, nodeReg.KubeletExtraArgs) @@ -98,8 +104,11 @@ func buildKubeletArgMap(opts kubeletFlagsOpts) map[string]string { kubeletFlags["register-with-taints"] = strings.Join(taintStrs, ",") } - if pids, _ := opts.pidOfFunc("systemd-resolved"); len(pids) > 0 { - // procfs.PidOf only returns an error if the regex is empty or doesn't compile, so we can ignore it + ok, err := opts.isServiceActiveFunc("systemd-resolved") + if err != nil { + klog.Warningf("cannot determine if systemd-resolved is active: %v\n", err) + } + if ok { kubeletFlags["resolv-conf"] = "/run/systemd/resolve/resolv.conf" } diff --git a/cmd/kubeadm/app/phases/kubelet/flags_test.go b/cmd/kubeadm/app/phases/kubelet/flags_test.go index fb838912b4e..d9e7190f19d 100644 --- a/cmd/kubeadm/app/phases/kubelet/flags_test.go +++ b/cmd/kubeadm/app/phases/kubelet/flags_test.go @@ -25,7 +25,7 @@ import ( "github.com/pkg/errors" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" "k8s.io/utils/exec" ) @@ -89,12 +89,12 @@ var ( } ) -func binaryRunningPidOfFunc(_ string) ([]int, error) { - return []int{1, 2, 3}, nil +func serviceIsActiveFunc(_ string) (bool, error) { + return true, nil } -func binaryNotRunningPidOfFunc(_ string) ([]int, error) { - return []int{}, nil +func serviceIsNotActiveFunc(_ string) (bool, error) { + return false, nil } func TestBuildKubeletArgMap(t *testing.T) { @@ -118,9 +118,9 @@ func TestBuildKubeletArgMap(t *testing.T) { }, }, }, - execer: errCgroupExecer, - pidOfFunc: binaryNotRunningPidOfFunc, - defaultHostname: "foo", + execer: errCgroupExecer, + isServiceActiveFunc: serviceIsNotActiveFunc, + defaultHostname: "foo", }, expected: map[string]string{ "network-plugin": "cni", @@ -133,9 +133,9 @@ func TestBuildKubeletArgMap(t *testing.T) { CRISocket: "/var/run/dockershim.sock", Name: "override-name", }, - execer: errCgroupExecer, - pidOfFunc: binaryNotRunningPidOfFunc, - defaultHostname: "default", + execer: errCgroupExecer, + isServiceActiveFunc: serviceIsNotActiveFunc, + defaultHostname: "default", }, expected: map[string]string{ "network-plugin": "cni", @@ -149,9 +149,9 @@ func TestBuildKubeletArgMap(t *testing.T) { CRISocket: "/var/run/dockershim.sock", Name: "foo", }, - execer: systemdCgroupExecer, - pidOfFunc: binaryNotRunningPidOfFunc, - defaultHostname: "foo", + execer: systemdCgroupExecer, + isServiceActiveFunc: serviceIsNotActiveFunc, + defaultHostname: "foo", }, expected: map[string]string{ "network-plugin": "cni", @@ -165,9 +165,9 @@ func TestBuildKubeletArgMap(t *testing.T) { CRISocket: "/var/run/dockershim.sock", Name: "foo", }, - execer: cgroupfsCgroupExecer, - pidOfFunc: binaryNotRunningPidOfFunc, - defaultHostname: "foo", + execer: cgroupfsCgroupExecer, + isServiceActiveFunc: serviceIsNotActiveFunc, + defaultHostname: "foo", }, expected: map[string]string{ "network-plugin": "cni", @@ -181,9 +181,9 @@ func TestBuildKubeletArgMap(t *testing.T) { CRISocket: "/var/run/containerd.sock", Name: "foo", }, - execer: cgroupfsCgroupExecer, - pidOfFunc: binaryNotRunningPidOfFunc, - defaultHostname: "foo", + execer: cgroupfsCgroupExecer, + isServiceActiveFunc: serviceIsNotActiveFunc, + defaultHostname: "foo", }, expected: map[string]string{ "container-runtime": "remote", @@ -211,7 +211,7 @@ func TestBuildKubeletArgMap(t *testing.T) { }, registerTaintsUsingFlags: true, execer: cgroupfsCgroupExecer, - pidOfFunc: binaryNotRunningPidOfFunc, + isServiceActiveFunc: serviceIsNotActiveFunc, defaultHostname: "foo", }, expected: map[string]string{ @@ -227,9 +227,9 @@ func TestBuildKubeletArgMap(t *testing.T) { CRISocket: "/var/run/containerd.sock", Name: "foo", }, - execer: cgroupfsCgroupExecer, - pidOfFunc: binaryRunningPidOfFunc, - defaultHostname: "foo", + execer: cgroupfsCgroupExecer, + isServiceActiveFunc: serviceIsActiveFunc, + defaultHostname: "foo", }, expected: map[string]string{ "container-runtime": "remote", @@ -244,10 +244,10 @@ func TestBuildKubeletArgMap(t *testing.T) { CRISocket: "/var/run/dockershim.sock", Name: "foo", }, - pauseImage: "gcr.io/pause:3.1", - execer: cgroupfsCgroupExecer, - pidOfFunc: binaryNotRunningPidOfFunc, - defaultHostname: "foo", + pauseImage: "gcr.io/pause:3.1", + execer: cgroupfsCgroupExecer, + isServiceActiveFunc: serviceIsNotActiveFunc, + defaultHostname: "foo", }, expected: map[string]string{ "network-plugin": "cni",