2016-11-28 4 views
2

저는 Vagrant와 해당 지역을 사용하여 DEV 최소 centos VM을 제공합니다. VM은 모두 Docker 1.12.x를 실행하며 이제는 자동으로 웜 모드 클러스터를 만듭니다. 목표는 vagrant up이고 cli가 돌아 오면 클러스터가 실행 중입니다.웜 모드 설정 Dager Swarm with Vagrant

문제 상자에서 docker swarm init --advertise-addr <my init swarm mgr>을 실행할 수 있지만이 상자에서 관리자 및 작업자 노드에 대한 토큰을 가져 와서 이후에 설정된 VM에 주입해야합니다.

루비를 프로그래밍 할 수 없으며, 피할 수 있다면 Docker Remote API로 시작하지 않을 것입니다.

테스트 VM 설정에서 hostid를 요청하여 게스트 cmd 출력을 Vagrantfile의 변수에 할당하려고 시도했지만 Ruby가 스크래치가되지 않습니다.

로컬이 아닌 VM을 프로비저닝 할 때 Vagrant를 사용하여 스웜 모드 클러스터를 만드는 것이 가장 좋은 방법입니다.

EDIT : 적어도 토큰을 파일 형태로 추출하여 관련 컴퓨터에 복사 할 수있는 vagrant scp을 보았습니다. 나는 플러그를 꽂기보다는 순수한 것을 유지하기를 원했으며 더 많은 방황 명령을 실행하기 위해 Ruby에서 포격하는 것을 피했지만 (더 좋은 방법은 있나?) 적어도 방랑하고 무언가있는 지역을 사용했다.

+0

스웜 (Swarm) 모드를 사용하지 않으므로이 사용 사례에 대한 좋은 예는 아닙니다. OP에 관해서는 쉘 스크립트를 사용하여해야 할 일을하기 위해 sag etc를 실행할 수 있습니다 (docker swarm join-token -q manager, docker swarm join --token 등을 사용하여 토큰을 가져옵니다). .. 다른 사람들에게. – johnharris85

+0

글쎄, 내가 잘못 했으니 까 맞았다 고 생각해서 다행 이네.하지만, 스크립트를 사용하는 손님에게'docker swarm join-token -q manager'를 실행한다고 생각하지 않는다. 명령이 init swarm mgr에서 실행되고 게스트에 "트랩 된"반환 된 토큰이 있기 때문에 방랑자 호스트는 Vagrant 파일에 정의 된 다음 시스템으로이를 전달할 수 없으므로 swarm에 참여할 수 없습니다. 제공 할 수 및 작동 예제? 감사 – volvox

답변

1

는 @ abronan의 게시물에 언급 한 바와 같이,이 발견, 내가 어떤 식 으로든에서 토큰을 얻을 필요가 있었다. 나는 그것을 이렇게했다.이 토큰의 출력을 발생

## now handle docker swarm tokens 
# 
config.vm.provision :host_shell do |host_shell| 
    host_shell.inline = 'vagrant scp dockerwkr:/vagrant/myswarmwkr.token .' 
end 
config.vm.provision :host_shell do |host_shell| 
    host_shell.inline = 'vagrant scp dockerwkr:/vagrant/myswarmwkr.token .' 
end 

: 방랑 SCP를 사용하여 내 고정 표시기 떼 작업자 노드에 특정

## docker swarm mgr 
    # 
    - name: docker swarm join-token -q manager 
    shell: docker swarm join-token -q manager 
    register: dockerswarmjointokenmgr 

    - name: copy content={{ dockerswarmjointokenmgr.stdout.split() }} dest=/vagrant/myswarmwkr.token 
    local_action: copy content={{ dockerswarmjointokenmgr.stdout.split() }} dest=/vagrant/myswarmwkr.token 

    - name: make swarm wkr token readable 
    file: path=/vagrant/myswarmwkr.token owner=vagrant group=vagrant recurse=no 

Vagrantfile 코드 : 방랑 호스트

Ansible 지역 각본 코드는 토큰을 추출하는 데 사용 게스트의 파일에 scp을 방미 호스트에 보내고 방글라데시가 도커 작업자 설정을 처리 할 때 토큰이 Vagrantfile과 동일한 디렉토리에 기록 된 경우 작업자 게스트에서 자동으로 올라갑니다 /vagrant 여기서 ansible local 코드는 docker swarm join 명령으로 읽을 수 있습니다. 피들리와 함께 판매했지만 자기 노트북에서 배우기에는 괜찮습니다.

1

Docker 1.12.3부터 쉬운 방법은 없습니다. 토큰을 어떤 식 으로든 꺼내야합니다.

당신은 할 수 있습니다

  • \swarm 엔드 포인트와 Docker Remote API를 사용하여 떼를 검사하고 첫 번째 기계 init 후 관련 JoinTokens를 추출 :

    [...] 
    "JoinTokens" : { 
        "Worker" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-6qmn92w6bu3jdvnglku58u11a", 
        "Manager" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-8llk83c4wm9lwioey2s316r9l" 
    } 
    [...] 
    
  • 당신이 언급 한 바와 같이, 후 vagrant scp를 사용하여 토큰을 파일에 쓰십시오.

  • 동기화 된 폴더을 사용하고 모든 VM에 마운트합니다. 따라서 첫 번째 VM은 토큰을 파일에 쓰고 다른 VM은 토큰을 파일에서 읽습니다.

하지만 어떤 경우에도 수동으로 부트 스트랩 프로세스를 동기화해야합니다.

관련 도커 문제가 : https://github.com/docker/docker/issues/26743 (나를 포함)의 경우 사람에서 확인