Skip to content

Commit c38995d

Browse files
committed
Skip node pressure check if other checks failed, add retry
1 parent 4f6a9f6 commit c38995d

File tree

2 files changed

+29
-35
lines changed

2 files changed

+29
-35
lines changed

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

+12-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import (
2626
v1 "k8s.io/api/core/v1"
2727
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
2828
"k8s.io/client-go/kubernetes"
29+
kconst "k8s.io/kubernetes/cmd/kubeadm/app/constants"
30+
"k8s.io/minikube/pkg/util/retry"
2931
)
3032

3133
// NodeCondition represents a favorable or unfavorable node condition.
@@ -102,9 +104,17 @@ func NodePressure(cs *kubernetes.Clientset) error {
102104
glog.Infof("duration metric: took %s to run NodePressure ...", time.Since(start))
103105
}()
104106

105-
ns, err := cs.CoreV1().Nodes().List(meta.ListOptions{})
107+
var ns *v1.NodeList
108+
var err error
109+
110+
listNodes := func() error {
111+
ns, err = cs.CoreV1().Nodes().List(meta.ListOptions{})
112+
return err
113+
}
114+
115+
err = retry.Expo(listNodes, kconst.APICallRetryInterval, 2*time.Minute)
106116
if err != nil {
107-
return errors.Wrap(err, "list nodes")
117+
return errors.Wrap(err, "list nodes retry")
108118
}
109119

110120
for _, n := range ns.Items {

pkg/minikube/bootstrapper/kubeadm/kubeadm.go

+17-33
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ func (k *Bootstrapper) client(ip string, port int) (*kubernetes.Clientset, error
355355
}
356356

357357
// WaitForNode blocks until the node appears to be healthy
358-
func (k *Bootstrapper) WaitForNode(cfg config.ClusterConfig, n config.Node, timeout time.Duration) (waitErr error) {
358+
func (k *Bootstrapper) WaitForNode(cfg config.ClusterConfig, n config.Node, timeout time.Duration) error {
359359
start := time.Now()
360360

361361
if !n.ControlPlane {
@@ -371,20 +371,19 @@ func (k *Bootstrapper) WaitForNode(cfg config.ClusterConfig, n config.Node, time
371371
return errors.Wrap(err, "get control plane endpoint")
372372
}
373373

374-
defer func() { // run pressure verification after all other checks, so there be an api server to talk to.
375-
client, err := k.client(hostname, port)
376-
if err != nil {
377-
waitErr = errors.Wrap(err, "get k8s client")
378-
}
379-
if err := kverify.NodePressure(client); err != nil {
380-
adviseNodePressure(err, cfg.Name, cfg.Driver)
381-
waitErr = errors.Wrap(err, "node pressure")
382-
}
383-
}()
374+
client, err := k.client(hostname, port)
375+
if err != nil {
376+
return errors.Wrap(err, "kubernetes client")
377+
}
384378

385379
if !kverify.ShouldWait(cfg.VerifyComponents) {
386380
glog.Infof("skip waiting for components based on config.")
387-
return waitErr
381+
382+
if err := kverify.NodePressure(client); err != nil {
383+
adviseNodePressure(err, cfg.Name, cfg.Driver)
384+
return errors.Wrap(err, "node pressure")
385+
}
386+
return nil
388387
}
389388

390389
cr, err := cruntime.New(cruntime.Config{Type: cfg.KubernetesConfig.ContainerRuntime, Runner: k.c})
@@ -393,10 +392,6 @@ func (k *Bootstrapper) WaitForNode(cfg config.ClusterConfig, n config.Node, time
393392
}
394393

395394
if cfg.VerifyComponents[kverify.APIServerWaitKey] {
396-
client, err := k.client(hostname, port)
397-
if err != nil {
398-
return errors.Wrap(err, "get k8s client")
399-
}
400395
if err := kverify.WaitForAPIServerProcess(cr, k, cfg, k.c, start, timeout); err != nil {
401396
return errors.Wrap(err, "wait for apiserver proc")
402397
}
@@ -407,47 +402,36 @@ func (k *Bootstrapper) WaitForNode(cfg config.ClusterConfig, n config.Node, time
407402
}
408403

409404
if cfg.VerifyComponents[kverify.SystemPodsWaitKey] {
410-
client, err := k.client(hostname, port)
411-
if err != nil {
412-
return errors.Wrap(err, "get k8s client")
413-
}
414405
if err := kverify.WaitForSystemPods(cr, k, cfg, k.c, client, start, timeout); err != nil {
415406
return errors.Wrap(err, "waiting for system pods")
416407
}
417408
}
418409

419410
if cfg.VerifyComponents[kverify.DefaultSAWaitKey] {
420-
client, err := k.client(hostname, port)
421-
if err != nil {
422-
return errors.Wrap(err, "get k8s client")
423-
}
424411
if err := kverify.WaitForDefaultSA(client, timeout); err != nil {
425412
return errors.Wrap(err, "waiting for default service account")
426413
}
427414
}
428415

429416
if cfg.VerifyComponents[kverify.AppsRunningKey] {
430-
client, err := k.client(hostname, port)
431-
if err != nil {
432-
return errors.Wrap(err, "get k8s client")
433-
}
434417
if err := kverify.WaitForAppsRunning(client, kverify.AppsRunningList, timeout); err != nil {
435418
return errors.Wrap(err, "waiting for apps_running")
436419
}
437420
}
438421

439422
if cfg.VerifyComponents[kverify.NodeReadyKey] {
440-
client, err := k.client(hostname, port)
441-
if err != nil {
442-
return errors.Wrap(err, "get k8s client")
443-
}
444423
if err := kverify.WaitForNodeReady(client, timeout); err != nil {
445424
return errors.Wrap(err, "waiting for node to be ready")
446425
}
447426
}
448427

449428
glog.Infof("duration metric: took %s to wait for : %+v ...", time.Since(start), cfg.VerifyComponents)
450-
return waitErr
429+
430+
if err := kverify.NodePressure(client); err != nil {
431+
adviseNodePressure(err, cfg.Name, cfg.Driver)
432+
return errors.Wrap(err, "node pressure")
433+
}
434+
return nil
451435
}
452436

453437
// needsReconfigure returns whether or not the cluster needs to be reconfigured

0 commit comments

Comments
 (0)