nodepool/doc/source/metastatic.rst
James E. Blair ea35fd5152 Add provider/pool priority support
This lets users configure providers which should fulfill requests
before other providers.  This facilitates using a less expensive
cloud before using a more expensive one.

The default priority is 100, to facilitate either raising above
or lowering below the default (while using only positive integers
in order to avoid confusion).

Change-Id: I969ea821e10a7773a0a8d135a4f13407319362ee
2022-05-23 13:28:21 -07:00

144 lines
4.6 KiB
ReStructuredText

.. _metastatic-driver:
.. default-domain:: zuul
Metastatic Driver
-----------------
This driver uses NodePool nodes (from any driver) as backing nodes to
further allocate "static-like" nodes for end use.
A typical use case is to be able to request a large node (a `backing
node`) from a cloud provider, and then divide that node up into
smaller nodes that are actually used (`requested nodes`). A backing
node can support one or more requested nodes, and backing nodes are
scaled up or down as necessary based on the number of requested
nodes.
The name is derived from the nodes it provides (which are like
"static" nodes) and the fact that the backing nodes come from NodePool
itself, which is "meta".
.. attr-overview::
:prefix: providers.[metastatic]
:maxdepth: 3
.. attr:: providers.[metastatic]
:type: list
A metastatic provider's resources are partitioned into groups
called `pools`, and within a pool, the node types which are to be
made available are listed.
.. note:: For documentation purposes the option names are prefixed
``providers.[metastatic]`` to disambiguate from other
drivers, but ``[metastatic]`` is not required in the
configuration (e.g. below
``providers.[metastatic].pools`` refers to the ``pools``
key in the ``providers`` section when the ``metastatic``
driver is selected).
Example:
.. code-block:: yaml
providers:
- name: meta-provider
driver: metastatic
pools:
- name: main
max-servers: 10
labels:
- name: small-node
backing-label: large-node
max-parallel-jobs: 2
grace-time: 600
.. attr:: name
:required:
A unique name for this provider configuration.
.. attr:: pools
:type: list
A pool defines a group of resources from the provider. Each pool has a
maximum number of nodes which can be launched from it, along with a number
of attributes that characterize the use of the backing nodes.
.. attr:: name
:required:
A unique name within the provider for this pool of resources.
.. attr:: priority
:type: int
:default: 100
The priority of this provider pool (a lesser number is a higher
priority). Nodepool launchers will yield requests to other
provider pools with a higher priority as long as they are not
paused. This means that in general, higher priority pools will
reach quota first before lower priority pools begin to be used.
This setting may be specified at the provider level in order
to apply to all pools within that provider, or it can be
overridden here for a specific pool.
.. attr:: max-servers
:type: int
Maximum number of servers spawnable from this pool. This can
be used to limit the number of servers. If not defined
nodepool can create as many servers that the backing node
providers support.
.. attr:: labels
:type: list
Each entry in a pool's `labels` section indicates that the
corresponding label is available for use in this pool.
.. code-block:: yaml
labels:
- name: small-node
backing-label: large-node
max-parallel-jobs: 2
grace-time: 600
Each entry is a dictionary with the following keys:
.. attr:: name
:type: str
:required:
Identifier for this label.
.. attr:: backing-label
:type: str
:required:
Refers to the name of a different label in Nodepool which
will be used to supply the backing nodes for requests of
this label.
.. attr:: max-parallel-jobs
:type: int
:default: 1
The number of jobs that can run in parallel on a single
backing node.
.. attr:: grace-time
:type: int
:default: 60
When all requested nodes which were assigned to a backing
node have been deleted, the backing node itself is
eligible for deletion. In order to reduce churn,
NodePool will wait a certain amount of time after the
last requested node is deleted to see if new requests
arrive for this label before deleting the backing node.
Set this value to the amount of time in seconds to wait.