Difference between revisions of "Docker volume orchestration"
(→Futtatás a háttérben) |
(→Futtatás a háttérben) |
||
Line 105: | Line 105: | ||
A logokat a '''/var/log/boot2docker.log''' fájlba fogja írni, nem a '''nohup.out'''-ba. | A logokat a '''/var/log/boot2docker.log''' fájlba fogja írni, nem a '''nohup.out'''-ba. | ||
− | {{note|Ha újra indul a VM (és vele együtt a netshare) akkor az összes megosztás elveszik, mivel a netshare nem perzisztálja a rajta létrehozott megosztásokat. Ez | + | {{note|Ha újra indul a VM (és vele együtt a netshare) akkor az összes megosztás elveszik, mivel a netshare nem perzisztálja a rajta létrehozott megosztásokat. Ez a swarm service-eket kicsit sem zavarja, mert ha a swarm service nem indul el, akkor indít belőle egy új példányt a swarm, ami létre fogja hozni megint a megosztást, és újra fel fogja csatolni a távoli mappát. Ugyan ez nem elmondható a standalone konténerekről, amiket a '''docker run'''-al hoztunk létre. Ezekből nem fog új példány indulni, viszont nem fognak tudni elindulni, mivel a megosztás már nem létezik a netshare dirver-ben. Ezeket újra létre kell hozni (lehet hogy a '''--restart always''' segíthet ezen) }} |
− | |||
− | |||
− | |||
− | |||
==Automatikus telepítés== | ==Automatikus telepítés== |
Revision as of 14:46, 31 August 2018
Contents
Áttekintés
NFS mount
Bemutatás
Mount NFS v3/4, AWS EFS or CIFS
Mesos/Marathon and Docker Swarm
Installálás a boot2docker VM-en
Fontos, hogy csak a /var/lib/boot2docker a perzisztens mappa.
docker@mg0:~$ cd /var/lib/boot2docker docker@mg0:~$ sudo wget https://github.com/ContainX/docker-volume-netshare/releases/download/v0.35/docker-volume-netshare_0.35_linux_amd64.tar.gz docker@mg0:~$ sudo tar -xvzf docker-volume-netshare_0.35_linux_amd64.tar.gz docker@mg0:~$ sudo mv docker-volume-netshare_0.35_linux_amd64 netshare docker@mg0:~$ cd netshare/
Note
A boot2docker csak az nfs3 protokollt támogatja, ezért fontos, hogy a netshare indításakor megadjuk az nfs verziót, különben az nfs4-et fogja elindítani, ami boot2docker alatt nem működik
$ sudo ./docker-volume-netshare nfs -v 3 INFO[0000] == docker-volume-netshare :: Version: 0.35 - Built: 2018-01-27T22:43:03-08:00 == INFO[0000] Starting NFS Version 3 :: options: ''
Induláskor beírja magát ide: /run/docker/plugins, ezért nem kell külön docker plugin-ként telepíteni.
# docker-machine ssh mg0 sudo ls /run/docker/plugins nfs.sock
Docker standalone
# docker run -i -t --name ubuntu --volume-driver=nfs -v 192.168.42.1/home/adam/Projects/DockerCourse/persistentstore/portainer/data/:/data ubuntu /bin/bash root@5e82828c7a37:/#
... INFO[0060] Mounting NFS volume 192.168.42.1:/home/adam/Projects/DockerCourse/persistentstore/portainer/data/ on /var/lib/docker-volumes/netshare/nfs/192.168.42.1/home/adam/Projects/DockerCourse/persistentstore/portainer/data ...
root@5e82828c7a37:/# ls /data adam
# docker rm -f ubuntu
... INFO[0388] Unmounting volume name 192.168.42.1/home/adam/Projects/DockerCourse/persistentstore/portainer/data/ from /var/lib/docker-volumes/netshare/nfs/192.168.42.1/home/adam/Projects/DockerCourse/persistentstore/portainer/data ...
Volume létrehozása
Swarm service
docker service create \ --name portainer \ --publish 9000:9000 \ --replicas=1 \ --constraint 'node.role == manager' \ --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \ --mount type=volume,src=192.168.42.1/home/adam/Projects/DockerCourse/persistentstore/portainer/data/,dst=/data,volume-driver=nfs \ portainer/portainer -H unix:///var/run/docker.sock
# docker volume ls DRIVER VOLUME NAME nfs 192.168.42.1/home/adam/Projects/DockerCourse/persistentstore/portainer/data/
Warning
Valami olyat vettem észre, hogy ha swarm service-ként is fel van csatolva egy mappa, akkor azt nem lehet egy standalone swarm konténerbe is felcsatolni: failed: Device or resource busy
Viszont még egy VM-en belül is, akár több konténerhez is fel lehet ugyan azt csatolni
Futtatás a háttérben
sudo chmod 777 /var/lib/boot2docker/profile sudo echo 'cd /var/lib/boot2docker/netshare' >> /var/lib/boot2docker/profile sudo echo 'sudo nohup ./docker-volume-netshare nfs -v 3 &' >> /var/lib/boot2docker/profile
A logokat a /var/log/boot2docker.log fájlba fogja írni, nem a nohup.out-ba.
Note
Ha újra indul a VM (és vele együtt a netshare) akkor az összes megosztás elveszik, mivel a netshare nem perzisztálja a rajta létrehozott megosztásokat. Ez a swarm service-eket kicsit sem zavarja, mert ha a swarm service nem indul el, akkor indít belőle egy új példányt a swarm, ami létre fogja hozni megint a megosztást, és újra fel fogja csatolni a távoli mappát. Ugyan ez nem elmondható a standalone konténerekről, amiket a docker run-al hoztunk létre. Ezekből nem fog új példány indulni, viszont nem fognak tudni elindulni, mivel a megosztás már nem létezik a netshare dirver-ben. Ezeket újra létre kell hozni (lehet hogy a --restart always segíthet ezen)
Automatikus telepítés
installNetshare.sh
#!/bin/bash
# Usage: ./installNetshare.sh machine-name
machineName=$1
#Download Netshare binary into the users home directory (/home/docker)
docker-machine ssh $machineName "sudo wget https://github.com/ContainX/docker-volume-netshare/releases/download/v0.35/docker-volume-netshare_0.35_linux_amd64.tar.gz"
#Unpack Netshare
docker-machine ssh $machineName "sudo tar -xvzf docker-volume-netshare_0.35_linux_amd64.tar.gz"
docker-machine ssh $machineName "sudo mv docker-volume-netshare_0.35_linux_amd64 /var/lib/boot2docker/"
docker-machine ssh $machineName "sudo mv /var/lib/boot2docker/docker-volume-netshare_0.35_linux_amd64 /var/lib/boot2docker/netshare"
docker-machine ssh $machineName "sudo chmod 777 /var/lib/boot2docker/netshare/"
#Start NFS during system start up
docker-machine ssh $machineName "sudo chmod 777 /var/lib/boot2docker/profile"
docker-machine ssh $machineName "sudo echo 'cd /var/lib/boot2docker/netshare' >> /var/lib/boot2docker/profile"
docker-machine ssh $machineName "sudo echo 'sudo nohup ./docker-volume-netshare nfs -v 3 &' >> /var/lib/boot2docker/profile"
#Restart the sytem for the modifications to take effect
#docker-machine restart $machineName
virsh shutdown $machineName
sleep 20s
virsh start $machineName
Sajnos a docker-machine ssh machine command paranccsal nem lehet valamiért elindítani a netshare-t. Tehát ez a formula nem működik:
docker-machine ssh mg0 sudo nohup nohup ./docker-volume-netshare nfs -v 3 &
Ugyan nem dob hibát, de nem is csinál semmit. Így muszáj újraindítani a VM-et, hogy a /profile fájlban lévő netshare indítás lefusson. Lehet hogy valahogy újra lehetne tölteni a profile-t, de itt a boot2docker-ban semmi nem megy könnyen.
Ezen felül azt is észrevettem, hogy ha a docker-machine restart paranccsal indítom újra a VM-et néha elveszik minden módosítás, hiba írtam azokat a perzisztens mappába (/var/lib/boot2docker). Ezrét inkább a virsh-val indítom újra.
Érdemes lenne monitorozni, hogy elindult e már a VM mielőtt tovább megyünk. Vagy hogy tényleg leállt e mielőtt elindítjuk.
Convoy
https://github.com/rancher/convoy