3.docker swarm установка - панели swarmpit и балансировщика traefik.

Име­ет­ся несколь­ко хостов:
192.168.1.180 swarm_master1_180
192.168.1.181 swarm_master2_181
192.168.1.182 swarm_master3_182
192.168.1.183 swarm_node1_183
192.168.1.184 swarm_node2_184
192.168.1.185 swarm_node3_185

Thank you for reading this post, don't forget to subscribe!

Рас­смот­рим лай­то­вый про­цесс уста­нов­ки пане­ли управ­ле­ния swarmpit в одну команду:

docker run -it --rm \ --name swarmpit-installer \ --volume /var/run/docker.sock:/var/run/docker.sock \ swarmpit/install:1.7 при уста­нов­ке запол­ня­ем сле­ду­ю­щие пара­мет­ры: Application setup Enter stack name [swarmpit]: swarmpit Enter application port [888]: 888 Enter database volume driver [local]: local Enter admin username [admin]: admin Enter admin password (min 8 characters long): admin123456789 Гото­во.

вся уста­нов­ка выгля­дит вот так:

 

 

про­ве­ря­ем:

[root@master1 ~]# docker service ls

ID NAME MODE REPLICAS IMAGE PORTS

z8tvudiqpxx1 swarmpit_agent global 6/6 swarmpit/agent:2.1

rx6jn9j136y4 swarmpit_app replicated 1/1 swarmpit/swarmpit:1.7 *:888->8080/tcp

2yx7abb9on50 swarmpit_db replicated 1/1 couchdb:2.3.0

=========================================================================

Рассмотрим ручную (геморойную)  трушную установку, для этого удалим текущую панель.

Посмот­рим как она называется:

Необ­хо­ди­мо про­ве­рить, что ваши запи­си DNS ука­зы­ва­ют на traefik.<your domain>и consul.<your domain>на один из IP-адре­сов кластера.
Создай­те пере­мен­ную сре­ды с име­нем поль­зо­ва­те­ля (вы буде­те исполь­зо­вать ее для базо­вой аутен­ти­фи­ка­ции HTTP для интер­фей­сов Traefik и Consul),
напри­мер: export USERNAME = admin Создай­те пере­мен­ную сре­ды с паро­лем, например:

export USERNAME=admin

export PASSWORD=admin123456789

export HASHED_PASSWORD=$(openssl passwd -apr1 $PASSWORD) про­ве­рим:

echo $HASHED_PASSWORD

уста­нав­ли­ва­ем коли­че­ство реплик для кон­су­ла, (если не зада­вать её, то по умол­ча­нию ста­вит­ся 3) export CONSUL_REPLICAS=3 (если один сер­вер то ста­вим export CONSUL_REPLICAS=0)

export TRAEFIK_REPLICAS=3 (если не зада­вать её, то по умол­ча­нию ста­вит­ся 3) Если не хочет­ся заки­ды­вать в пере­мен­ные логин и пароль мож­но вос­поль­зо­вать­ся сле­ду­ю­щей коман­дой: пред­ва­ри­тель­но ставим :

yum install httpd-tools

echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g

 

 

если необ­хо­ди­ма репли­ка на каж­дой ноде то используем:

export TRAEFIK_REPLICAS=$(docker node ls -q | wc -l) если необ­хо­ди­ма толь­ко 1 репли­ка то используем:

export TRAEFIK_REPLICAS=1

добав­ля­ем в пере­мен­ную окру­же­ния так­же мыль­ник на кото­рый будут отправляться 

сооб­ще­ния:

export EMAIL=admin@test.ru

Созда­ём docker compose file, выкачиваем:

curl -L dockerswarm.rocks/traefik.yml -o traefik.yml

содер­жи­мое traefik.yml (мы уда­ли­ли acme)

Рас­смот­рим под­клю­ча­е­мые пара­мет­ры :

 

Сами сер­ви­сы под­клю­чим к сети traefik-net, избав­ля­ем­ся от про­бро­шен­ных портов.

В рабо­те с сетя­ми у тра­е­фи­ка есть неболь­шая про­бле­ма. Дело в том, что docker compose при стар­те созда­ет сети и к их име­нам добав­ля­ет пре­фикс с назва­ни­ем про­ек­та. Т.е. в compose фай­ле мы ука­зы­ва­ем, что необ­хо­ди­мо создать сеть traefik-net. В мет­ке сер­ви­са server мы ука­зы­ва­ем traefik, что для прок­си из двух сетей необ­хо­ди­мо исполь­зо­вать traefik.docker.network=traefik-net. Но после стар­та эта сеть не будет най­де­на, ибо докер назвал ее mean-docker-stack_traefik-net.

