@@ -175,28 +175,56 @@ func evictNode(ctx context.Context, client kubernetes.Interface, node *corev1.No
175175 ErrOut : io .Discard ,
176176 Out : io .Discard ,
177177 OnPodDeletedOrEvicted : func (pod * corev1.Pod , usingEviction bool ) {
178- log .Info ("completed eviction" , "pod" , pod .Name )
178+ log .Info ("completed eviction" , "pod" , pod .Name , "usingEviction" , usingEviction )
179179 },
180180 }
181181
182- // Retry to avoid large delays when API server hickups occur.
183182 err := retry .Do (func () error {
183+ log .Info ("cordoning node" , "node" , node .Name )
184184 err := drain .RunCordonOrUncordon (helper , node , true )
185185 if err != nil {
186+ log .Error (err , "failed to cordon node" , "node" , node .Name )
186187 return fmt .Errorf ("could not cordon node %s: %w" , node .Name , err )
187188 }
189+ log .Info ("draining node" , "node" , node .Name )
188190 err = drain .RunNodeDrain (helper , node .Name )
189191 if err != nil {
192+ log .Error (err , "failed to drain node" , "node" , node .Name )
190193 return fmt .Errorf ("could not drain node %s: %w" , node .Name , err )
191194 }
192- // Wait for node to be deleted
195+ log .Info ("drain completed" , "node" , node .Name )
196+ // After drain, log remaining pods (excluding DaemonSets and mirror pods)
197+ opts := metav1.ListOptions {FieldSelector : "spec.nodeName=" + node .Name }
198+ podList , perr := client .CoreV1 ().Pods ("" ).List (ctx , opts )
199+ if perr != nil {
200+ log .Error (perr , "failed to list pods after drain" , "node" , node .Name )
201+ } else {
202+ remaining := 0
203+ for i := range podList .Items {
204+ pod := & podList .Items [i ]
205+ if pod .DeletionTimestamp != nil {
206+ continue // pod is terminating
207+ }
208+ if _ , isMirror := pod .Annotations ["kubernetes.io/config.mirror" ]; isMirror {
209+ continue // mirror pod
210+ }
211+ if controllerRef := metav1 .GetControllerOf (pod ); controllerRef != nil && controllerRef .Kind == "DaemonSet" {
212+ continue // DaemonSet pod
213+ }
214+ log .Info ("pod still present after drain" , "pod" , pod .Name , "namespace" , pod .Namespace )
215+ remaining ++
216+ }
217+ log .Info ("remaining pods after drain" , "count" , remaining , "node" , node .Name )
218+ }
193219 return nil
194220 }, retry .OnRetry (func (n uint , err error ) {
195221 log .Error (err , "retrying drain due to error" , "attempt" , n )
196222 }), retry .Attempts (5 ), retry .Delay (1 * time .Second ))
197223 if err != nil {
224+ log .Error (err , "eviction failed" , "node" , node .Name )
198225 return err
199226 }
227+ log .Info ("eviction succeeded" , "node" , node .Name )
200228 return nil
201229}
202230
0 commit comments