Skip to content

Commit 0c641ae

Browse files
committed
Merge branch 'master' into iso-release-v1.20.0-beta.0
2 parents 2e12378 + ecc3a91 commit 0c641ae

File tree

9 files changed

+110
-43
lines changed

9 files changed

+110
-43
lines changed

cmd/minikube/cmd/start_flags.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,12 @@ func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k
249249
var cc config.ClusterConfig
250250
if existing != nil {
251251
cc = updateExistingConfigFromFlags(cmd, existing)
252+
253+
// identify appropriate cni then configure cruntime accordingly
254+
_, err := cni.New(&cc)
255+
if err != nil {
256+
return cc, config.Node{}, errors.Wrap(err, "cni")
257+
}
252258
} else {
253259
klog.Info("no existing cluster config was found, will generate one from the flags ")
254260
cc = generateNewConfigFromFlags(cmd, k8sVersion, drvName)

pkg/minikube/bootstrapper/bsutil/kverify/pod_ready.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ func waitPodCondition(cs *kubernetes.Clientset, name, namespace string, conditio
9292
klog.Info(reason)
9393
return true, nil
9494
}
95+
// return immediately: status == core.ConditionUnknown
9596
if status == core.ConditionUnknown {
9697
klog.Info(reason)
9798
return false, fmt.Errorf(reason)
@@ -101,6 +102,7 @@ func waitPodCondition(cs *kubernetes.Clientset, name, namespace string, conditio
101102
klog.Info(reason)
102103
lap = time.Now()
103104
}
105+
// return immediately: status == core.ConditionFalse
104106
return false, nil
105107
}
106108
if err := wait.PollImmediate(kconst.APICallRetryInterval, kconst.DefaultControlPlaneTimeout, checkCondition); err != nil {
@@ -114,13 +116,13 @@ func waitPodCondition(cs *kubernetes.Clientset, name, namespace string, conditio
114116
func podConditionStatus(cs *kubernetes.Clientset, name, namespace string, condition core.PodConditionType) (status core.ConditionStatus, reason string) {
115117
pod, err := cs.CoreV1().Pods(namespace).Get(context.Background(), name, meta.GetOptions{})
116118
if err != nil {
117-
return core.ConditionUnknown, fmt.Sprintf("error getting pod %q in %q namespace: %v", name, namespace, err)
119+
return core.ConditionUnknown, fmt.Sprintf("error getting pod %q in %q namespace (skipping!): %v", name, namespace, err)
118120
}
119121

120122
// check if undelying node is Ready - in case we got stale data about the pod
121123
if pod.Spec.NodeName != "" {
122124
if status, reason := nodeConditionStatus(cs, pod.Spec.NodeName, core.NodeReady); status != core.ConditionTrue {
123-
return core.ConditionUnknown, fmt.Sprintf("node %q hosting pod %q in %q namespace is currently not %q: %v", pod.Spec.NodeName, name, namespace, core.NodeReady, reason)
125+
return core.ConditionUnknown, fmt.Sprintf("node %q hosting pod %q in %q namespace is currently not %q (skipping!): %v", pod.Spec.NodeName, name, namespace, core.NodeReady, reason)
124126
}
125127
}
126128

pkg/minikube/bootstrapper/kubeadm/kubeadm.go

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -676,34 +676,6 @@ func (k *Bootstrapper) restartControlPlane(cfg config.ClusterConfig) error {
676676
}
677677
}
678678

679-
if cfg.VerifyComponents[kverify.ExtraKey] {
680-
// after kubelet is restarted (with 'kubeadm init phase kubelet-start' above),
681-
// it appears as to be immediately Ready as well as all kube-system pods (last observed state),
682-
// then (after ~10sec) it realises it has some changes to apply, implying also pods restarts,
683-
// and by that time we would exit completely, so we wait until kubelet begins restarting pods
684-
klog.Info("waiting for restarted kubelet to initialise ...")
685-
start := time.Now()
686-
wait := func() error {
687-
pods, err := client.CoreV1().Pods(meta.NamespaceSystem).List(context.Background(), meta.ListOptions{LabelSelector: "tier=control-plane"})
688-
if err != nil {
689-
return err
690-
}
691-
for _, pod := range pods.Items {
692-
if ready, _ := kverify.IsPodReady(&pod); !ready {
693-
return nil
694-
}
695-
}
696-
return fmt.Errorf("kubelet not initialised")
697-
}
698-
_ = retry.Expo(wait, 250*time.Millisecond, 1*time.Minute)
699-
klog.Infof("kubelet initialised")
700-
klog.Infof("duration metric: took %s waiting for restarted kubelet to initialise ...", time.Since(start))
701-
702-
if err := kverify.WaitExtra(client, kverify.CorePodsLabels, kconst.DefaultControlPlaneTimeout); err != nil {
703-
return errors.Wrap(err, "extra")
704-
}
705-
}
706-
707679
cr, err := cruntime.New(cruntime.Config{Type: cfg.KubernetesConfig.ContainerRuntime, Runner: k.c})
708680
if err != nil {
709681
return errors.Wrap(err, "runtime")
@@ -741,6 +713,35 @@ func (k *Bootstrapper) restartControlPlane(cfg config.ClusterConfig) error {
741713
return errors.Wrap(err, "addons")
742714
}
743715

716+
// must be called after applyCNI and `kubeadm phase addon all` (ie, coredns redeploy)
717+
if cfg.VerifyComponents[kverify.ExtraKey] {
718+
// after kubelet is restarted (with 'kubeadm init phase kubelet-start' above),
719+
// it appears as to be immediately Ready as well as all kube-system pods (last observed state),
720+
// then (after ~10sec) it realises it has some changes to apply, implying also pods restarts,
721+
// and by that time we would exit completely, so we wait until kubelet begins restarting pods
722+
klog.Info("waiting for restarted kubelet to initialise ...")
723+
start := time.Now()
724+
wait := func() error {
725+
pods, err := client.CoreV1().Pods(meta.NamespaceSystem).List(context.Background(), meta.ListOptions{LabelSelector: "tier=control-plane"})
726+
if err != nil {
727+
return err
728+
}
729+
for _, pod := range pods.Items {
730+
if ready, _ := kverify.IsPodReady(&pod); !ready {
731+
return nil
732+
}
733+
}
734+
return fmt.Errorf("kubelet not initialised")
735+
}
736+
_ = retry.Expo(wait, 250*time.Millisecond, 1*time.Minute)
737+
klog.Infof("kubelet initialised")
738+
klog.Infof("duration metric: took %s waiting for restarted kubelet to initialise ...", time.Since(start))
739+
740+
if err := kverify.WaitExtra(client, kverify.CorePodsLabels, kconst.DefaultControlPlaneTimeout); err != nil {
741+
return errors.Wrap(err, "extra")
742+
}
743+
}
744+
744745
if err := bsutil.AdjustResourceLimits(k.c); err != nil {
745746
klog.Warningf("unable to adjust resource limits: %v", err)
746747
}
@@ -776,9 +777,17 @@ func (k *Bootstrapper) GenerateToken(cc config.ClusterConfig) (string, error) {
776777
joinCmd := r.Stdout.String()
777778
joinCmd = strings.Replace(joinCmd, "kubeadm", bsutil.InvokeKubeadm(cc.KubernetesConfig.KubernetesVersion), 1)
778779
joinCmd = fmt.Sprintf("%s --ignore-preflight-errors=all", strings.TrimSpace(joinCmd))
779-
if cc.KubernetesConfig.CRISocket != "" {
780-
joinCmd = fmt.Sprintf("%s --cri-socket %s", joinCmd, cc.KubernetesConfig.CRISocket)
780+
781+
// avoid "Found multiple CRI sockets, please use --cri-socket to select one: /var/run/dockershim.sock, /var/run/crio/crio.sock" error
782+
cr, err := cruntime.New(cruntime.Config{Type: cc.KubernetesConfig.ContainerRuntime, Runner: k.c, Socket: cc.KubernetesConfig.CRISocket})
783+
if err != nil {
784+
klog.Errorf("cruntime: %v", err)
785+
}
786+
sp := cr.SocketPath()
787+
if sp == "" {
788+
sp = kconst.DefaultDockerCRISocket
781789
}
790+
joinCmd = fmt.Sprintf("%s --cri-socket %s", joinCmd, sp)
782791

783792
return joinCmd, nil
784793
}

pkg/minikube/cni/cni.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,6 @@ func chooseDefault(cc config.ClusterConfig) Manager {
143143
return Bridge{}
144144
}
145145

146-
if cc.KubernetesConfig.ContainerRuntime != "docker" {
147-
if driver.IsKIC(cc.Driver) {
148-
klog.Infof("%q driver + %s runtime found, recommending kindnet", cc.Driver, cc.KubernetesConfig.ContainerRuntime)
149-
return KindNet{cc: cc}
150-
}
151-
klog.Infof("%q driver + %s runtime found, recommending bridge", cc.Driver, cc.KubernetesConfig.ContainerRuntime)
152-
return Bridge{cc: cc}
153-
}
154-
155146
if driver.BareMetal(cc.Driver) {
156147
klog.Infof("Driver %s used, CNI unnecessary in this configuration, recommending no CNI", cc.Driver)
157148
return Disabled{cc: cc}
@@ -164,6 +155,15 @@ func chooseDefault(cc config.ClusterConfig) Manager {
164155
return KindNet{cc: cc}
165156
}
166157

158+
if cc.KubernetesConfig.ContainerRuntime != "docker" {
159+
if driver.IsKIC(cc.Driver) {
160+
klog.Infof("%q driver + %s runtime found, recommending kindnet", cc.Driver, cc.KubernetesConfig.ContainerRuntime)
161+
return KindNet{cc: cc}
162+
}
163+
klog.Infof("%q driver + %s runtime found, recommending bridge", cc.Driver, cc.KubernetesConfig.ContainerRuntime)
164+
return Bridge{cc: cc}
165+
}
166+
167167
klog.Infof("CNI unnecessary in this configuration, recommending no CNI")
168168
return Disabled{cc: cc}
169169
}

pkg/minikube/cruntime/cruntime_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ func (f *FakeRunner) systemctl(args []string, root bool) (string, error) { // no
486486
}
487487

488488
for _, svc := range svcs {
489+
svc = strings.Replace(svc, ".service", "", 1)
489490
state, ok := f.services[svc]
490491
if !ok {
491492
return out, fmt.Errorf("unknown fake service: %s", svc)
@@ -526,6 +527,11 @@ func (f *FakeRunner) systemctl(args []string, root bool) (string, error) { // no
526527
return out, nil
527528
}
528529
return out, fmt.Errorf("%s cat unimplemented", svc)
530+
case "enable":
531+
case "disable":
532+
case "mask":
533+
case "unmask":
534+
f.t.Logf("fake systemctl: %s %s: %v", svc, action, state)
529535
default:
530536
return out, fmt.Errorf("unimplemented fake action: %q", action)
531537
}
@@ -587,7 +593,8 @@ func TestDisable(t *testing.T) {
587593
runtime string
588594
want []string
589595
}{
590-
{"docker", []string{"sudo", "systemctl", "stop", "-f", "docker.socket", "sudo", "systemctl", "stop", "-f", "docker"}},
596+
{"docker", []string{"sudo", "systemctl", "stop", "-f", "docker.socket", "sudo", "systemctl", "stop", "-f", "docker.service",
597+
"sudo", "systemctl", "disable", "docker.socket", "sudo", "systemctl", "mask", "docker.service"}},
591598
{"crio", []string{"sudo", "systemctl", "stop", "-f", "crio"}},
592599
{"containerd", []string{"sudo", "systemctl", "stop", "-f", "containerd"}},
593600
}

pkg/minikube/cruntime/docker.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,14 @@ func (r *Docker) Enable(disOthers, forceSystemd bool) error {
120120
return err
121121
}
122122

123+
if err := r.Init.Unmask("docker.service"); err != nil {
124+
return err
125+
}
126+
127+
if err := r.Init.Enable("docker.socket"); err != nil {
128+
klog.ErrorS(err, "Failed to enable", "service", "docker.socket")
129+
}
130+
123131
if forceSystemd {
124132
if err := r.forceSystemd(); err != nil {
125133
return err
@@ -146,7 +154,14 @@ func (r *Docker) Disable() error {
146154
if err := r.Init.ForceStop("docker.socket"); err != nil {
147155
klog.ErrorS(err, "Failed to stop", "service", "docker.socket")
148156
}
149-
return r.Init.ForceStop("docker")
157+
if err := r.Init.ForceStop("docker.service"); err != nil {
158+
klog.ErrorS(err, "Failed to stop", "service", "docker.service")
159+
return err
160+
}
161+
if err := r.Init.Disable("docker.socket"); err != nil {
162+
klog.ErrorS(err, "Failed to disable", "service", "docker.socket")
163+
}
164+
return r.Init.Mask("docker.service")
150165
}
151166

152167
// ImageExists checks if an image exists

pkg/minikube/sysinit/openrc.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ func (s *OpenRC) DisableNow(svc string) error {
122122
return fmt.Errorf("disable now is not implemented for OpenRC! PRs to fix are welcomed")
123123
}
124124

125+
// Mask does nothing
126+
func (s *OpenRC) Mask(svc string) error {
127+
return nil
128+
}
129+
125130
// Enable does nothing
126131
func (s *OpenRC) Enable(svc string) error {
127132
return nil
@@ -132,6 +137,11 @@ func (s *OpenRC) EnableNow(svc string) error {
132137
return fmt.Errorf("enable now is not implemented for OpenRC! PRs to fix are welcomed")
133138
}
134139

140+
// Unmask does nothing
141+
func (s *OpenRC) Unmask(svc string) error {
142+
return nil
143+
}
144+
135145
// Restart restarts a service
136146
func (s *OpenRC) Restart(svc string) error {
137147
rr, err := s.r.RunCmd(exec.Command("sudo", "service", svc, "restart"))

pkg/minikube/sysinit/sysinit.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,18 @@ type Manager interface {
4444
// Disable disables a service and stops it right after.
4545
DisableNow(string) error
4646

47+
// Mask prevents a service from being started
48+
Mask(string) error
49+
4750
// Enable enables a service
4851
Enable(string) error
4952

5053
// EnableNow enables a service and starts it right after.
5154
EnableNow(string) error
5255

56+
// Unmask allows a service to be started
57+
Unmask(string) error
58+
5359
// Start starts a service idempotently
5460
Start(string) error
5561

pkg/minikube/sysinit/systemd.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ func (s *Systemd) DisableNow(svc string) error {
5858
return err
5959
}
6060

61+
// Mask prevents a service from being started
62+
func (s *Systemd) Mask(svc string) error {
63+
_, err := s.r.RunCmd(exec.Command("sudo", "systemctl", "mask", svc))
64+
return err
65+
}
66+
6167
// Enable enables a service
6268
func (s *Systemd) Enable(svc string) error {
6369
if svc == "kubelet" {
@@ -76,6 +82,12 @@ func (s *Systemd) EnableNow(svc string) error {
7682
return err
7783
}
7884

85+
// Unmask allows a service to be started
86+
func (s *Systemd) Unmask(svc string) error {
87+
_, err := s.r.RunCmd(exec.Command("sudo", "systemctl", "unmask", svc))
88+
return err
89+
}
90+
7991
// Start starts a service
8092
func (s *Systemd) Start(svc string) error {
8193
if err := s.daemonReload(); err != nil {

0 commit comments

Comments
 (0)