Skip to content

amirajoodani/Django_poll_App_on_Docker_swarm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

Django_poll_App_on_Docker_swarm

in this repository we Deploy Django Poll App on Docker Swarm

what is swarm ?

is the cluster solution based on docker containter to stablish HA For Containers swarm-diagram the senario that we assume is :
swarm cluster

there is Poll App Created with Django that you can create poll and see result .this app lunch on port 9000 and path is /poll .
prepare 3 vm and every one have two network interface . one of them is for private connection between cluster node .

swarm command :

see swarm nodes :

docker node ls

initialaize docker cluster (you get error because you have two have ):

docker swarm init
(Master node)#docker swarm init --advertise-addr PRIVATE_IP

(For adding other nodes to manager as worker node do this command on other nodes):

docker swarm join --token SWMTKN-1-0ug3tns725f08jre3a8kl9o48j6xu4wagi0rmqdxrstc2hbwdt-8j1e1yi08u4hvf9u4w4gjh1li 192.168.56.102:2377

(For leaving node fron orchastrator):

docker swarm leave --force

(to add all node as manager):

docker node promote swarm-2
docker node promote swarm-3

(for logout one node from manager):

docker node demote swarm-2

Install NFS For Sharing Database Between nodes:

replica 1 for app and db
(Master node)

# apt-get install nfs-kernel-server
# apt-get install nfs-common
# mkdir -p /var/nfs/db
# sudo chown nobody:nogroup /var/nfs/db
# vi /etc/exports
/var/nfs/db 192.168.56.0/24(rw,sync,no_subtree_check,no_root_squash)
(open port on firewall)
# sudo ufw allow from 192.168.56.0/24 to any port nfs
# sudo systemctl restart nfs-kernel-server
#exportfs -a

Deploy Django App on Swarm

(create registery)

docker service create --name registery --publish published=5000,target=5000 registery:2

push used image in docker compose to registery that all node have access to them :

docker-compose push

bring up docker compose to have project on master node :

docker-compose up -d

deploy django app on swarm cluster :

docker stack deploy --compose-file docker-compose.yml pollingservice

right now , we can see our app on all node :
1 (2) 2 (1) 3 5

see replicated service on cluster :
4 see proccess of service :

docker service ps pollingservice

(for scale service):

docker service scale pollingservice=2

(for down scale):

docker service scale test-swarm=1

for removing service its recomended to set replicas to 0

docker service scale test-swarm=0

or

docker service rm test-swarm

route mesh

docker service create --name pollingservice --replicas 2 --publish published=8080,target=80 pollingservice

Adminstration

for maintenance server :

docker node update --availability drain docker-swarm-1

monitor swarm health:

docker node inspect manager1 --format "{{ .ManagerStatus.Reachability }}"
docker node inspect manager1 --format "{{ .Status.State }}"

(backup and resotre) :
/var/lib/docker/swarm

(rebalance):

docker service update SERVICE_NAME