Machine: Nach dem Ändern der Instanz-IP muss der Schwarmagent auch die Join-Adresse ändern.

Erstellt am 18. März 2015  ·  4Kommentare  ·  Quelle: docker/machine

Nach weiterem Testen von PR #770 fand ich dies:

Ich erkenne ein weiteres geändertes IP-Problem, nachdem ich heute meinen Schwarm ec2-Cluster neu gestartet habe.

Der Meister verwendet die alten IPs von den Schwarmmaschinen

time="2015-03-18T18:23:54Z" level=error msg="Get https://54.69.29.90:2376/v1.15/info: dial tcp 54.69.29.90:2376: i/o timeout" 
time="2015-03-18T18:23:54Z" level=error msg="Get https://54.69.230.35:2376/v1.15/info: dial tcp 54.69.230.35:2376: i/o timeout" 
time="2015-03-18T18:23:54Z" level=error msg="Get https://54.69.255.39:2376/v1.15/info: dial tcp 54.69.255.39:2376: i/o timeout" 
time="2015-03-18T18:23:54Z" level=error msg="Get https://52.10.167.59:2376/v1.15/info: dial tcp 52.10.167.59:2376: i/o timeout" 

Ich analysiere das Problem:

Die Schwarmagenten werden mit der alten IP 52.10.167.59 beitreten

$ docker-machine ls
NAME               ACTIVE   DRIVER       STATE     URL                        SWARM
amazonec2-03                amazonec2    Stopped                              
dev                         virtualbox   Stopped                              
ec2-swarm-01                amazonec2    Running   tcp://54.149.27.239:2376   ec2-swarm-master
ec2-swarm-02                amazonec2    Running   tcp://52.10.108.31:2376    ec2-swarm-master
ec2-swarm-03       *        amazonec2    Running   tcp://54.148.5.178:2376    ec2-swarm-master
ec2-swarm-master            amazonec2    Running   tcp://52.11.98.189:2376    ec2-swarm-master (master)
$ $(docker-machine env ec2-swarm-master)
$ docker ps --no-trunc
CONTAINER ID                                                       IMAGE               COMMAND                                                                                                                                                                                          CREATED             STATUS              PORTS                              NAMES
13d27667155b3b1962b99b8d817c7a9865b47fe5b0d5d9c0af08735b26163efa   swarm:latest        "/swarm join --addr 52.10.167.59:2376 token://5a57a53a13470b1e680c6904ce5b34d1"                                                                                                                  35 hours ago        Up 11 minutes       2375/tcp                           swarm-agent          
810f7ce04b6439c191470a2116197088ee2a3d2e5ed1cc7f4742aacef46317f9   swarm:latest        "/swarm manage --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:3376 token://5a57a53a13470b1e680c6904ce5b34d1"   35 hours ago        Up 11 minutes       2375/tcp, 0.0.0.0:3376->3376/tcp   swarm-agent-master   
$ docker-machine ip ec2-swarm-master
52.11.98.189

Nachdem sich die IP der Schwarmmaschine geändert hat, muss die Implementierung den Schwarmagenten neu konfigurieren, den alten Container entfernen und einen neuen starten.

areswarm driveec2

Hilfreichster Kommentar

Hier ist meine Problemumgehung nach dem Ändern der IP-Adresse des Docker-Schwarmknotens:

% docker-machine env docker-node
% docker-machine regenerate-certs docker-node
(I sometimes need to run multiple times when error occurs.)
% eval $(docker-machine env docker-node)
% export TOKEN=$(docker inspect -f "{{ index .Config.Cmd 3}}" swarm-agent)
% docker rm -f swarm-agent
% docker run -d --name=swarm-agent --restart=always swarm:latest join --advertise "${DOCKER_HOST##tcp://}" "${TOKEN}"

Alle 4 Kommentare

Die einzige schnelle Lösung besteht derzeit darin, den Agenten mit diesem winzigen Skript neu zu erstellen:

create-swam-agent.sh

#!/bin/bash
TOKEN=$(docker inspect -f "{{ index .Config.Cmd 3 }}" swarm-agent)
IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)
docker stop swarm-agent
docker rm swarm-agent
docker run -d --name swarm-agent --restart=always swarm \
  join --addr ${IP}:2376 \
  ${TOKEN}

Ich denke, längerfristig müssen wir eine Art "Synchronisierung" mit dem Konfigurationsspeicher unterstützen.

cc @aluzzardi @vieux @abronan Wie würden Sie sich den Workflow für diesen Fall vorstellen (IPs im Schwarm ändern)?

@nathanleclaire Einträge im K/V werden nach Ablauf der TTL gelöscht (Knoten werden aus der

Als Workaround, wenn Machine erkennt, dass eine Instanz neu gestartet wird, könnte es den Eintrag im K/V direkt löschen, um nach einem Neustart keine Computer mit falschen IPs aufzulisten.

Hier ist meine Problemumgehung nach dem Ändern der IP-Adresse des Docker-Schwarmknotens:

% docker-machine env docker-node
% docker-machine regenerate-certs docker-node
(I sometimes need to run multiple times when error occurs.)
% eval $(docker-machine env docker-node)
% export TOKEN=$(docker inspect -f "{{ index .Config.Cmd 3}}" swarm-agent)
% docker rm -f swarm-agent
% docker run -d --name=swarm-agent --restart=always swarm:latest join --advertise "${DOCKER_HOST##tcp://}" "${TOKEN}"
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen