Skip to main content

A simple Python class to orchestrate cluster nodes within a docker environment.

Project description

Docker Cluster Controller

This project provides a 'clustercontroller' package which can be used to create a docker-entrypoint.

In complex docker swarm setups the order in which containers are started cannot be controlled (depends_on). When there is a need to have different actions depening on boot order this has to be handled during initialisation of the container.

The clustercontroller package provides a class which can be used in a docker-entrypoint.

In the docker-entrypoint multiprocessing is used through methods provided by the package to start two main processes:

  1. ClusterController process
  2. The actual service the container needs to provide

Both processes are registered and actively monitored. If one of both processes (unexpectedly) terminates the other is gracefully terminated using terminate signals.

The ClusterController registers the instance in ETCD and tries to aquire a master role. Depending on the boot order of containers it will either get the master role or become slave.

Depending on the role methods are executed during initialisation, during it's lifecycle any state transfer will also call appropriate actions for handling these events.

During startup of the controller 'scheduled' jobs can be registered for example to perform hourly actions. It is important to only use multiprocessing task using the 'start_process' method within these time based methods to 'freeze' any other processes.

Installation:

pip install docker-cluster-controller

Usage:

  1. Build a container with a docker-entrypoint using the clustercontroller. See the docker-entrypoint.py as and example implementation.
  2. Start a ETCD Cluster, see docker-service-discovery
  3. In the docker-compose file set environment variables so the clustercontroller knows where and how to register
Environment Variable Description
ETCD_HOSTS The hostnames of the ETCD node (comma seperated)
ETCD_PORT The port of the ETCD node
PORTS_WHEN_ACTIVE The port(s) when de service has become active (e.g. 80,443,8443)
ENVIRONMENT: A single ETCD node can be used for multimple environments, therefore the environment has to be specified. E.g. development'
SERVICE: The name of the service

Backup:

To use the rotating backup functionality some environemnt variables have to be set:

Environment Variable Description
BACKUP_HOURS_TO_KEEP=24 The number of hourly backups to keep
BACKUP_DAYS_TO_KEEP=14 The number of daily backups to keep
BACKUP_WEEKS_TO_KEEP=4 The number of weekly backups to keep
BACKUP_MONTHS_TO_KEEP=3 The number of monthly backups to keep
BACKUP_DESTINATION_FOLDER=backup The backup destination folder

Within a scheduled method the backup can be called:

    run_backup(name='myapp_backup', command=['backup_command', '-x', 'some_option', '-y', 'some_other_option'])

Filesystem locks

When starting the controller a tuple with some file system paths can be specified. The controller then make sures a lockfile is created for the current container in the path(s) specified.

    self.filesystem_locks= ('backup', )

The 'get_filesystem_lock' method will return True if the current container has a lock for the path or False if another container has a lock in place.

    self.get_filesystem_lock('backup')

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

docker-cluster-controller-0.1.21.tar.gz (13.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

docker_cluster_controller-0.1.21-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file docker-cluster-controller-0.1.21.tar.gz.

File metadata

  • Download URL: docker-cluster-controller-0.1.21.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for docker-cluster-controller-0.1.21.tar.gz
Algorithm Hash digest
SHA256 e6ee24be2358d563e9a826f1a15e9e5bc23fbb3ec1dda91c51566bf3d159fa51
MD5 c1de733e3fb76c7eab66a34775d4631d
BLAKE2b-256 51bf2389d092656bea3e316eeb6e4590c9a1b355e538fba14cdce09610e50c15

See more details on using hashes here.

File details

Details for the file docker_cluster_controller-0.1.21-py3-none-any.whl.

File metadata

  • Download URL: docker_cluster_controller-0.1.21-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for docker_cluster_controller-0.1.21-py3-none-any.whl
Algorithm Hash digest
SHA256 1a2b332f45b371226fa52ad4f4c58bb80e4818327b64b3ce37f8fc8ebb0dd1bc
MD5 227c8da96b3f536baae0fea9f15aec08
BLAKE2b-256 5175c5891a8307a1147dc96ab35fd4fa000ddd850a3a41426e9df83d1d841115

See more details on using hashes here.

Supported by

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