2016-08-08 2 views
2

У меня есть 3 виртуальных машины. У всех их есть докер 1.12, и они работают на centos7. Все порты открыты и виртуальной машины могут пинговать друг друга я начал кластер сУзел не может присоединиться к Swarm Cluster

docker swarm init --advertise-addr 192.168.140.12 

Информация Docker показал мне:

Swarm: active 
NodeID: 0drcj2nku1mv8t16fxva48edxx 
Is Manager: true 
ClusterID: cchn0yzospwoe1h9f55d7omxx 
Managers: 1 
Nodes: 1 

Теперь я пытаюсь соединить узлы (другие ЗИС) в кластер. Я использую команду, рекомендованную после запуска моего менеджера.

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-access друг для друга? Благодаря

журналы на узле:

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 
+0

ssh доступа не требуется. Существуют ли какие-либо межсетевые экраны между этими виртуальными машинами, которые могут блокировать трафик 2377 порта? – BMitch

+0

Я выполнил 'systemctl disable firewalld', поэтому брандмауэр не является проблемой, я полагаю. – DenCowboy

+0

Когда я выполняю информацию о докере, я вижу это изменение sometims: Network: null bridge host overlay для того, чтобы наложить наложение хоста null и обратно. Это нормально или что-то делать с моей проблемой? – DenCowboy

ответ

1

В на всех хостов моей виртуальной машины были: localhost.localdomain. Я изменил имена хостов в /etc/hosts на каждом сервере и перезагрузился. Теперь я могу создать кластер swarm и успешно добавить узлы.

+1

Можете ли вы дать мне пример того, как изменять имена хостов в/etc/hosts. – Kain

0

У меня была такая же проблема и решалась путем синхронизации даты каждого рабочего узла, такой же, как дата узла-хозяина.

[email protected]$sudo date --set="$([email protected] date)" 

после этого попробуйте обновить рабочий узел, и он должен работать.

+0

У меня одинаковое время на всех узлах, но проблема также существует , – QtRoS

0

Если ни один из нижеперечисленных решений не работал. Попробуйте отключить брандмауэр на главном компьютере и посмотреть, работает ли он.

-1

У меня была такая же проблема, для этого вам обычно нужно использовать общий драйвер докерной машины, но я узнал, что этот драйвер не работает так, как должен ... На самом деле докер-машина может работать только с виртуальным блоком драйвер на физическом компьютере, а не виртуальные и облачные драйверы.

Так что если вы не можете этого сделать и действительно не знаете, как это сделать, но насколько я искал и не смог найти решение для использования Swarm с удаленными хостами.

После того, как я отказался от роя, хотя Кубернетес мог работать, но проблема Кубернеса заключается в том, что он должен использоваться для облачных вычислений или установлен на VSphere и я на практике, поэтому я не могу работать с VSphere с ESX с более чем 300 VM ...

2

Возможно, вы использовали http-прокси.

Вы можете использовать следующую команду, чтобы посмотреть, что делает dockerd.

# strace -Fp `pidof dockerd` 2>&1 |grep -v futex |grep -v epoll_wait |grep -v pselect 
+0

OMG спасибо !! Я понятия не имел, что узлы Docker Swarm используют http для связи друг с другом (порт 2377 по умолчанию)! Я настроил прокси-сервер http, как описано в ссылке ниже, поэтому «соединение докеров» также использовало этот прокси, несмотря на то, что мой рабочий был в той же локальной сети, что и мой менеджер. https://stackoverflow.com/questions/23111631/cannot-download-docker-images-behind-a-proxy#answer-28093517 –

0

Как пояснил wenjianhn, убедитесь, что вы не настроить HTTP-прокси для докер (как описано here) на вашем рабочем узле. Действительно, узлы Swarm обмениваются данными через http (порт 2377 по умолчанию), поэтому, если вы настроили прокси-сервер http, он будет использовать его, даже если узел менеджера находится в вашей локальной сети.

Кроме того, убедитесь, что брандмауэр не блокирует трафик на порту 2377:

[email protected]$ telnet ip-of-manager 2377 

Если вы не можете открыть соединение телнет на порт 2377, то это означает, что этот порт заблокирован брандмауэром (либо брандмауэр рабочего узла, либо один из менеджеров).

Смежные вопросы