Skip to content

"swarm exec" support #425

@zibellon

Description

@zibellon

Is your feature request related to a problem? Please describe.
Yes. The problem was described in issue 423. previous issue

Main points of problem

  1. Swarm cluster. 2 Nodes. MASTER_1, WORKER_1
  2. Run postgres with docker on WORKER_1
  3. Need to backup postgres. Before backup need to run script: pg_dump ...
  4. Up offen-backup on WORKER_1, add labels to deploy section of postgres stack (service)
  5. Catch the error: no master node. Can exec labels only on master

Describe the solution you'd like
Solution is

  1. Run offen-backup service ONLY on master node
  2. For exec labels - run one-time container (docker:25.0.5-cli-alpine) on EACH node when we found tasks (containers) with lables
  3. For volumes - run one-time container (offen-backup, for example) on EACH node when we found tasks (containers) with labels: volume-list (You can see it in my .sh script)
  4. If we want to use different timers for different exec-lables or different volume-list-labels - we can also use your idea of exec-label=database, but add support for exec and for volume-list

Additional context
I'm a big fan of docker-swarm. And use swarm cluster in production.

I spent some time and write .sh script for backup WHOLE swarm cluster, depends on labels and use your open-source project
swarm-backuper.sh

  1. GET all volumes from all nodes. Start docker dind container on each node and get volume list
  2. GET all services with label volume-list. in this label - we enter volumes, which we want to backup for this service. JOIN this volumes with volumes from step one. Result: MAP<node-name, [volume1, volume2, etc]>
  3. RUN all labels: exec-pre. Run separate container on each node, where we need to run exec-pre and run docker exec ...
  4. STOP all services with label: stop. Important: stop === scale to 0, Stop only services in replicated mode
  5. RUN offen-backup on each node with all volumes from step 2
  6. RESTORE all services with label: stop. Important: we need to use the JSON from step 4. Scale to original replicas number, before step 4
  7. RUN all labels: exec-post

How we can run it ?
swarm-backuper-stack.yaml


All of this functions can be write on GoLang and add to ypur project (offen-backup)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions