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