### Elasticsearch Version

8.0.0

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

Elastic Cloud

### Problem Description

Spotted in Elastic Cloud when autoscaling is enabled with only 1 zone for ML.

Using third party model deployments as an example, when the resources of a currently provisioned ML node have been exceeded, the user should still be able to start trained model deployments and the existing node resources should be scaled up.

**Current observed behavior**
If autoscaling is limited to just 1 ML node/zone, autoscaling doesn’t work if an ML node is provisioned but it doesn't have enough resources to fit new workloads.



### Steps to Reproduce

1. Create a deployment in Elastic Cloud using v8.0.0, autoscaling enabled and only 1 ML zone.
2. Upload and start a third party trained model deployment
3. Wait for autoscaling to provision an ML node
4. Try uploading/starting more third party trained model deployment until currently available resources are exceeded
5. Notice that instead of upscaling the ML node, the trained model start command fails claiming "not enough resources available".

### Logs (if relevant)

_No response_
x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/job/JobNodeSelector.java
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;
import static org.elasticsearch.xpack.ml.MachineLearning.MAX_OPEN_JOBS_PER_NODE;
/**
 * Class that contains the logic to decide which node to assign each job to.
 *
 * The assignment rules are as follows:
 *
 * 1. Reject nodes that are not ML nodes
 * 2. Reject nodes for which the node filter returns a rejection reason
 * 3. Reject nodes where the new job would result in more than the permitted number of concurrent "opening" jobs
 * 4. Reject nodes where the new job would result in more than the permitted number of assigned jobs
 * 5. If assigning by memory, reject nodes where the new job would result in the permitted amount of memory being exceeded
 * 6. If assigning by memory, pick the node that remains after rejections that has the most remaining memory
 * 7. If assigning by count, pick the node that remains after rejections that has the fewest jobs assigned to it
 *
 * The decision on whether to assign by memory or by count is:
 * - If values are available for every node's memory size and every job's memory requirement then assign by memory
 * - Otherwise assign by count
 */
public class JobNodeSelector {
    public static final PersistentTasksCustomMetadata.Assignment AWAITING_LAZY_ASSIGNMENT = new PersistentTasksCustomMetadata.Assignment(
        null,
        "persistent task is awaiting node assignment."
    );