@@ -114,15 +114,18 @@ func (n Node) CordonAndDrain(nodeName string, reason string, recorder recorderIn
114
114
if err != nil {
115
115
return err
116
116
}
117
- // Delete all pods on the node
118
- log . Info (). Msg ( "Draining the node" )
117
+ // Be very careful here: in tests, nodeName and node.Name can be different, as
118
+ // fetchKubernetesNode does some translation using the kubernetes.io/hostname label
119
119
node , err := n .fetchKubernetesNode (nodeName )
120
120
if err != nil {
121
121
return err
122
122
}
123
+ var pods * corev1.PodList
124
+ // Delete all pods on the node
125
+ log .Info ().Msg ("Draining the node" )
123
126
// Emit events for all pods that will be evicted
124
127
if recorder != nil {
125
- pods , err : = n .fetchAllPods (nodeName )
128
+ pods , err = n .fetchAllPods (node . Name )
126
129
if err == nil {
127
130
for _ , pod := range pods .Items {
128
131
podRef := & corev1.ObjectReference {
@@ -139,7 +142,14 @@ func (n Node) CordonAndDrain(nodeName string, reason string, recorder recorderIn
139
142
}
140
143
}
141
144
}
142
- err = drain .RunNodeDrain (n .drainHelper , node .Name )
145
+ if n .nthConfig .UseAPIServerCacheToListPods {
146
+ if pods != nil {
147
+ err = n .drainHelper .DeleteOrEvictPods (pods .Items )
148
+ }
149
+ } else {
150
+ // RunNodeDrain does an etcd quorum-read to list all pods on this node
151
+ err = drain .RunNodeDrain (n .drainHelper , node .Name )
152
+ }
143
153
if err != nil {
144
154
return err
145
155
}
0 commit comments