Skip to main content

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')

Release files for docker-cluster-controller 0.1.28

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for docker-cluster-controller 0.1.28
File Size Uploaded
docker-cluster-controller-0.1.28.tar.gz 15.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for docker-cluster-controller 0.1.28
File Interpreter ABI Platform
docker_cluster_controller-0.1.28-py3-none-any.whl Python 3 none any Details

Total release size:29.0 kB

Release files / docker-cluster-controller-0.1.28.tar.gz

Download URL docker-cluster-controller-0.1.28.tar.gz
Size 15.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c5fcd9ae0ac12982fbc10692f47d78e7a8200f3abd3bcb3727554f8a746411b6
BLAKE2b-256 checksum
How to use checksums
ccce303e92224d779b54b14515ed2e1b4787a5da745802e264175eec4d847fc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/51.1.0.post20201221 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.9.1

Release files / docker_cluster_controller-0.1.28-py3-none-any.whl

Download URL docker_cluster_controller-0.1.28-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d6ede0ccc269ee5e1e1236c32df179c9890fc796ffb9921fd1b1d0e5ff187039
BLAKE2b-256 checksum
How to use checksums
ea2325c479bc30dffaa45a7bc76c22d0b00cf9307b362278a00fb7206ea72e19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/51.1.0.post20201221 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.9.1

Release history Release notifications | RSS feed

This release

0.1.28 This release

2 release files

0.1.27

2 release files

0.1.26

2 release files

0.1.25

2 release files

0.1.23

2 release files

0.1.22

2 release files

0.1.21

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page