Machine: Setelah instance mengubah ip, swarm agent juga harus mengubah join addr.

Dibuat pada 18 Mar 2015  ·  4Komentar  ·  Sumber: docker/machine

Setelah lebih banyak menguji PR #770 saya menemukan ini:

Saya mendeteksi masalah IP lain yang berubah, setelah saya me-restart swarm ec2 cluster saya hari ini.

Master menggunakan ip lama dari mesin swarm

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" 

Saya menganalisis masalah:

Agen swarm bergabung dengan ip lama 52.10.167.59

$ 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

Setelah IP dari mesin swarm berubah, implementasi harus mengkonfigurasi ulang agen swarm, menghapus wadah lama dan memulai yang baru.

areswarm driveec2

Komentar yang paling membantu

Inilah solusi saya setelah mengubah alamat IP node swarm buruh pelabuhan:

% 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}"

Semua 4 komentar

Satu-satunya perbaikan cepat saat ini adalah membuat ulang agen dengan skrip kecil ini:

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}

Saya pikir jangka panjang kita harus mendukung semacam "sinkronisasi" ke toko konfigurasi, saya tidak tahu apakah layanan penemuan token Docker Hub akan mendukung modifikasi IP cluster, tapi saya yakin backend KV akan.

cc @aluzzardi @vieux @abronan Bagaimana Anda membayangkan alur kerja untuk kasus ini (mengubah IP di swarm)?

@nathanleclaire Entri di K/V dihapus setelah TTL kedaluwarsa (node ​​dihapus dari penemuan). Jadi jika IP berubah, toko akan mencerminkan status cluster dengan benar setelah stop/restart (pada EC2 misalnya). Tetap saja Anda mungkin mengharapkan entri lama terdaftar sebentar sampai TTL mereka kedaluwarsa (Jika Anda memiliki 3 mesin, berharap memiliki 6 dari yang terdaftar meskipun entri lama akan ditandai sebagai tidak sehat dan tidak dapat digunakan di Swarm )

Sebagai solusinya, jika Mesin menyadari bahwa sebuah instance sedang dimulai ulang, ia dapat langsung menghapus entri di K/V untuk tidak mencantumkan mesin dengan IP yang salah setelah dimulai ulang.

Inilah solusi saya setelah mengubah alamat IP node swarm buruh pelabuhan:

% 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}"
Apakah halaman ini membantu?
0 / 5 - 0 peringkat