Skip to content

Commit 52243de

Browse files
authored
Merge pull request kubernetes#90394 from SataQiu/fix-kubeadm-20200422
kubeadm: fix the bug that kubeadm does not really respect resolvConf value set by user if systemd-resolved is active
2 parents 95a81f2 + 28b9a4e commit 52243de

File tree

5 files changed

+37
-56
lines changed

5 files changed

+37
-56
lines changed

cmd/kubeadm/app/componentconfigs/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ go_library(
1818
"//cmd/kubeadm/app/features:go_default_library",
1919
"//cmd/kubeadm/app/util:go_default_library",
2020
"//cmd/kubeadm/app/util/apiclient:go_default_library",
21+
"//cmd/kubeadm/app/util/initsystem:go_default_library",
2122
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
2223
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
2324
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",

cmd/kubeadm/app/componentconfigs/kubelet.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ import (
2121

2222
"k8s.io/apimachinery/pkg/util/version"
2323
clientset "k8s.io/client-go/kubernetes"
24+
"k8s.io/klog"
2425
kubeletconfig "k8s.io/kubelet/config/v1beta1"
26+
"k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem"
2527
utilpointer "k8s.io/utils/pointer"
2628

2729
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
@@ -49,6 +51,9 @@ const (
4951

5052
// kubeletHealthzBindAddress specifies the default healthz bind address
5153
kubeletHealthzBindAddress = "127.0.0.1"
54+
55+
// kubeletSystemdResolverConfig specifies the default resolver config when systemd service is active
56+
kubeletSystemdResolverConfig = "/run/systemd/resolve/resolv.conf"
5257
)
5358

5459
// kubeletHandler is the handler instance for the kubelet component config
@@ -173,4 +178,27 @@ func (kc *kubeletConfig) Default(cfg *kubeadmapi.ClusterConfiguration, _ *kubead
173178
// We cannot show a warning for RotateCertificates==false and we must hardcode it to true.
174179
// There is no way to determine if the user has set this or not, given the field is a non-pointer.
175180
kc.config.RotateCertificates = kubeletRotateCertificates
181+
182+
ok, err := isServiceActive("systemd-resolved")
183+
if err != nil {
184+
klog.Warningf("cannot determine if systemd-resolved is active: %v", err)
185+
}
186+
if ok {
187+
if kc.config.ResolverConfig == "" {
188+
kc.config.ResolverConfig = kubeletSystemdResolverConfig
189+
} else {
190+
if kc.config.ResolverConfig != kubeletSystemdResolverConfig {
191+
warnDefaultComponentConfigValue(kind, "resolvConf", kubeletSystemdResolverConfig, kc.config.ResolverConfig)
192+
}
193+
}
194+
}
195+
}
196+
197+
// isServiceActive checks whether the given service exists and is running
198+
func isServiceActive(name string) (bool, error) {
199+
initSystem, err := initsystem.GetInitSystem()
200+
if err != nil {
201+
return false, err
202+
}
203+
return initSystem.ServiceIsActive(name), nil
176204
}

cmd/kubeadm/app/phases/kubelet/flags.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"k8s.io/kubernetes/cmd/kubeadm/app/features"
2727
"k8s.io/kubernetes/cmd/kubeadm/app/images"
2828
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
29-
"k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem"
3029
utilsexec "k8s.io/utils/exec"
3130
"os"
3231
"path/filepath"
@@ -39,7 +38,6 @@ type kubeletFlagsOpts struct {
3938
pauseImage string
4039
registerTaintsUsingFlags bool
4140
execer utilsexec.Interface
42-
isServiceActiveFunc func(string) (bool, error)
4341
}
4442

4543
// GetNodeNameAndHostname obtains the name for this Node using the following precedence
@@ -69,13 +67,6 @@ func WriteKubeletDynamicEnvFile(cfg *kubeadmapi.ClusterConfiguration, nodeReg *k
6967
pauseImage: images.GetPauseImage(cfg),
7068
registerTaintsUsingFlags: registerTaintsUsingFlags,
7169
execer: utilsexec.New(),
72-
isServiceActiveFunc: func(name string) (bool, error) {
73-
initSystem, err := initsystem.GetInitSystem()
74-
if err != nil {
75-
return false, err
76-
}
77-
return initSystem.ServiceIsActive(name), nil
78-
},
7970
}
8071
stringMap := buildKubeletArgMap(flagOpts)
8172
argList := kubeadmutil.BuildArgumentListFromMap(stringMap, nodeReg.KubeletExtraArgs)

cmd/kubeadm/app/phases/kubelet/flags_test.go

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,6 @@ var (
8989
}
9090
)
9191

92-
func serviceIsActiveFunc(_ string) (bool, error) {
93-
return true, nil
94-
}
95-
96-
func serviceIsNotActiveFunc(_ string) (bool, error) {
97-
return false, nil
98-
}
99-
10092
func TestBuildKubeletArgMap(t *testing.T) {
10193

10294
tests := []struct {
@@ -117,8 +109,7 @@ func TestBuildKubeletArgMap(t *testing.T) {
117109
},
118110
},
119111
},
120-
execer: errCgroupExecer,
121-
isServiceActiveFunc: serviceIsNotActiveFunc,
112+
execer: errCgroupExecer,
122113
},
123114
expected: map[string]string{
124115
"network-plugin": "cni",
@@ -131,8 +122,7 @@ func TestBuildKubeletArgMap(t *testing.T) {
131122
CRISocket: "/var/run/dockershim.sock",
132123
Name: "override-name",
133124
},
134-
execer: errCgroupExecer,
135-
isServiceActiveFunc: serviceIsNotActiveFunc,
125+
execer: errCgroupExecer,
136126
},
137127
expected: map[string]string{
138128
"network-plugin": "cni",
@@ -146,8 +136,7 @@ func TestBuildKubeletArgMap(t *testing.T) {
146136
CRISocket: "/var/run/dockershim.sock",
147137
KubeletExtraArgs: map[string]string{"hostname-override": "override-name"},
148138
},
149-
execer: errCgroupExecer,
150-
isServiceActiveFunc: serviceIsNotActiveFunc,
139+
execer: errCgroupExecer,
151140
},
152141
expected: map[string]string{
153142
"network-plugin": "cni",
@@ -160,8 +149,7 @@ func TestBuildKubeletArgMap(t *testing.T) {
160149
nodeRegOpts: &kubeadmapi.NodeRegistrationOptions{
161150
CRISocket: "/var/run/dockershim.sock",
162151
},
163-
execer: systemdCgroupExecer,
164-
isServiceActiveFunc: serviceIsNotActiveFunc,
152+
execer: systemdCgroupExecer,
165153
},
166154
expected: map[string]string{
167155
"network-plugin": "cni",
@@ -174,8 +162,7 @@ func TestBuildKubeletArgMap(t *testing.T) {
174162
nodeRegOpts: &kubeadmapi.NodeRegistrationOptions{
175163
CRISocket: "/var/run/dockershim.sock",
176164
},
177-
execer: cgroupfsCgroupExecer,
178-
isServiceActiveFunc: serviceIsNotActiveFunc,
165+
execer: cgroupfsCgroupExecer,
179166
},
180167
expected: map[string]string{
181168
"network-plugin": "cni",
@@ -188,8 +175,7 @@ func TestBuildKubeletArgMap(t *testing.T) {
188175
nodeRegOpts: &kubeadmapi.NodeRegistrationOptions{
189176
CRISocket: "/var/run/containerd.sock",
190177
},
191-
execer: cgroupfsCgroupExecer,
192-
isServiceActiveFunc: serviceIsNotActiveFunc,
178+
execer: cgroupfsCgroupExecer,
193179
},
194180
expected: map[string]string{
195181
"container-runtime": "remote",
@@ -216,38 +202,21 @@ func TestBuildKubeletArgMap(t *testing.T) {
216202
},
217203
registerTaintsUsingFlags: true,
218204
execer: cgroupfsCgroupExecer,
219-
isServiceActiveFunc: serviceIsNotActiveFunc,
220205
},
221206
expected: map[string]string{
222207
"container-runtime": "remote",
223208
"container-runtime-endpoint": "/var/run/containerd.sock",
224209
"register-with-taints": "foo=bar:baz,key=val:eff",
225210
},
226211
},
227-
{
228-
name: "systemd-resolved running",
229-
opts: kubeletFlagsOpts{
230-
nodeRegOpts: &kubeadmapi.NodeRegistrationOptions{
231-
CRISocket: "/var/run/containerd.sock",
232-
},
233-
execer: cgroupfsCgroupExecer,
234-
isServiceActiveFunc: serviceIsActiveFunc,
235-
},
236-
expected: map[string]string{
237-
"container-runtime": "remote",
238-
"container-runtime-endpoint": "/var/run/containerd.sock",
239-
"resolv-conf": "/run/systemd/resolve/resolv.conf",
240-
},
241-
},
242212
{
243213
name: "pause image is set",
244214
opts: kubeletFlagsOpts{
245215
nodeRegOpts: &kubeadmapi.NodeRegistrationOptions{
246216
CRISocket: "/var/run/dockershim.sock",
247217
},
248-
pauseImage: "gcr.io/pause:3.2",
249-
execer: cgroupfsCgroupExecer,
250-
isServiceActiveFunc: serviceIsNotActiveFunc,
218+
pauseImage: "gcr.io/pause:3.2",
219+
execer: cgroupfsCgroupExecer,
251220
},
252221
expected: map[string]string{
253222
"network-plugin": "cni",

cmd/kubeadm/app/phases/kubelet/flags_unix.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,5 @@ func buildKubeletArgMap(opts kubeletFlagsOpts) map[string]string {
3939
}
4040
}
4141

42-
ok, err := opts.isServiceActiveFunc("systemd-resolved")
43-
if err != nil {
44-
klog.Warningf("cannot determine if systemd-resolved is active: %v\n", err)
45-
}
46-
if ok {
47-
kubeletFlags["resolv-conf"] = "/run/systemd/resolve/resolv.conf"
48-
}
49-
5042
return kubeletFlags
5143
}

0 commit comments

Comments
 (0)