Scheduling
The scheduling of services spawned by Yaook is handled by the Kubernetes Scheduler using Affinities and Tolerations. All services come with a set of Affinities and Tolerations which allows fine-grained control over the placement of the components.
To each scheduleable component a Scheduling Key is assigned. The Key is used as
key for both tolerations and labels. If a component has the key foo/bar
, it
will tolerate both NoExecute
and NoSchedule
taints with that key and
it will only run on nodes with that as label.
A notable exception is the Neutron Layer 2 Agent, which will schedule itself based on other criteria (see Neutron OVN Agent below).
In addition, a component may also listen to a Scheduling Group Key. In that case, it will tolerate that key and it will also run on nodes which just have a label matching that key.
Note
This means that, on a fresh Kubernetes cluster, no services will be scheduled at all.
For details on the specific scheduling keys, please see
yaook.op.scheduling_keys.SchedulingKey
.
Neutron OVN Agent
Neutron’s OVN Agent is a strict dependency of NovaComputeNode and OVNBGPAgent.
It will tolerate all the keys of the following services (in addition to
the SchedulingKey.NETWORK_NEUTRON_OVN_AGENT
) and
it will be spawned on all nodes matching any of their keys:
Nova Compute:
SchedulingKey.COMPUTE_HYPERVISOR
Neutron OVN BGP Agent:
SchedulingKey.NETWORK_NEUTRON_BGP_AGENT
Agents needing Neutron OVN (bgp, compute)
Besides the Scheduling Key each component has (see
yaook.op.scheduling_keys.SchedulingKey
)
components that depend on OVN agent have another scheduling dependency.
The neutron_ovn operator sets an label to the node, that no OVN maintenance is required. If this label is missing or set to maintenance required, the agents/services won’t be scheduled on or will be deleted from the node.
More details about this: .. _concepts.safe-eviction.implementation.neutron-ovn-agent:
Neutron OVN BGP Agent
This agent is optional, just like Neutron BGP DR Agent. To schedule it, the neutron deployment needs to have the spec.ovn.bgp section defined with a configname (will be used for naming the agent) and configTemplate (can be empty nodeSelector).