Настройка и Установка Docker Swarm

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

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

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

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

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

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

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

curl -sSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker
apt-get install docker-compose

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

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

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

# Разрешаем входящие соединения Docker swarm
-A ALLOW-INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 2377 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
-A ALLOW-INPUT -p udp -m udp --dport 7946 -j ACCEPT
-A ALLOW-INPUT -p udp -m udp --dport 4789 -j ACCEPT

# Разрешаем DNS для кластера Docker
-A ALLOW-INPUT -i docker0 -p udp -m udp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker0 -p tcp -m tcp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker_gwbridge -p udp -m udp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker_gwbridge -p tcp -m tcp --dport 53 -j ACCEPT

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

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

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

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

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

Установите dnsmasq

На каждый хост установите dnsmasq.

Особое внимание уделите ip адресам DNS. Их нужно прописать в daemon.json и yaml файлах. Обычно это 172.17.0.1 и 172.18.0.1. Но может быть и 172.20.0.1

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

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

0 */2 * * * docker system prune --filter "until=24h" -f > /dev/null

Логи сервера

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

{
  "log-driver": "journald",
  "log-opts": {
    "labels":"com.docker.swarm.service.name"
  },
  "dns": ["172.17.0.1"]
}

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

SystemMaxUse=10G

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

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

service docker reload
systemctl daemon-reload

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

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

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

usermod -a -G docker ubuntu

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

Инструкции:

Ошибки ноды

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

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.

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

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

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

service stop docker
service start docker

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

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

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

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

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

docker swarm update --cert-expiry 8760h

Материалы

  1. Более подробно о других полезных командах Docker
  2. Установка Docker на Ubuntu 18.04
  3. Установка Docker на Centos 7
  4. Описание файла compose.yaml
  5. Список шаблонов сервиса
  6. Установите Ubuntu 18.04 на VirtualBox
  7. Описание работы сети в Docker