@@ -22,9 +22,7 @@ import (
22
22
"fmt"
23
23
"time"
24
24
25
- "k8s.io/klog"
26
-
27
- "k8s.io/api/core/v1"
25
+ v1 "k8s.io/api/core/v1"
28
26
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29
27
"k8s.io/apimachinery/pkg/types"
30
28
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -37,6 +35,7 @@ import (
37
35
"k8s.io/client-go/tools/record"
38
36
clientretry "k8s.io/client-go/util/retry"
39
37
cloudprovider "k8s.io/cloud-provider"
38
+ "k8s.io/klog"
40
39
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
41
40
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
42
41
nodeutil "k8s.io/kubernetes/pkg/util/node"
@@ -199,14 +198,22 @@ func (cnc *CloudNodeController) updateNodeAddress(node *v1.Node, instances cloud
199
198
}
200
199
201
200
func (cnc * CloudNodeController ) UpdateCloudNode (_ , newObj interface {}) {
202
- if _ , ok := newObj .(* v1.Node ); ! ok {
201
+ node , ok := newObj .(* v1.Node )
202
+ if ! ok {
203
203
utilruntime .HandleError (fmt .Errorf ("unexpected object type: %v" , newObj ))
204
204
return
205
205
}
206
- cnc .AddCloudNode (newObj )
206
+
207
+ cloudTaint := getCloudTaint (node .Spec .Taints )
208
+ if cloudTaint == nil {
209
+ // The node has already been initialized so nothing to do.
210
+ return
211
+ }
212
+
213
+ cnc .initializeNode (node )
207
214
}
208
215
209
- // This processes nodes that were added into the cluster, and cloud initialize them if appropriate
216
+ // AddCloudNode handles initializing new nodes registered with the cloud taint.
210
217
func (cnc * CloudNodeController ) AddCloudNode (obj interface {}) {
211
218
node := obj .(* v1.Node )
212
219
@@ -216,6 +223,12 @@ func (cnc *CloudNodeController) AddCloudNode(obj interface{}) {
216
223
return
217
224
}
218
225
226
+ cnc .initializeNode (node )
227
+ }
228
+
229
+ // This processes nodes that were added into the cluster, and cloud initialize them if appropriate
230
+ func (cnc * CloudNodeController ) initializeNode (node * v1.Node ) {
231
+
219
232
instances , ok := cnc .cloud .Instances ()
220
233
if ! ok {
221
234
utilruntime .HandleError (fmt .Errorf ("failed to get instances from cloud provider" ))
@@ -290,7 +303,7 @@ func (cnc *CloudNodeController) AddCloudNode(obj interface{}) {
290
303
}
291
304
}
292
305
293
- curNode .Spec .Taints = excludeTaintFromList (curNode .Spec .Taints , * cloudTaint )
306
+ curNode .Spec .Taints = excludeCloudTaint (curNode .Spec .Taints )
294
307
295
308
_ , err = cnc .kubeClient .CoreV1 ().Nodes ().Update (curNode )
296
309
if err != nil {
@@ -318,10 +331,10 @@ func getCloudTaint(taints []v1.Taint) *v1.Taint {
318
331
return nil
319
332
}
320
333
321
- func excludeTaintFromList (taints []v1. Taint , toExclude v1.Taint ) []v1.Taint {
334
+ func excludeCloudTaint (taints []v1.Taint ) []v1.Taint {
322
335
newTaints := []v1.Taint {}
323
336
for _ , taint := range taints {
324
- if toExclude . MatchTaint ( & taint ) {
337
+ if taint . Key == schedulerapi . TaintExternalCloudProvider {
325
338
continue
326
339
}
327
340
newTaints = append (newTaints , taint )
0 commit comments