Имеется несколько хостов:
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
Рассмотрим лайтовый процесс установки панели управления 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 Готово.
вся установка выглядит вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
[root@swarm_node1_183 ~]# docker run -it --rm \ > --name swarmpit-installer \ > --volume /var/run/docker.sock:/var/run/docker.sock \ > swarmpit/install:1.7 Unable to find image 'swarmpit/install:1.7' locally 1.7: Pulling from swarmpit/install e7c96db7181b: Pull complete 5297bd381816: Pull complete 3a664477889c: Pull complete a9b893dcc701: Pull complete 48bf7c1cb0dd: Pull complete 555b6ea27ad2: Pull complete 7e8a5ec7012a: Pull complete 6adc20046ac5: Pull complete 42a1f54aa48c: Pull complete 717a4f34e541: Pull complete f95ad45cac17: Pull complete f963bb249c55: Pull complete Digest: sha256:04e47b8533e5b4f9198d4cbdfea009acac56417227ce17a9f1df549ab66a8520 Status: Downloaded newer image for swarmpit/install:1.7 _ _ _____ ____ _ _ __ _ __ ___ _ __ (_) |_ / __\ \ /\ / / _` | '__| '_ ` _ \| '_ \| | __| \__ \\ V V / (_| | | | | | | | | |_) | | |_ |___/ \_/\_/ \__,_|_| |_| |_| |_| .__/|_|\__| |_| Welcome to Swarmpit Version: 1.7 Branch: 1.7 Preparing dependencies latest: Pulling from byrnedo/alpine-curl 8e3ba11ec2a2: Pull complete 6522ab4c8603: Pull complete Digest: sha256:e8cf497b3005c2f66c8411f814f3818ecd683dfea45267ebfb4918088a26a18c Status: Downloaded newer image for byrnedo/alpine-curl:latest DONE. Preparing installation Cloning into 'swarmpit'... remote: Enumerating objects: 6, done. remote: Counting objects: 100% (6/6), done. remote: Compressing objects: 100% (6/6), done. remote: Total 17028 (delta 1), reused 1 (delta 0), pack-reused 17022 Receiving objects: 100% (17028/17028), 4.39 MiB | 2.25 MiB/s, done. Resolving deltas: 100% (10146/10146), done. DONE. 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 DONE. Application deployment Creating network swarmpit_net Creating service swarmpit_db Creating service swarmpit_agent Creating service swarmpit_app DONE. Starting swarmpit.............DONE. Initializing swarmpit...DONE. Summary Username: admin Password: admin123456789 Swarmpit is running on port :888 Enjoy :) |
проверяем:
[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
=========================================================================
Рассмотрим ручную (геморойную) трушную установку, для этого удалим текущую панель.
Посмотрим как она называется:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@swarm_node1_183 ~]# <strong>docker stack ls</strong> NAME SERVICES ORCHESTRATOR swarmpit 3 Swarm удаляем: [root@swarm_node1_183 ~]# <strong>docker stack rm swarmpit</strong> Removing service swarmpit_agent Removing service swarmpit_app Removing service swarmpit_db Removing network swarmpit_net <em><span style="font-size: 18pt;"><strong> Установим Traefik</strong></span> </em> (это балансировщик нагрузки/прокси/виртуальные хосты) Docker Swarm с основным балансировщиком нагрузки/прокси-сервером Traefik - это <strong>базовая кластерная архитектура </strong>Добавляем сеть, которая будет использоваться совместно с Traefik, и контейнеры, которые должны быть доступны извне: <strong>docker network create --driver<span class="o">=</span>overlay traefik-public</strong> добавляем домен в переменные окружения: <strong><span class="nb">export</span> <span class="nv">DOMAIN</span></strong><span class="o"><strong>=test.ru </strong> по данному домену будут доступны <code>traefik и consul</code> <code>traefik.<your domain></code> and <code>consul.<your domain></code> </span> |
Необходимо проверить, что ваши записи 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
version: '3.3' services: consul-leader: image: consul command: agent -server -client=0.0.0.0 -bootstrap -ui volumes: - consul-data-leader:/consul/data environment: - CONSUL_BIND_INTERFACE=eth0 - 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' networks: - default - traefik-public deploy: labels: - traefik.frontend.rule=Host:consul.${DOMAIN?Variable DOMAIN not set} - traefik.enable=true - traefik.port=8500 - traefik.tags=${TRAEFIK_PUBLIC_TAG:-traefik-public} - traefik.docker.network=traefik-public # Traefik service that listens to HTTP - traefik.redirectorservice.frontend.entryPoints=http - traefik.redirectorservice.frontend.redirect.entryPoint=https # Traefik service that listens to HTTPS - traefik.webservice.frontend.entryPoints=https - traefik.frontend.auth.basic.users=${USERNAME?Variable USERNAME not set}:${HASHED_PASSWORD?Variable HASHED_PASSWORD not set} consul-replica: image: consul command: agent -server -client=0.0.0.0 -retry-join="consul-leader" volumes: - consul-data-replica:/consul/data environment: - CONSUL_BIND_INTERFACE=eth0 - 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' networks: - default - traefik-public deploy: replicas: ${CONSUL_REPLICAS:-3} placement: preferences: - spread: node.id traefik: image: traefik:v1.7 ports: - 80:80 - 443:443 deploy: replicas: ${TRAEFIK_REPLICAS:-3} placement: constraints: - node.role == manager preferences: - spread: node.id labels: - traefik.frontend.rule=Host:traefik.${DOMAIN?Variable DOMAIN not set} - traefik.enable=true - traefik.port=8080 - traefik.tags=traefik-public - traefik.docker.network=traefik-public # Traefik service that listens to HTTP - traefik.redirectorservice.frontend.entryPoints=http - traefik.redirectorservice.frontend.redirect.entryPoint=https # Traefik service that listens to HTTPS - traefik.webservice.frontend.entryPoints=https - traefik.frontend.auth.basic.users=${USERNAME?Variable USERNAME not set}:${HASHED_PASSWORD?Variable HASHED_PASSWORD not set} volumes: - /var/run/docker.sock:/var/run/docker.sock command: > --docker --docker.swarmmode --docker.watch --docker.exposedbydefault=false --constraints=tag==traefik-public --entrypoints='Name:http Address::80' --entrypoints='Name:https Address::443 TLS' --consul --consul.endpoint="consul-leader:8500" --logLevel=INFO --accessLog --api networks: - default - traefik-public depends_on: - consul-leader volumes: consul-data-leader: consul-data-replica: networks: traefik-public: external: true |
Рассмотрим подключаемые параметры :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# В командах производим основную настройку command: # Включаем Traefik Dashboard (порт 8080) - "--api" # Точка входа http на порту 80 используется по умолчанию - "--entrypoints=Name:http Address::80" - "--defaultentrypoints=http" # Включаем режим совместимости с Docker - "--docker" # Домен по умолчанию - "--docker.domain=" # Следить за изменениями докера - "--docker.watch" |
1 2 3 4 5 6 7 8 |
# Даем Traefik доступ к docker.sock # для отслеживания событий Docker volumes: - /var/run/docker.sock:/var/run/docker.sock # Подключаемся к сети для прокси networks: traefik-net: |
1 2 3 4 5 6 |
# В метках сервисов прописываем правила для Traefik labels: # Запросы на хост `traefik.docker-example.local` - traefik.frontend.rule=Host:traefik.docker-example.local # перенаправлять на порт 8080 (Traefik Dashboard) этого сервиса - traefik.port=8080 |
Сами сервисы подключим к сети traefik-net
, избавляемся от проброшенных портов.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
client: image: myusername/public:mean-docker-client restart: on-failure depends_on: - server networks: # Подключаемся к сети - traefik-net labels: # Запросы на хост `docker-example.local` - traefik.frontend.rule=Host:docker-example.local # перенаправлять на порт 4000 этого сервиса - traefik.port=4000 |
1 |
</code><strong>сеть</strong> |
1 2 3 4 5 |
networks: traefik-net: external: true db-net: |
В работе с сетями у траефика есть небольшая проблема. Дело в том, что docker compose при старте создает сети и к их именам добавляет префикс с названием проекта. Т.е. в compose файле мы указываем, что необходимо создать сеть traefik-net
. В метке сервиса server мы указываем traefik, что для прокси из двух сетей необходимо использовать traefik.docker.network=traefik-net
. Но после старта эта сеть не будет найдена, ибо докер назвал ее mean-docker-stack_traefik-net
.
Есть два выхода:
- Предугадывать переименование сети и указывать
traefik.docker.network=mean-docker-stack_traefik-net
; - Предварительно перед запуском создать external сеть
traefik-net
и использовать ее, указав, что она являетсяexternal
в docker-compose файле.
В данном случае я воспользовался вариантом №2.
[/spoiler]
Задеплоим его:
[root@swarm_master1_180 ~]# docker stack deploy -c traefik.yml traefik-consul
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Creating network traefik-consul_default Creating service traefik-consul_consul-replica Creating service traefik-consul_traefik Creating service traefik-consul_consul-leader проверяем<strong>: </strong>[root@swarm_master1_180 ~]# <strong>docker stack ls</strong> NAME SERVICES ORCHESTRATOR traefik-consul 3 Swarm [root@swarm_master1_180 ~]# <strong>docker stack ps traefik-consul</strong> ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS j8t3c84mu2qo traefik-consul_consul-leader.1 consul:latest swarm_node3_185 Running Preparing 42 seconds ago t9j3isgtjkjs traefik-consul_traefik.1 traefik:v1.7 swarm_master3_182 Running Starting 4 seconds ago 8zyrep8gbf1e traefik-consul_consul-replica.1 consul:latest swarm_node2_184 Running Starting 3 seconds ago jvz6r2zo69rm traefik-consul_traefik.2 traefik:v1.7 swarm_master1_180 Running Preparing 45 seconds ago 9c00114qemdm traefik-consul_consul-replica.2 consul:latest swarm_node1_183 Running Starting 5 seconds ago og7iylyle9mn traefik-consul_traefik.3 traefik:v1.7 swarm_master2_181 Running Preparing 45 seconds ago uodxiiqvnnp0 traefik-consul_consul-replica.3 consul:latest swarm_master2_181 Running Preparing 48 seconds ago [root@swarm_master1_180 ~]# <strong>docker service ls</strong> ID NAME MODE REPLICAS IMAGE PORTS 1imcb0bb5qvw traefik-consul_consul-leader replicated 1/1 consul:latest rhmfl4kyot7q traefik-consul_consul-replica replicated 3/3 consul:latest knnmmgfkyhqr traefik-consul_traefik replicated 3/3 traefik:v1.7 *:80->80/tcp, *:443->443/tcp Проверяем логи: <strong>docker service logs -f traefik-consul_traefik проверяем веб интерфейс:</strong> |
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"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
[root@swarm_master1_180 ~]# <strong>cat swarmpit.yml</strong> version: '3.3' services: app: image: swarmpit/swarmpit:latest environment: - SWARMPIT_DB=http://db:5984 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro ports: - 888:8080 networks: - net - traefik-public deploy: resources: limits: cpus: '0.50' memory: 1024M reservations: cpus: '0.25' memory: 512M placement: constraints: - node.role == manager labels: - traefik.frontend.rule=Host:${DOMAIN?Variable DOMAIN not set} - traefik.enable=true - traefik.port=8080 - traefik.tags=traefik-public - traefik.docker.network=traefik-public # Traefik service that listens to HTTP - traefik.redirectorservice.frontend.entryPoints=http - traefik.redirectorservice.frontend.redirect.entryPoint=https # Traefik service that listens to HTTPS - traefik.webservice.frontend.entryPoints=https db: image: couchdb:2.3.0 volumes: - db-data:/opt/couchdb/data networks: - net deploy: resources: limits: cpus: '0.30' memory: 512M reservations: cpus: '0.15' memory: 256M placement: constraints: - node.role == manager # - node.labels.swarmpit.db-data == true # - node.hostname == swarm_master1_180 agent: image: swarmpit/agent:latest environment: - DOCKER_API_VERSION=1.35 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - net deploy: mode: global resources: limits: cpus: '0.10' memory: 64M reservations: cpus: '0.05' memory: 32M networks: net: driver: overlay attachable: true traefik-public: external: true volumes: db-data: driver: "rexray/rbd:latest" driver_opts: size: 6 |
1 2 |
<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;">[/codesyntax] создаём необходимые сети:</span> |
[root@swarm_master1_180 ~]# docker network create --driver=overlay traefik-public
[root@swarm_master1_180 ~]# docker network create --driver=overlay net
Деплоим панель как сервис:
1 2 3 4 5 6 7 8 9 |
<strong>docker stack deploy -c swarmpit.yml swarmpit </strong>[root@swarm_master1_180 ~]# docker stack deploy -c swarmpit.yml swarmpit Creating network swarmpit_net Creating service swarmpit_app Creating service swarmpit_db Creating service swarmpit_agent проверяем задеплоенные сервисы: |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
[root@swarm_master1_180 ~]# <strong>docker stack ls</strong> NAME SERVICES ORCHESTRATOR swarmpit 3 Swarm traefik-consul 3 Swarm [root@swarm_master1_180 ~]# <strong>docker stack ps swarmpit</strong> ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS suye1vqqqzsz swarmpit_agent.0ihuax8tievdrp3m8xjz5v1ys swarmpit/agent:latest swarm_master1_180 Running Running 15 minutes ago 275fnbm6o2g2 swarmpit_agent.z9jxfogx18aadldbotsbqhofa swarmpit/agent:latest swarm_node1_183 Running Running 15 minutes ago zq10sal6qabt swarmpit_agent.y13tvpnm3oi520ab4tc891y7q swarmpit/agent:latest swarm_node2_184 Running Running 15 minutes ago s3el1k2a36li swarmpit_agent.wmsi0eehhm0j8pfm39mbeifni swarmpit/agent:latest swarm_master2_181 Running Running 15 minutes ago 6bi835fxfta7 swarmpit_agent.trcwny82y87kf60ts1h6rogpa swarmpit/agent:latest swarm_master3_182 Running Running 15 minutes ago ffd3q5fun3e1 swarmpit_agent.2u47nhxy05amaut0ljehr5hwe swarmpit/agent:latest swarm_node3_185 Running Running 15 minutes ago vz55al1snss6 swarmpit_app.1 swarmpit/swarmpit:latest swarm_master1_180 Running Running 4 minutes ago zf78hu2t8ok0 swarmpit_db.1 couchdb:2.3.0 swarm_node2_184 Running Running 5 minutes ago [root@swarm_master1_180 ~]# <strong>docker service ls</strong> ID NAME MODE REPLICAS IMAGE PORTS zam1ogiely5b swarmpit_agent global 6/6 swarmpit/agent:latest 9im51exr7svi swarmpit_app replicated 1/1 swarmpit/swarmpit:latest *:30006->8080/tcp s07czvmr9bsg swarmpit_db replicated 1/1 couchdb:2.3.0 1imcb0bb5qvw traefik-consul_consul-leader replicated 1/1 consul:latest rhmfl4kyot7q traefik-consul_consul-replica replicated 3/3 consul:latest knnmmgfkyhqr traefik-consul_traefik replicated 3/3 traefik:v1.7 *:80->80/tcp, *:443->443/tcp [root@swarm_master1_180 ~]# <strong>docker service ps swarmpit_app</strong> ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS vz55al1snss6 swarmpit_app.1 swarmpit/swarmpit:latest swarm_master1_180 Running Running 6 minutes ago [root@swarm_master1_180 ~]# <strong>docker service ps swarmpit_db</strong> ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS zf78hu2t8ok0 swarmpit_db.1 couchdb:2.3.0 swarm_node2_184 Running Running 7 minutes ago [root@swarm_master1_180 ~]# <strong>docker service ps swarmpit_agent</strong> ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS suye1vqqqzsz swarmpit_agent.0ihuax8tievdrp3m8xjz5v1ys swarmpit/agent:latest swarm_master1_180 Running Running 17 minutes ago 275fnbm6o2g2 swarmpit_agent.z9jxfogx18aadldbotsbqhofa swarmpit/agent:latest swarm_node1_183 Running Running 17 minutes ago zq10sal6qabt swarmpit_agent.y13tvpnm3oi520ab4tc891y7q swarmpit/agent:latest swarm_node2_184 Running Running 17 minutes ago s3el1k2a36li swarmpit_agent.wmsi0eehhm0j8pfm39mbeifni swarmpit/agent:latest swarm_master2_181 Running Running 17 minutes ago 6bi835fxfta7 swarmpit_agent.trcwny82y87kf60ts1h6rogpa swarmpit/agent:latest swarm_master3_182 Running Running 17 minutes ago ffd3q5fun3e1 swarmpit_agent.2u47nhxy05amaut0ljehr5hwe swarmpit/agent:latest swarm_node3_185 Running Running 17 minutes ago Проверяем, что на нашем ceph кластере с помощью плагина <strong>rexray</strong> было создано блочное устройство(volume): [root@swarm_master1_180 ~]# <strong>docker volume ls</strong> DRIVER VOLUME NAME local cd51bd506b417d097978ab4878fed748c51fa66f6f63f153109b061bbc677015 <strong>rexray/rbd:latest swarmpit_db-data</strong> local traefik-consul_consul-data-replica |
1 2 3 4 5 6 7 8 9 10 11 |
проверяем, что место на ceph хранилище изменилось: [root@swarm_master1_180 ~]# <strong>ceph osd status</strong> +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ | id | host | used | avail | wr ops | wr data | rd ops | rd data | state | +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ | 0 | swarm_node1_183 | 1192M | 3927M | 0 | 0 | 0 | 0 | exists,up | | 1 | swarm_node2_184 | 1192M | 3927M | 0 | 0 | 0 | 0 | exists,up | | 2 | swarm_node3_185 | 1192M | 3927M | 0 | 0 | 0 | 0 | exists,up | +----+-----------------+-------+-------+--------+---------+--------+---------+-----------+ |
1 2 |
<strong> ================================================= </strong> |
в панель заходим по указанному нами ранее доменному имени, а именно http://swarmpit.test.ru в качестве логина admin пароль admin123456789 (или создаём его при первом запуске) на этом установка панели swarmpit и балансировщика traefik закончены.
Если необходимо добавить новую сеть,
по которой должен работать сервис и быть доступен извне, то необходимо поправить конфиг traefik и задеплоить его повторно.
Добавляем следующие параметры:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
service: traefik: networks: - default - traefik-public <strong>- nginx # Вот его добавляем </strong>networks: traefik-public: external: true <strong>nginx: # и вот эти 2 строки</strong> <strong> external: true </strong> |
После чего деплоим сервис:
docker stack deploy -c traefik.yml traefik-consul
======================================
Если база не будет стартовать и в логе /var/log/messages будет следующая ошибка:
rbd: map failed
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
rbd map swarmpit_db-data