Docker Swarm — это простой кластер виртуальных машин. Для его создания нужно несколько серверов (нод)

Для локального тестирования можно установить Docker Swarm в LXC .

Для создания своего облака, рекомендуется использовать Облачную операционную систему .

Инструкция по запуску Docker Swarm

Все сервера должны быть Ubuntu версией не ниже 18.04.

Сделайте сначала базовую настройка Ubuntu Server 18.04 .

Установите Docker на всех хостах:

_x000D_curl -sSL https://get.docker.com | sh_x000D_systemctl enable docker_x000D_systemctl start docker_x000D_apt-get install docker-compose

Добавьте правила в IPTables:

_x000D_iptables -A INPUT -p tcp -m tcp --dport 2376 -j ACCEPT_x000D_iptables -A INPUT -p tcp -m tcp --dport 2377 -j ACCEPT_x000D_iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT_x000D_iptables -A INPUT -p udp -m udp --dport 7946 -j ACCEPT_x000D_iptables -A INPUT -p udp -m udp --dport 4789 -j ACCEPT

или пропишите в файл /etc/iptables/rules.v4 перед строчкой -A ALLOW-INPUT -j RETURN

_x000D_# Разрешаем входящие соединения Docker swarm_x000D_-A ALLOW-INPUT -p tcp -m tcp --dport 2376 -j ACCEPT_x000D_-A ALLOW-INPUT -p tcp -m tcp --dport 2377 -j ACCEPT_x000D_-A ALLOW-INPUT -p tcp -m tcp --dport 7946 -j ACCEPT_x000D_-A ALLOW-INPUT -p udp -m udp --dport 7946 -j ACCEPT_x000D_-A ALLOW-INPUT -p udp -m udp --dport 4789 -j ACCEPT_x000D__x000D_# Разрешаем DNS для кластера Docker_x000D_-A ALLOW-INPUT -i docker0 -p udp -m udp --dport 53 -j ACCEPT_x000D_-A ALLOW-INPUT -i docker0 -p tcp -m tcp --dport 53 -j ACCEPT_x000D_-A ALLOW-INPUT -i docker_gwbridge -p udp -m udp --dport 53 -j ACCEPT_x000D_-A ALLOW-INPUT -i docker_gwbridge -p tcp -m tcp --dport 53 -j ACCEPT

Подключитесь к одному (главному) серверу и выполните команду:

_x000D_docker swarm init --advertise-addr ВНЕШНИЙ-IP-АДРЕС

Выдаст ключ подключения к Docker swarm. Если вы забыли Token, то введите команду docker swarm join-token manager на primary node

Подключитесь к остальным серверам и выполните команду:

_x000D_docker swarm join --token TOKEN IP-АДРЕС-ГЛАВНОГО-СЕРВЕРА_x000D_

Настройка DNS

Выполните

_x000D_rm /etc/resolv.conf_x000D_nano /etc/resolv.conf

Укажите следующие настройки

_x000D_nameserver 127.0.0.53_x000D_options edns0 trust-ad_x000D_ndots:1_x000D_search .

Автоматическое удаление остановленных контейнеров

При создании новых сервисов, docker не удаляет старые контейнеры. Чтобы они удалялись, в крон пропишите строчку:

_x000D_0 */2 * * * docker system prune --filter "until=24h" -f > /dev/null_x000D_0 */2 * * * docker image prune --filter "until=168h" -f > /dev/null_x000D_

Логи сервера

Для хранения логов рекомендуется journald. В файле /etc/docker/daemon.json пропишите:

_x000D_{_x000D_ "log-driver": "json-file",_x000D_ "log-opts": {_x000D_ "max-size": "10m",_x000D_ "max-file": "1"_x000D_ }_x000D_}

Также следует ограничить максимальный размер логово journald. Пропишите в /etc/systemd/journald.conf строчку:

_x000D_SystemMaxUse=10G

Это строчка ограничивает максимальный размер логов в 10 гигабайт

Перезагрузите конфигурацию докер и сервис systemd:

_x000D_service docker reload_x000D_systemctl daemon-reload

Инициализация сети внутри облака

_x000D_docker network create --subnet 172.21.0.1/16 --driver=overlay _x000D_		--attachable cloud_network -o "com.docker.network.bridge.name"="cloud_network"

Добавление локального пользователя в Docker

_x000D_usermod -a -G docker ubuntu

Дальнейшие шаги

Инструкции:

Ошибки ноды

Если при вызове команды docker node ls выходит ошибка

_x000D_Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.

то нужно пересоздать кластер.

_x000D_docker swarm init --force-new-cluster --advertise-addr SERVER_IP

иногда может потребоваться перезагрузить докер

_x000D_service stop docker_x000D_service start docker

Ошибка сертификата

Бывает если долго не запускать кластер, то сертификат кластера может быть просрочен, и тогда кластер не запуститься. Нужно будет его заново пересоздать.

Проверка сертификата:

_x000D_openssl x509 -in /var/lib/docker/swarm/certificates/swarm-node.crt -text

Продлить сертификат на 1 год:

_x000D_docker swarm update --cert-expiry 8760h