Skip to content

Commit 271ca3a

Browse files
authored
Merge pull request #8035 from priyawadhwa/embed-certs
Wait to add aliases to /etc/hosts before starting kubelet
2 parents d995b1d + 2915aaf commit 271ca3a

File tree

5 files changed

+64
-37
lines changed

5 files changed

+64
-37
lines changed

pkg/drivers/kic/kic.go

-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,6 @@ func (d *Driver) Restart() error {
295295
return fmt.Errorf("start during restart %v", err)
296296
}
297297
return nil
298-
299298
}
300299

301300
// Start an already created kic container

pkg/minikube/bootstrapper/kubeadm/kubeadm.go

+3-33
Original file line numberDiff line numberDiff line change
@@ -744,8 +744,8 @@ func (k *Bootstrapper) UpdateNode(cfg config.ClusterConfig, n config.Node, r cru
744744

745745
files := []assets.CopyableFile{
746746
assets.NewMemoryAssetTarget(kubeadmCfg, bsutil.KubeadmYamlPath+".new", "0640"),
747-
assets.NewMemoryAssetTarget(kubeletCfg, bsutil.KubeletSystemdConfFile+".new", "0644"),
748-
assets.NewMemoryAssetTarget(kubeletService, bsutil.KubeletServiceFile+".new", "0644"),
747+
assets.NewMemoryAssetTarget(kubeletCfg, bsutil.KubeletSystemdConfFile, "0644"),
748+
assets.NewMemoryAssetTarget(kubeletService, bsutil.KubeletServiceFile, "0644"),
749749
}
750750
// Copy the default CNI config (k8s.conf), so that kubelet can successfully
751751
// start a Pod in the case a user hasn't manually installed any CNI plugin
@@ -775,11 +775,7 @@ func (k *Bootstrapper) UpdateNode(cfg config.ClusterConfig, n config.Node, r cru
775775
return errors.Wrap(err, "host alias")
776776
}
777777

778-
if err := startKubeletIfRequired(k.c, sm); err != nil {
779-
return errors.Wrap(err, "reload")
780-
}
781-
782-
return nil
778+
return sm.Start("kubelet")
783779
}
784780

785781
func copyFiles(runner command.Runner, files []assets.CopyableFile) error {
@@ -801,32 +797,6 @@ func copyFiles(runner command.Runner, files []assets.CopyableFile) error {
801797
return nil
802798
}
803799

804-
func startKubeletIfRequired(runner command.Runner, sm sysinit.Manager) error {
805-
now := time.Now()
806-
defer func() {
807-
glog.Infof("reloadKubelet took %s", time.Since(now))
808-
}()
809-
810-
svc := bsutil.KubeletServiceFile
811-
conf := bsutil.KubeletSystemdConfFile
812-
813-
checkCmd := exec.Command("/bin/bash", "-c", fmt.Sprintf("pgrep kubelet && diff -u %s %s.new && diff -u %s %s.new", svc, svc, conf, conf))
814-
if _, err := runner.RunCmd(checkCmd); err == nil {
815-
glog.Infof("kubelet is already running with the right configs")
816-
return nil
817-
}
818-
819-
startCmd := exec.Command("/bin/bash", "-c", fmt.Sprintf("sudo cp %s.new %s && sudo cp %s.new %s", svc, svc, conf, conf))
820-
if _, err := runner.RunCmd(startCmd); err != nil {
821-
return errors.Wrap(err, "starting kubelet")
822-
}
823-
824-
if err := sm.Enable("kubelet"); err != nil {
825-
return err
826-
}
827-
return sm.Start("kubelet")
828-
}
829-
830800
// kubectlPath returns the path to the kubelet
831801
func kubectlPath(cfg config.ClusterConfig) string {
832802
return path.Join(vmpath.GuestPersistentDir, "binaries", cfg.KubernetesConfig.KubernetesVersion, "kubectl")

pkg/minikube/cluster/pause.go

-3
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,6 @@ func unpause(cr cruntime.Manager, r command.Runner, namespaces []string) ([]stri
9696
}
9797

9898
sm := sysinit.New(r)
99-
if err := sm.Enable("kubelet"); err != nil {
100-
return ids, errors.Wrap(err, "kubelet enable")
101-
}
10299

103100
if err := sm.Start("kubelet"); err != nil {
104101
return ids, errors.Wrap(err, "kubelet start")

pkg/minikube/sysinit/systemd.go

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ limitations under the License.
1818
package sysinit
1919

2020
import (
21+
"errors"
2122
"os/exec"
2223

2324
"k8s.io/minikube/pkg/minikube/assets"
@@ -53,6 +54,9 @@ func (s *Systemd) Disable(svc string) error {
5354

5455
// Enable enables a service
5556
func (s *Systemd) Enable(svc string) error {
57+
if svc == "kubelet" {
58+
return errors.New("please don't enable kubelet as it creates a race condition; if it starts on systemd boot it will pick up /etc/hosts before we have time to configure /etc/hosts")
59+
}
5660
_, err := s.r.RunCmd(exec.Command("sudo", "systemctl", "enable", svc))
5761
return err
5862
}

pkg/minikube/sysinit/systemd_test.go

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors All rights reserved.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
// Package sysinit provides an abstraction over init systems like systemctl
18+
package sysinit
19+
20+
import (
21+
"testing"
22+
23+
"k8s.io/minikube/pkg/minikube/command"
24+
)
25+
26+
func TestEnable(t *testing.T) {
27+
28+
tests := []struct {
29+
service string
30+
shouldErr bool
31+
}{
32+
{
33+
service: "docker",
34+
}, {
35+
service: "kubelet",
36+
shouldErr: true,
37+
},
38+
}
39+
cr := command.NewFakeCommandRunner()
40+
cr.SetCommandToOutput(map[string]string{
41+
"sudo systemctl enable docker": "",
42+
})
43+
sd := &Systemd{
44+
r: cr,
45+
}
46+
for _, test := range tests {
47+
t.Run(test.service, func(t *testing.T) {
48+
err := sd.Enable(test.service)
49+
if err == nil && test.shouldErr {
50+
t.Fatalf("expected %s service to error, but it did not", test.service)
51+
}
52+
if err != nil && !test.shouldErr {
53+
t.Fatalf("expected %s service to pass, but it did not", test.service)
54+
}
55+
})
56+
}
57+
}

0 commit comments

Comments
 (0)