Skip to main content

The regulator of your Docker Swarm cluster

Project description

Swarm Regulator

Regulate your Docker Swarm cluster, according to YOUR rules. Use async Python functions to enforce rules like service placement and resource management on your Docker Swarm.

Concepts

Consumer

Each regulator is based on top of a single consumer. The consumer responds to Docker events and instruments all components of the regulator.

Conditions

A regulator needs to know when to apply its rules. This is what conditions are for. Conditions help us know when should a rule be applied on a Docker Swarm entity. In brief, a condition is a Python function (or callable) that accepts a Docker Swarm entity as a single argument and returns True when the rule should run, and False when it shouldn't.

🙌 Heads up: In order to avoid infinite loops, a confition that initially returns True, should return False, when it gets the regulated entity as an argument. If this is not the case, the rule is being ignored.

Rules

Rules simply do the job. Rules are async Python functions that accept a Docker Swarm entity as an argument and return it modified, so it complies with the business logic we intend to enforce on our Docker Swarm cluster.

Requirements

  • Python 3.8+
  • Docker Swarm Mode cluster

Install

pipenv

pipenv install swarm-regulator

poetry

poetry add swarm-regulator

pip

pip install swarm-regulator

Run

  1. Create a Python file (e.g. regulator.py)
  2. Import the consumer from the swarm_regulator package
  3. Register your rules that will run according to given conditions
  4. Run your regulator

Example

regulator.py

from swarm_regulator import consumer


def _extract_constraints(service_spec):
    return service_spec["TaskTemplate"]["Placement"].get("Constraints", [])


def has_not_constraints(service_spec) -> bool:
    constraints = _extract_constraints(service_spec)
    return not len(constraints)


async def do_not_schedule_on_gpu(service_spec):
    constraints = _extract_constraints(service_spec) + ["node.labels.gpu!=true"]
    service_spec["TaskTemplate"]["Placement"]["Constraints"] = constraints
    return service_spec


consumer.register_rule(
    "service", has_not_constraints, do_not_schedule_on_gpu,
)

consumer.run()

Run

python regulator.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swarm-regulator-0.2.3.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

swarm_regulator-0.2.3-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file swarm-regulator-0.2.3.tar.gz.

File metadata

  • Download URL: swarm-regulator-0.2.3.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.0 CPython/3.8.1 Darwin/19.2.0

File hashes

Hashes for swarm-regulator-0.2.3.tar.gz
Algorithm Hash digest
SHA256 4356ce01bfd7b36e99f90aef1a631222808a44f0fbe5bef69ca3b402d55f35e6
MD5 f6c5dc1dee75d855ed1c8f7c334fc468
BLAKE2b-256 7674c351a09a1e6612fbb43c0a1848720230d9f649272b28625dbf888ac0438c

See more details on using hashes here.

File details

Details for the file swarm_regulator-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: swarm_regulator-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.0 CPython/3.8.1 Darwin/19.2.0

File hashes

Hashes for swarm_regulator-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 bace59cdf88bf3135ce769c8d41216bf7ef0c275edb7a723346f22de629bce97
MD5 7b777a2e94afe1b28aa0b62f7139940a
BLAKE2b-256 001daa454e62059b5b3347b6333d473cb0a14dbcbc724b85ee9147380c602286

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page