Skip to content

Commit 7d7ffdb

Browse files
committed
kubeadm - add preflight warning when using systemd-resolved
1 parent 828ffd5 commit 7d7ffdb

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

cmd/kubeadm/app/preflight/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ go_library(
5959
"//pkg/kubeapiserver/authorizer/modes:go_default_library",
6060
"//pkg/registry/core/service/ipallocator:go_default_library",
6161
"//pkg/util/initsystem:go_default_library",
62+
"//pkg/util/procfs:go_default_library",
6263
"//pkg/util/version:go_default_library",
6364
"//pkg/version:go_default_library",
6465
"//test/e2e_node/system:go_default_library",

cmd/kubeadm/app/preflight/checks.go

+30-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import (
5454
authzmodes "k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
5555
"k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
5656
"k8s.io/kubernetes/pkg/util/initsystem"
57+
"k8s.io/kubernetes/pkg/util/procfs"
5758
versionutil "k8s.io/kubernetes/pkg/util/version"
5859
kubeadmversion "k8s.io/kubernetes/pkg/version"
5960
"k8s.io/kubernetes/test/e2e_node/system"
@@ -867,6 +868,33 @@ func getEtcdVersionResponse(client *http.Client, url string, target interface{})
867868
return err
868869
}
869870

871+
// ResolveCheck tests for potential issues related to the system resolver configuration
872+
type ResolveCheck struct{}
873+
874+
// Name returns label for ResolveCheck
875+
func (ResolveCheck) Name() string {
876+
return "Resolve"
877+
}
878+
879+
// Check validates the system resolver configuration
880+
func (ResolveCheck) Check() (warnings, errors []error) {
881+
glog.V(1).Infoln("validating the system resolver configuration")
882+
883+
warnings = []error{}
884+
885+
// procfs.PidOf only returns an error if the string passed is empty
886+
// or there is an issue compiling the regex, so we can ignore it here
887+
pids, _ := procfs.PidOf("systemd-resolved")
888+
if len(pids) > 0 {
889+
warnings = append(warnings, fmt.Errorf(
890+
"systemd-resolved was detected, for cluster dns resolution to work "+
891+
"properly --resolv-conf=/run/systemd/resolve/resolv.conf must be set "+
892+
"for the kubelet. (/etc/systemd/system/kubelet.service.d/10-kubeadm.conf should be edited for this purpose)\n"))
893+
}
894+
895+
return warnings, errors
896+
}
897+
870898
// RunInitMasterChecks executes all individual, applicable to Master node checks.
871899
func RunInitMasterChecks(execer utilsexec.Interface, cfg *kubeadmapi.MasterConfiguration, ignorePreflightErrors sets.String) error {
872900
// First, check if we're root separately from the other preflight checks and fail fast
@@ -1010,7 +1038,8 @@ func addCommonChecks(execer utilsexec.Interface, cfg kubeadmapi.CommonConfigurat
10101038
InPathCheck{executable: "socat", mandatory: false, exec: execer},
10111039
InPathCheck{executable: "tc", mandatory: false, exec: execer},
10121040
InPathCheck{executable: "touch", mandatory: false, exec: execer},
1013-
criCtlChecker)
1041+
criCtlChecker,
1042+
ResolveCheck{})
10141043
}
10151044
checks = append(checks,
10161045
SystemVerificationCheck{CRISocket: cfg.GetCRISocket()},

0 commit comments

Comments
 (0)