Filter Scheduler

The Filter Scheduler supports filtering zun compute hosts to make decisions on where a new container should be created.

Filtering

Filter Scheduler iterates over all found compute hosts,evaluating each host against a set of filters. The Scheduler then chooses a host for the requested container. A specific filter can decide whether to pass or filter out a specific host. The decision is made based on the user request specification, the state of the host, and/or some extra information.

If the Scheduler cannot find candidates for the container, it means that there are no appropriate host where that container can be scheduled.

The Filter Scheduler has a set of filters that are built-in. If the built-in filters are insufficient, you can implement your own filters with your filtering algorithm.

There are many standard filter classes which may be used (zun.scheduler.filters):

  • CPUFilter - filters based on CPU core utilization. It passes hosts with sufficient number of CPU cores.

  • RamFilter - filters hosts by their RAM. Only hosts with sufficient RAM to host the instance are passed.

  • LabelFilter - filters hosts based on whether host has the CLI specified labels.

  • ComputeFilter - filters hosts that are operational and enabled. In general, you should always enable this filter.

  • RuntimeFilter - filters hosts by their runtime. It passes hosts with the specified runtime.

Configuring Filters

To use filters you specify two settings:

  • filter_scheduler.available_filters - Defines filter classes made available to the scheduler.

  • filter_scheduler.enabled_filters - Of the available filters, defines those that the scheduler uses by default.

The default values for these settings in zun.conf are:

--filter_scheduler.available_filters=zun.scheduler.filters.all_filters
--filter_scheduler.enabled_filters=RamFilter,CPUFilter,ComputeFilter,RuntimeFilter

With this configuration, all filters in zun.scheduler.filters would be available, and by default the RamFilter and CPUFilter would be used.

Writing Your Own Filter

To create your own filter you must inherit from BaseHostFilter and implement one method: host_passes. This method should return True if the host passes the filter.

P.S.: you can find more examples of using Filter Scheduler and standard filters in zun.tests.scheduler.