Есть два выхода:

  1. Преду­га­ды­вать пере­име­но­ва­ние сети и ука­зы­вать traefik.docker.network=mean-docker-stack_traefik-net;
  2. Пред­ва­ри­тель­но перед запус­ком создать external сеть traefik-net и исполь­зо­вать ее, ука­зав, что она явля­ет­ся external в docker-compose файле.

В дан­ном слу­чае я вос­поль­зо­вал­ся вари­ан­том №2.

[/spoiler]

Заде­п­ло­им его:
[root@swarm_master1_180 ~]# docker stack deploy -c traefik.yml traefik-consul

https://traefik.<your domain>

https://consul.<your domain>

в нашем слу­чае это:
https://traefik.test.ru

https://consul.test.ru

 

при авто­ри­за­ции в https://traefik.test.ru/  появит­ся окно вво­да логи­на и паро­ля кото­рые мы зада­ва­ли admin admin123456789

опи­са­ние функ­ци­о­на­ла traefik на оф сайте:
https://docs.traefik.io/

 

https://consul.test.ru   admin admin123456789

===============================

Панель swarmpit

зада­ём переменные:
адрес панели:

export DOMAIN=swarmpit.test.ru Если необ­хо­ди­мо что­бы база пане­ли была толь­ко на одном узле, то зада­ём сле­ду­ю­щий тег:
Полу­ча­ем иден­ти­фи­ка­тор узла Swarm (мене­дже­ра) и сохра­ня­ем его в переменную:

export NODE_ID=$(docker info -f '{{.Swarm.NodeID}}')

Созда­ём тег на этом узле, что­бы база дан­ных, исполь­зу­е­мая Swarmpit, все­гда раз­ме­ща­лась на одном узле и исполь­зо­ва­ла суще­ству­ю­щий том:

docker node update --label-add swarmpit.db-data=true $NODE_ID

 

Кача­ем docker compose файл:

curl -L dockerswarm.rocks/swarmpit.yml -o swarmpit.yml или созда­ём свой, чтоб база хра­ни­лась на кла­сте­ре ceph

содер­жи­мое:

[codesyntax lang="bash" capitalize="no" blockstate="collapsed"]

[root@swarm_master1_180 ~]# docker network create --driver=overlay traefik-public
[root@swarm_master1_180 ~]# docker network create --driver=overlay net

Деп­ло­им панель как сервис:

 

в панель захо­дим по ука­зан­но­му нами ранее домен­но­му име­ни, а имен­но http://swarmpit.test.ru в каче­стве логи­на admin пароль admin123456789 (или созда­ём его при пер­вом запус­ке) на этом уста­нов­ка пане­ли swarmpit и балан­си­ров­щи­ка traefik закончены.

Если необходимо добавить новую сеть,

по кото­рой дол­жен рабо­тать сер­вис и быть досту­пен извне, то необ­хо­ди­мо попра­вить кон­фиг traefik и заде­п­ло­ить его повторно.
Добав­ля­ем сле­ду­ю­щие параметры:

После чего деп­ло­им сервис:
docker stack deploy -c traefik.yml traefik-consul

======================================

Если база не будет стар­то­вать и в логе /var/log/messages будет сле­ду­ю­щая ошибка:
rbd: map failed

[spoiler]
dockerd: time="2019-08-22T19:43:07+06:00" level=error msg="time=\"2019-08-22T13:43:07Z\" level=error msg=\"Error running command\" args=[rbd map --pool rbd swarmpit_swarmpit_db] error=\"exit status 2\" host=\"unix:///var/run/rexray/056432921.sock\" instanceID=\"rbd=192.168.1.185\" route=volumeAttach server=spark-doom-nr service=rbd stderr=\"modinfo: ERROR: Module alias rbd not found.\\nrbd: failed to load rbd kernel module (1)\\nrbd: sysfs write failed\\nrbd: map failed: (2) No such file or directory\\n\" storageDriver=rbd task=0 time=1566481387054 tls=false txCR=1566481381 txID=d380507a-c7f7-4c62-592a-a18906ab1009 " plugin=5c4a6ef4763dbf947e23da493e4253f0d21de4cc0dd515d46948fac13e252287
[/spoiler]
необ­хо­ди­мо выпол­нить сле­ду­ю­щую коман­ду на всех нодах:
rbd map swarmpit_db-data