Настройка и Установка 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-АДРЕС-ГЛАВНОГО-СЕРВЕРА
Настройка DNS
Выполните
rm /etc/resolv.conf
nano /etc/resolv.conf
Укажите следующие настройки
nameserver 127.0.0.53
options edns0 trust-ad
ndots:1
search .
Автоматическое удаление остановленных контейнеров
При создании новых сервисов, docker не удаляет старые контейнеры. Чтобы они удалялись, в крон пропишите строчку:
0 */2 * * * docker system prune --filter "until=24h" -f > /dev/null
0 */2 * * * docker image prune --filter "until=168h" -f > /dev/null
Логи сервера
Для хранения логов рекомендуется journald. В файле /etc/docker/daemon.json пропишите:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "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