diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go index cba9db989040d6500c740cb72229c7af95987ad3..e65ad1449815a3f9146f81961b9f473e94e9dbfb 100644 --- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go +++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go @@ -71,7 +71,6 @@ type pod struct { // PodsByLayer are queries we run when health checking, sorted roughly by dependency layer var PodsByLayer = []pod{ - {"apiserver", "component", "kube-apiserver"}, {"proxy", "k8s-app", "kube-proxy"}, {"etcd", "component", "etcd"}, {"scheduler", "component", "kube-scheduler"}, @@ -257,12 +256,19 @@ func (k *Bootstrapper) WaitCluster(k8s config.KubernetesConfig) error { // by a CNI plugin which is usually started after minikube has been brought // up. Otherwise, minikube won't start, as "k8s-app" pods are not ready. componentsOnly := k8s.NetworkPlugin == "cni" - console.OutStyle("waiting-pods", "Verifying: ") + console.OutStyle("waiting-pods", "Verifying:") client, err := util.GetClient() if err != nil { return errors.Wrap(err, "k8s client") } + // Wait until the apiserver can answer queries properly. We don't care if the apiserver + // pod shows up as registered, but need the webserver for all subsequent queries. + console.Out(" apiserver") + if err := k.waitForAPIServer(k8s); err != nil { + return errors.Wrap(err, "waiting for apiserver") + } + for _, p := range PodsByLayer { if componentsOnly && p.key != "component" { continue