15  Docker Swarm

(ns docker-swarm)

We use Docker Swarm, as opposed to Kubernetes. Docker Swarm has been chosen due to our smaller needs, whereas Kubernetes has been deemed too big and complex.

15.1 Re-deployment

A small manual script for re-deploying the Docker swarm.

    • Edit /var/www/html/index.html on oiiku-proddb and update the maintenence window
    • Edit ansible/roles/haproxy-configure/templates/haproxy.production.cfg.j2 and set maintenence to be on
    • ansible-playbook -i inventory-production.yml configure-haproxy.yml -e "@secrets-production.yml" --extra-vars "hosts=all" --limit=oiiku_proddb
  • docker node ls for a list of all nodes
    • On leader: docker node demote <node-id1> <node-id2> ...
    • On non-leaders: docker swarm leave
    • On leader: docker node rm <node-id1> <node-id2> ...
    • On server with leader: docker swarm leave --force
    • ansible-playbook -i inventory-production.yml docker-swarm-create.yml -e "@secrets-production.yml" --extra-vars "hosts=all" --limit=oiiku_proddb
    • Note the token and manager node ip, and join all servers: ansible-playbook -i inventory-production.yml docker-swarm-join.yml -e "@secrets-production.yml" --extra-vars "hosts=all swarm_token=<swarm-token> swarm_node_ip=<ip-for-oiiku-proddb> --limit=oiiku_prod1,oiiku_prod2
    • Remove maintenance page
    • Update status.oiiku.com
    • Notify #team
source: docs/docker_swarm.clj