diff --git a/cluster-autoscaler/core/static_autoscaler.go b/cluster-autoscaler/core/static_autoscaler.go index 1648bfb99b..8369266bac 100644 --- a/cluster-autoscaler/core/static_autoscaler.go +++ b/cluster-autoscaler/core/static_autoscaler.go @@ -22,6 +22,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/clusterstate" "k8s.io/autoscaler/cluster-autoscaler/clusterstate/utils" @@ -591,6 +592,13 @@ func allPodsAreNew(pods []*apiv1.Pod, currentTime time.Time) bool { return found && oldest.Add(unschedulablePodWithGpuTimeBuffer).After(currentTime) } +func buildNodeForNodeTemplate(nodeTemplate *schedulernodeinfo.NodeInfo, index int) *apiv1.Node { + node := nodeTemplate.Node().DeepCopy() + node.Name = fmt.Sprintf("%s-%d", node.Name, index) + node.UID = uuid.NewUUID() + return node +} + func getUpcomingNodeInfos(registry *clusterstate.ClusterStateRegistry, nodeInfos map[string]*schedulernodeinfo.NodeInfo) []*apiv1.Node { upcomingNodes := make([]*apiv1.Node, 0) for nodeGroup, numberOfNodes := range registry.GetUpcomingNodes() { @@ -600,7 +608,8 @@ func getUpcomingNodeInfos(registry *clusterstate.ClusterStateRegistry, nodeInfos continue } for i := 0; i < numberOfNodes; i++ { - upcomingNodes = append(upcomingNodes, nodeTemplate.Node()) + // Ensure new nodes having different names because nodeName would used as a map key. + upcomingNodes = append(upcomingNodes, buildNodeForNodeTemplate(nodeTemplate, i)) } } return upcomingNodes