Узел не может присоединиться к Swarm Cluster
У меня есть 3 ВМ. У них всех есть докер 1.12, и они работают на centos7. Все порты открыты, и виртуальные машины могут пинговать друг друга. Я начал свой кластер с
docker swarm init --advertise-addr 192.168.140.12
Информация Docker показала мне:
Swarm: active
NodeID: 0drcj2nku1mv8t16fxva48edxx
Is Manager: true
ClusterID: cchn0yzospwoe1h9f55d7omxx
Managers: 1
Nodes: 1
Теперь я пытаюсь присоединить узлы (другие vms) к кластеру. Я использую команду, которая была рекомендована после запуска моего менеджера.
docker swarm join \
--token SWMTKN-1-48ythur5k6ckkz90ttlprw37p9z3ldclws51qirw5wdyfmvevr-3sb2t66b2fj6e4dhmfo1vavxx \
192.168.140.12:2377
Но я получил:
Error response from daemon: Timeout was reached before node was joined. Attempt to join the cluster will continue in the background. Use "docker info" command to see the current swarm status of your node.
Информация Docker показала мне:
Swarm: pending
NodeID:
Error: rpc error: code = 1 desc = context canceled
Is Manager: false
Node Address: 192.168.140.14
По менеджеру кластера:
# netstat -tulpn | grep docker
tcp6 0 0 :::2377 :::* LISTEN 1602/dockerd
tcp6 0 0 :::7946 :::* LISTEN 1602/dockerd
tcp6 0 0 :::8080 :::* LISTEN 3398/docker-proxy
tcp6 0 0 :::32768 :::* LISTEN 3199/docker-proxy
tcp6 0 0 :::32769 :::* LISTEN 3219/docker-proxy
tcp6 0 0 :::32770 :::* LISTEN 3341/docker-proxy
tcp6 0 0 :::32771 :::* LISTEN 3436/docker-proxy
tcp6 0 0 :::2375 :::* LISTEN 1602/dockerd
udp6 0 0 :::7946 :::* 1602/dockerd
Как я могу отладить эту проблему или я забыл выполнить какой-то важный шаг? Нужны ли серверам ssh-доступ друг к другу? Спасибо
логи на узле:
Aug 8 09:50:24 localhost dockerd: time="2016-08-08T09:50:24.393432145-04:00" level=error msg="Handler for POST /v1.24/swarm/leave returned error: This node is not part of swarm"
Aug 8 09:51:01 localhost su: (to root) worker1 on pts/1
Aug 8 09:51:34 localhost dockerd: time="2016-08-08T09:51:34.384408514-04:00" level=error msg="Handler for POST /v1.24/swarm/join returned error: Timeout was reached before node was joined. Attempt to join the cluster will continue in the background. Use \"docker info\" command to see the current swarm status of your node."
Aug 8 09:51:40 localhost su: (to root) worker1 on pts/1
Aug 8 09:52:47 localhost dhclient[1277]: DHCPREQUEST on eno16777736 to 192.168.140.254 port 67 (xid=0x11f8fba8)
Aug 8 09:52:47 localhost dhclient[1277]: DHCPACK from 192.168.140.254 (xid=0x11f8fba8)
Aug 8 09:52:47 localhost NetworkManager[953]: <info> address 192.168.140.13
Aug 8 09:52:47 localhost NetworkManager[953]: <info> plen 24 (255.255.255.0)
Aug 8 09:52:47 localhost NetworkManager[953]: <info> gateway 192.168.140.2
Aug 8 09:52:47 localhost NetworkManager[953]: <info> server identifier 192.168.140.254
Aug 8 09:52:47 localhost NetworkManager[953]: <info> lease time 1800
Aug 8 09:52:47 localhost NetworkManager[953]: <info> nameserver '192.168.140.2'
Aug 8 09:52:47 localhost NetworkManager[953]: <info> domain name 'localdomain'
Aug 8 09:52:47 localhost NetworkManager[953]: <info> (eno16777736): DHCPv4 state changed bound -> bound
Aug 8 09:52:47 localhost dbus[878]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Aug 8 09:52:47 localhost dbus-daemon: dbus[878]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Aug 8 09:52:47 localhost systemd: Starting Network Manager Script Dispatcher Service...
Aug 8 09:52:47 localhost dhclient[1277]: bound to 192.168.140.13 -- renewal in 713 seconds.
Aug 8 09:52:47 localhost dbus[878]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Aug 8 09:52:47 localhost dbus-daemon: dbus[878]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Aug 8 09:52:47 localhost nm-dispatcher: Dispatching action 'dhcp4-change' for eno16777736
Aug 8 09:52:47 localhost systemd: Started Network Manager Script Dispatcher Service.
Иногда предупреждения:
level=warning msg="failed to retrieve remote root CA certificate: rpc error: code = 1 desc = context canceled
6 ответов
Возможно, вы использовали http прокси.
Вы можете использовать следующую команду, чтобы увидеть, что делает dockerd.
# strace -Fp `pidof dockerd` 2>&1 |grep -v futex |grep -v epoll_wait |grep -v pselect
Как объяснил wenjianhn, убедитесь, что вы не настроили на своем рабочем узле http-прокси для Docker (как описано здесь). Действительно, узлы Swarm взаимодействуют по HTTP (порт по умолчанию 2377); поэтому, если вы настроили http-прокси, ваш рабочий узел будет использовать настроенный http-прокси, даже если менеджерский узел находится в вашей локальной сети.
Также убедитесь, что ни один брандмауэр не блокирует трафик через порт 2377:
user@workernode$ telnet ip-of-manager 2377
Если вы не можете открыть соединение telnet через порт 2377, это означает, что этот порт заблокирован брандмауэром (либо брандмауэром рабочего узла, либо администратором).
Имена хостов на всех моих виртуальных машинах: localhost.localdomain. Я изменил имена хостов в /etc/hosts
на каждом сервере и перезагрузил. Теперь я могу создать свой роевой кластер и успешно добавить узлы.
Если ни одно из приведенных ниже решений не сработало. Попробуйте отключить брандмауэр на мастере и посмотрите, работает ли он.
У меня была похожая проблема. Я проверил, что не настроен прокси-сервер и нет брандмауэра, но "Docker Swarm Join" не работает. Я заметил, что в "докерной информации" есть менеджеры, которых больше нет. "Докер узел ls" не показывал ничего странного.
В конце концов я решил свою проблему, выполнив "перезапуск докера службы" на узле, указанном как "соединение docker swarm". Очевидно, что некоторая внутренняя бухгалтерия в демоне Docker вышла из синхронизации.
У меня была та же проблема, и я решил синхронизировать дату каждого рабочего узла так же, как дату главного узла.
pi@workernode$sudo date --set="$(username@masternode date)"
после этого попробуйте обновить рабочий узел, и он должен работать.