Skip to content

Commit

Permalink
fix --wait's failure to work on coredns pods (#19748)
Browse files Browse the repository at this point in the history
* fix --wait's failure to work on coredns pods

* fix ha test failure
  • Loading branch information
ComradeProgrammer authored Jan 8, 2025
1 parent f909b0d commit 3fef3ea
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
27 changes: 24 additions & 3 deletions pkg/minikube/bootstrapper/bsutil/kverify/system_pods.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ func WaitForSystemPods(r cruntime.Manager, bs bootstrapper.Bootstrapper, cfg con
}

// ExpectAppsRunning returns whether or not all expected k8s-apps are running. (without waiting for them)
func ExpectAppsRunning(cs *kubernetes.Clientset, expected []string) error {
func ExpectAppsRunning(cfg *config.ClusterConfig, cs *kubernetes.Clientset, expected []string) error {

found := map[string]bool{}

pods, err := cs.CoreV1().Pods("kube-system").List(context.Background(), meta.ListOptions{})
Expand All @@ -85,12 +86,32 @@ func ExpectAppsRunning(cs *kubernetes.Clientset, expected []string) error {
}
klog.Infof("%d kube-system pods found", len(pods.Items))

for !config.IsHA(*cfg) && !cfg.DisableOptimizations {
// when --disable-optimization is not specified
// for non-HA cluster
// core dns deployment has been scaled to 1 pods, wait until there is only 1 pod
corednsPods, err := cs.CoreV1().Pods("kube-system").List(context.Background(), meta.ListOptions{
LabelSelector: "k8s-app=kube-dns",
})
if err != nil {
return err
}
if len(corednsPods.Items) == 1 {
break
}
}

for _, pod := range pods.Items {
klog.Info(podStatusMsg(pod))

if pod.Status.Phase != core.PodRunning {
continue
}
for _, cs := range pod.Status.ContainerStatuses {
if !cs.Ready {
continue
}
}

for k, v := range pod.ObjectMeta.Labels {
if k == "component" || k == "k8s-app" {
Expand All @@ -112,12 +133,12 @@ func ExpectAppsRunning(cs *kubernetes.Clientset, expected []string) error {
}

// WaitForAppsRunning waits for expected Apps To be running
func WaitForAppsRunning(cs *kubernetes.Clientset, expected []string, timeout time.Duration) error {
func WaitForAppsRunning(cfg *config.ClusterConfig, cs *kubernetes.Clientset, expected []string, timeout time.Duration) error {
klog.Info("waiting for k8s-apps to be running ...")
start := time.Now()

checkRunning := func() error {
return ExpectAppsRunning(cs, expected)
return ExpectAppsRunning(cfg, cs, expected)
}

if err := retry.Local(checkRunning, timeout); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion pkg/minikube/bootstrapper/kubeadm/kubeadm.go
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ func (k *Bootstrapper) WaitForNode(cfg config.ClusterConfig, n config.Node, time
}

if cfg.VerifyComponents[kverify.AppsRunningKey] {
if err := kverify.WaitForAppsRunning(client, kverify.AppsRunningList, timeout); err != nil {
if err := kverify.WaitForAppsRunning(&cfg, client, kverify.AppsRunningList, timeout); err != nil {
return errors.Wrap(err, "waiting for apps_running")
}
}
Expand Down

0 comments on commit 3fef3ea

Please sign in to comment.