Skip to content

Commit bfd6fe7

Browse files
committed
Ignore topology.gke.io/zone when comparing groups
Commit bb2eed1 introduced a new `topology.gke.io/zone` label to GCE nodes templates, for CSI needs. That label holds zone name, making nodeInfo templates dissimilar for groups belonging to different zones. The CA otherwise tries to ignore those zonal labels (ie. it ignores the standards LabelZoneRegion and LabelZoneFailureDomain) when it looks for nodegroups similarities.
1 parent e017121 commit bfd6fe7

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

cluster-autoscaler/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,8 @@ func buildAutoscaler() (core.Autoscaler, error) {
309309
nodeInfoComparatorBuilder = nodegroupset.CreateAzureNodeInfoComparator
310310
} else if autoscalingOptions.CloudProviderName == cloudprovider.AwsProviderName {
311311
nodeInfoComparatorBuilder = nodegroupset.CreateAwsNodeInfoComparator
312+
} else if autoscalingOptions.CloudProviderName == cloudprovider.GceProviderName {
313+
nodeInfoComparatorBuilder = nodegroupset.CreateGceNodeInfoComparator
312314
}
313315

314316
opts.Processors.NodeGroupSetProcessor = &nodegroupset.BalancingNodeGroupSetProcessor{
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
Copyright 2019 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package nodegroupset
18+
19+
import (
20+
schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
21+
)
22+
23+
// CreateGceNodeInfoComparator returns a comparator that checks if two nodes should be considered
24+
// part of the same NodeGroupSet. This is true if they match usual conditions checked by IsCloudProviderNodeInfoSimilar,
25+
// even if they have different GCE-specific labels.
26+
func CreateGceNodeInfoComparator(extraIgnoredLabels []string) NodeInfoComparator {
27+
gceIgnoredLabels := map[string]bool{
28+
"topology.gke.io/zone": true,
29+
}
30+
31+
for k, v := range BasicIgnoredLabels {
32+
gceIgnoredLabels[k] = v
33+
}
34+
35+
for _, k := range extraIgnoredLabels {
36+
gceIgnoredLabels[k] = true
37+
}
38+
39+
return func(n1, n2 *schedulerframework.NodeInfo) bool {
40+
return IsCloudProviderNodeInfoSimilar(n1, n2, gceIgnoredLabels)
41+
}
42+
}

0 commit comments

Comments
 (0)