Skip to content

Commit 0eb911d

Browse files
authored
Merge pull request #28 from mwielgus/template-node-pods
Overwrite pod.spec.nodename and node.name in template nodes for scale up
2 parents 8a6bfb4 + 6f5d52e commit 0eb911d

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed

cluster-autoscaler/core/utils.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,35 +144,58 @@ func GetNodeInfosForGroups(nodes []*apiv1.Node, cloudProvider cloudprovider.Clou
144144
}
145145
id := nodeGroup.Id()
146146
if _, found := result[id]; !found {
147-
sanitizedNode, err := sanitizeTemplateNodeLables(node)
147+
// Build nodeInfo.
148+
nodeInfo, err := simulator.BuildNodeInfoForNode(node, kubeClient)
148149
if err != nil {
149150
return map[string]*schedulercache.NodeInfo{}, err
150151
}
151152

152-
nodeInfo, err := simulator.BuildNodeInfoForNode(sanitizedNode, kubeClient)
153+
// Sanitize node name.
154+
sanitizedNode, err := sanitizeTemplateNode(node, id)
153155
if err != nil {
154156
return map[string]*schedulercache.NodeInfo{}, err
155157
}
156-
result[id] = nodeInfo
158+
159+
// Update nodename in pods.
160+
sanitizedPods := make([]*apiv1.Pod, 0)
161+
for _, pod := range nodeInfo.Pods() {
162+
obj, err := api.Scheme.DeepCopy(pod)
163+
if err != nil {
164+
return nil, err
165+
}
166+
sanitizedPod := obj.(*apiv1.Pod)
167+
sanitizedPod.Spec.NodeName = sanitizedNode.Name
168+
sanitizedPods = append(sanitizedPods, sanitizedPod)
169+
}
170+
171+
// Build a new node info.
172+
sanitizedNodeInfo := schedulercache.NewNodeInfo(sanitizedPods...)
173+
if err := sanitizedNodeInfo.SetNode(sanitizedNode); err != nil {
174+
return nil, err
175+
}
176+
177+
result[id] = sanitizedNodeInfo
157178
}
158179
}
159180
return result, nil
160181
}
161182

162-
func sanitizeTemplateNodeLables(node *apiv1.Node) (*apiv1.Node, error) {
183+
func sanitizeTemplateNode(node *apiv1.Node, nodeGroup string) (*apiv1.Node, error) {
163184
obj, err := api.Scheme.DeepCopy(node)
164185
if err != nil {
165186
return nil, err
166187
}
188+
nodeName := fmt.Sprintf("template-node-for-%s-%d", nodeGroup, rand.Int63())
167189
newNode := obj.(*apiv1.Node)
168190
newNode.Labels = make(map[string]string, len(node.Labels))
169191
for k, v := range node.Labels {
170192
if k != metav1.LabelHostname {
171193
newNode.Labels[k] = v
172194
} else {
173-
newNode.Labels[k] = fmt.Sprintf("template-node-for-cluster-autoscaler-%d", rand.Int63())
195+
newNode.Labels[k] = nodeName
174196
}
175197
}
198+
newNode.Name = nodeName
176199
return newNode, nil
177200
}
178201

cluster-autoscaler/core/utils_test.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,18 @@ func TestRemoveOldUnregisteredNodes(t *testing.T) {
105105
assert.Equal(t, "ng1/ng1-2", deletedNode)
106106
}
107107

108-
func testSanitizeLabels(t *testing.T) {
109-
node := BuildTestNode("ng1-1", 1000, 1000)
110-
node.Labels[metav1.LabelHostname] = "abc"
111-
node.Labels["x"] = "y"
112-
node, err := sanitizeTemplateNodeLables(node)
108+
func TestSanitizeLabels(t *testing.T) {
109+
oldNode := BuildTestNode("ng1-1", 1000, 1000)
110+
oldNode.Labels = map[string]string{
111+
metav1.LabelHostname: "abc",
112+
"x": "y",
113+
}
114+
node, err := sanitizeTemplateNode(oldNode, "bzium")
113115
assert.NoError(t, err)
114116
assert.NotEqual(t, node.Labels[metav1.LabelHostname], "abc")
115117
assert.Equal(t, node.Labels["x"], "y")
118+
assert.NotEqual(t, node.Name, oldNode.Name)
119+
assert.Equal(t, node.Labels[metav1.LabelHostname], node.Name)
116120
}
117121

118122
func TestRemoveFixNodeTargetSize(t *testing.T) {

0 commit comments

Comments
 (0)