Machine: ์ธ์Šคํ„ด์Šค๊ฐ€ IP๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ Swarm ์—์ด์ „ํŠธ๋Š” ์กฐ์ธ ์ฃผ์†Œ๋„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 03์›” 18์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: docker/machine

PR #770์„ ๋” ํ…Œ์ŠคํŠธํ•œ ํ›„ ๋‹ค์Œ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ Swarm ec2 ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ๋ณ€๊ฒฝ๋œ ๋‹ค๋ฅธ IP ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ๋Š” ์Šค์›œ ๋จธ์‹ ์˜ ์ด์ „ IP๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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" 

๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•œ๋‹ค:

Swarm ์—์ด์ „ํŠธ๋Š” ์ด์ „ IP 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

์Šค์›œ ๋จธ์‹ ์˜ IP๊ฐ€ ๋ณ€๊ฒฝ๋œ ํ›„ ๊ตฌํ˜„์€ ์Šค์›œ ์—์ด์ „ํŠธ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ณ  ์ด์ „ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

areswarm driveec2

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‹ค์Œ์€ docker swarm ๋…ธ๋“œ์˜ IP ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

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

๋ชจ๋“  4 ๋Œ“๊ธ€

์œ ์ผํ•œ ๋น ๋ฅธ ์ˆ˜์ •์€ ํ˜„์žฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์€ ์Šคํฌ๋ฆฝํŠธ๋กœ ์—์ด์ „ํŠธ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒ์„ฑ-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}

์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ๊ตฌ์„ฑ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์ผ์ข…์˜ "๋™๊ธฐํ™”"๋ฅผ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Docker Hub ํ† ํฐ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ IP ์ˆ˜์ •์„ ์ง€์›ํ• ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ KV ๋ฐฑ์—”๋“œ๋Š” ๊ทธ๋Ÿด ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

cc @aluzzardi @vieux @abronan ์ด ๊ฒฝ์šฐ(๊ตฐ์ง‘์—์„œ IP ๋ณ€๊ฒฝ)์— ๋Œ€ํ•œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์ƒํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@nathanleclaire K/V์˜ ํ•ญ๋ชฉ์€ TTL ๋งŒ๋ฃŒ ํ›„ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค(๋…ธ๋“œ๊ฐ€ ๊ฒ€์ƒ‰์—์„œ ์ œ๊ฑฐ๋จ). ๋”ฐ๋ผ์„œ IP๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์ €์žฅ์†Œ๋Š” ์ค‘์ง€/์žฌ์‹œ์ž‘(์˜ˆ: EC2์—์„œ) ํ›„ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ TTL์ด ๋งŒ๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„ ๋™์•ˆ ์˜ค๋ž˜๋œ ํ•ญ๋ชฉ์ด ๋‚˜์—ด๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(3๋Œ€์˜ ์‹œ์Šคํ…œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด์ „ ํ•ญ๋ชฉ์ด ๋น„์ •์ƒ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด Swarm์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋”๋ผ๋„ ํ•ด๋‹น ํ•ญ๋ชฉ ์ค‘ 6๊ฐœ๊ฐ€ ๋‚˜์—ด๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. )

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Machine์ด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๊ณ  ์žˆ์Œ์„ ์ธ์‹ํ•˜๋ฉด ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ์ž˜๋ชป๋œ IP๋ฅผ ๊ฐ€์ง„ ์‹œ์Šคํ…œ์„ ๋‚˜์—ดํ•˜์ง€ ์•Š๋„๋ก K/V์˜ ํ•ญ๋ชฉ์„ ์ง์ ‘ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ docker swarm ๋…ธ๋“œ์˜ IP ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

% 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}"
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