Native scheduler of kubernetes can only schedule pods by resource request, which can easily cause a series of load uneven problems:
- for some nodes, the actual load is not much different from the resource request, which will lead to a very high probability of stability problems.
- for others, the actual load is much smaller than the resource request, which will lead to a huge waste of resources.
To solve these problems, Dynamic scheduler builds a simple but efficient model based on actual node utilization data,and filters out those nodes with high load to balance the cluster.
As shown above, Dynamic scheduler relies on `Prometheus` and `Node-exporter` to collect and aggregate metrics data, and it consists of two components:
!!! note "Note"
`Node-annotator` is currently a module of `Crane-scheduler-controller`.
-`Node-annotator` periodically pulls data from Prometheus and marks them with timestamp on the node in the form of annotations.
>**Note:** `Node-annotator` is currently a module of `Crane-scheduler-controller`.
-`Dynamic plugin` reads the load data directly from the node's annotation, filters and scores candidates based on a simple algorithm.
### Scheduler Policy
Dynamic provides a default [scheduler policy](../deploy/manifests/policy.yaml) and supports user-defined policies. The default policy reies on following metrics: