Docker Swarm Mode

From berki WIKI
Revision as of 23:05, 15 July 2018 by Adam (talk | contribs) (Portainer telepítése)

Jump to: navigation, search

<< Back to Orchestration main

Bevezető

IPTV

IPVS (IP Virtual Server) implements transport-layer load balancing, usually called Layer 4 LAN switching, as part of the Linux kernel. IPVS can direct requests for TCP- and UDP-based services to the real servers, and make services of the real servers appear as virtual services on a single IP address. IPVS is built on top of the Netfilter.[

SWARM

Introduction

A swarm is a group of machines that are running Docker and joined into a cluster. After that has happened, you continue to run the Docker commands you’re used to, but now they are executed on a cluster by a swarm manager. The machines in a swarm can be physical or virtual. After joining a swarm, they are referred to as nodes.

Source: https://docs.docker.com/get-started/part4/#introduction


docker@manager:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
uzhpeg3ug0ip6f9o3l51c749y *   manager             Ready               Active              Leader              18.05.0-ce
kstfblenhtb0dbpzkxo2olssn     worker1             Ready               Active                                  18.05.0-ce
pf8jdfmlegbx7dogi6jnbxu2y     worker2             Ready               Active                                  18.05.0-ce

https://docs.docker.com/engine/swarm/swarm-tutorial/deploy-service/


Create swarm

docker@manager:~$ docker swarm init --advertise-addr 192.168.42.118
Swarm initialized: current node (uzhpeg3ug0ip6f9o3l51c749y) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-21qaw0xpv9tj2kjxbmj6jn2jqpbcjjkyeze2nno9yy0wvt0vp9-9k2yyit1x8a11ca50ejxalzhz 192.168.42.118:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.


docker@master:~$ docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-25li3z5dk9qianluoo2kk35geu2rwegg6ku6kfpefnyuhq00l5-6lj0p6lhrn0ytr28xohyy74zd 192.168.123.166:2377


# docker-machine create -d kvm --kvm-network "docker-network" --kvm-disk-size "5000"  node1
Running pre-create checks...
Creating machine...
...
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env node1


# docker-machine ssh node1
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.05.0-ce, build HEAD : b5d6989 - Thu May 10 16:35:28 UTC 2018
Docker version 18.05.0-ce, build f150324
docker@node1:~$


docker@node1:~$ docker swarm join --token SWMTKN-1-25li3z5dk9qianluoo2kk35geu2rwegg6ku6kfpefnyuhq00l5-6lj0p6lhrn0ytr28xohyy74zd 192.168.123.166:2377
This node joined a swarm as a worker.
docker@node1:~$ exit


[root@adamDell2 ~]# docker-machine ssh master docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
lstjx5br3i0nry3xijgeoc0u8 *   master              Ready               Active              Leader              18.05.0-ce
77yip8j71murtcu9kqki2m2in     node1               Ready               Active                                  18.05.0-ce


Létrehozunk egy szolgáltatást az nginx image-ből. Három példányban fog futni.

# docker-machine ssh master docker service create --name nginx --replicas 3 nginx
o7dgqt3yynw3rs7yh2snmyybi
overall progress: 0 out of 3 tasks
1/3:  
2/3:  
3/3:  


Nézzük meg, hogy hol jöttek létre a konténerek az új szolgáltatásunkhoz. 2 a masteren, 1 pedig a node1-en fut.

# docker-machine ssh master docker service ps nginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
5pfmf0noxxfp        nginx.1             nginx:latest        node1               Running             Running about a minute ago                       
k4osxnv0a8lm        nginx.2             nginx:latest        master              Running             Running about a minute ago                       
t28ndarnryl5        nginx.3             nginx:latest        master              Running             Running about a minute ago              


Ha csak a docker ps parancsot futtatjuk le, akkor láthatjuk, hogy csak azt a két konténert látjuk,amit a swarm a master node-on helyezett el.

# docker-machine ssh master docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
0386b9b36ad1        nginx:latest        "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        80/tcp              nginx.3.t28ndarnryl5r6plfbgcwb9sw
568088b05844        nginx:latest        "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        80/tcp              nginx.2.k4osxnv0a8lm0qvwma0qvfat3



Monitor cluster

Több grafikus docker monitor eszköz is létezik:

  • Shipyard (webes)
  • Portainer (webes)
  • Kitematic (vastag kliens)


A legegyszerűbb a Portainer használata, ami egyetlen konténert telepít fel a docker-be, képes távoli docker démonho is kapcsolódni, és van benne swarm mode támogatás is.


Két lehetőségünk van a Portainer futtatására:

  • Ahhoz hogy a swarm klászer adatait tudjuk monitorozni, valamelyik manager node-on futó docker démonhoz kell kapcsolódni a lokális docker -ben futó Portainer-el. Ezt TLS autentikációval lehet megoldani. Ekkor a Portanier a localhost-on érhető el. (mi ezt fogjuk használni)
  • A Portainer-t eleve a manager node-ot is futtató docker démonban telepítjük fel a távoli gépen, ekkor Portanier a távoli gép IP címén érhető el.


A KVM dirver-el készült docker-machine-ekre boot2docker operációs rendszer kerül feltelepítésre, ha ezt nem változtatjuk meg. A boot2docker-ben alapértelmezetten be van kapcsolva a TLS remote docker API (port: 2376), és a titkosítatlan távoli hozzáférés ki van kapcsolva (port: 2375)


TLS kulcsok begyűjtése

Mikor a docker-machine létrehozta a manager node-okat, legyártotta azokat az ssh kulcsokat, aminek a segítségével a docker-machine be tud ssh-zni a VM-re jelszó és felhasználó név megadása nélkül (docker-machine ssh mg0). Ezeket a kulcsokat fogjuk mi is felhasználni, hogy a lokálisan futó Portainer hozzá tudjon kapcsolódni a (távoli) virtuális gépen futó docker démonhoz.


Adjuk ki docker-machine env parancsot, hogy megtudjuk, hol tárolja a lokális docker-machine környezetünk a távoli VM SSH kulcsait:

# docker-machine env mg0
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.42.41:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/mg0"
export DOCKER_MACHINE_NAME="mg0"
# Run this command to configure your shell: 
# eval $(docker-machine env mg0)

Látható, hogy a kulcsok a /root/.docker/machine/machines/mg0 mappában vannak


Nekünk három fájlra van innen szükségünk. A CA-ra, a certifikációnkra és a titkos kulcsunkra. A docker-machine a publikus kulcsot még telepítés közben felmásolta a VM-re.

# ll /root/.docker/machine/machines/mg0
total 316444
..
-rw-r--r-- 1 root root       1029 Jul 15 22:41 ca.pem
-rw-r--r-- 1 root root       1070 Jul 15 22:41 cert.pem
...
-rw------- 1 root root       1675 Jul 15 22:41 key.pem
...

Másoljuk a kulcsokat egy olyan mappába, ahol a böngészőt futtató user is feléri. (Ugyanis nagy valószínűséggel a root mappában jöttek ezek létre)


Portainer telepítése

A Portainer-hez egyetlen egy image-et kell telepíteni: portainer/portainer

# docker container run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
  • A webes konzol a localhost:9000 -as porton lehsz elérhető:
  • Ha a lokális docker démon-t is monitorozni akarjuk, akkor a docker démon socket-re rá kell kötni a portainer-t.


Ha elindult a konténer, akkor válasszuk Remote lehetőséget

ClipCapIt-180716-005426.PNG
  • Adjuk meg a manager-t futtató VM IP címét a 2376 portal (alapértelmezett TLS port)
  • Kapcsoljuk be a TLS-t.
  • TLS CA certificate: ca.pem
  • TLS certificate: cert.pem
  • TLS key: key.pem

Majd mondjuk hogy connect. Ekkor bejön a desboard. Innentől kezdve a távoli manager docker démonjához kapcsolódunk. Nyomjunk rá a Go to cluster visualizer linkre.

ClipCapIt-180716-010553.PNG