2016-10-08 14 views
1

연구 목적으로 여러 VM 환경을 배포하기 위해 방랑을 사용하고 있습니다. 하지만 이제는 각 도커 컨테이너를 특정 CPU 코어에 고정해야하지만 방랑을 사용하는 방법을 알지 못합니다. Vagrantfile에 "args"절을 사용하여 docker 실행 명령에 "--cpuset"매개 변수를 전달할 수 있지만 여러 컨테이너를 시작하고 루프에서 사용하는 방법을 모릅니다. 각 컨테이너를 다른 CPU 코어 (예 : node1 핀을 core # 0, node2 핀을 core # 1 등)에 고정해야합니다.Vagrant : 유모차를 사용하여 도커 실행 인수를 여러 컨테이너로 전달

나의 현재 Vagrantfile는 CPU없이, 속박의 일을 다음과 같습니다

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 
VAGRANTFILE_API_VERSION = "2" 

# choose how many machines the cluster will contain 
N_VMS = 32 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "tknerr/baseimage-ubuntu-14.04" 
    config.vm.network "private_network", ip: "192.168.121.2" 
    config.vm.provider "docker" do |v| 
    v.has_ssh = true 
    end 

    hosts_file = [] 
    1.upto(N_VMS) do |i| 
    config.vm.define vm_name = "node#{i}" do |config| 
     config.vm.hostname = vm_name 
    end 
    end 

    script = <<-SCRIPT 
     apt-get -y update 
     apt-get -y install libcr-dev mpich2 mpich2-doc arp-scan openssh-server nano make 
    SCRIPT 
    script.sub! 'N_VMS', N_VMS.to_s 
    config.vm.provision "shell", inline: script 

end 

답변

0

을 정의 할 수 있습니다. "--cpuset-cpus"를 추가하는 올바른 위치는 config.vm.define 블록에 있습니다.

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 
VAGRANTFILE_API_VERSION = "2" 

# choose how many machines the cluster will contain 
N_VMS = 32 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "tknerr/baseimage-ubuntu-14.04" 
    config.vm.network "private_network", ip: "192.168.121.2" 
    config.vm.provider "docker" do |v| 
    v.has_ssh = true 
    end 

    2.upto(N_VMS+1) do |i| 
    config.vm.define vm_name = "node#{i}" do |config| 

     # CPU PINNING CONFIG  
     config.vm.provider "docker" do |docker| 
     docker.create_args = ['--cpuset-cpus=' + ((i/2)-1).to_s] 
     end 

     config.vm.hostname = vm_name 
    end 
    end 

    script = <<-SCRIPT 
     apt-get -y update 
     apt-get -y install libcr-dev mpich2 mpich2-doc arp-scan openssh-server nano make 
    SCRIPT 
    script.sub! 'N_VMS', N_VMS.to_s 
    i=1 
    config.vm.provision "shell", inline: script 

end 
0

vagrantfile는 루비 언어를 기반으로 당신이 포함 할 수 있도록, 루프에서 방랑의 VM을 config (설정)한다고 가정 vagrantfile에 대한 개발이 가능합니다. 여기에 예제가 있습니다. vm define에 "--cpuset"설정을 추가 할 수 있습니다.

# -*- mode: ruby -*- 
# vi: set ft=ruby : 
# read vm and chef configurations from JSON files 
nodes_config = (JSON.parse(File.read("nodes.json")))['nodes'] 
VAGRANTFILE_API_VERSION = "2" 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    nodes_config.each do |node| 
    node_name = node[0] # name of node 
    node_values = node[1] # content of node 
      # puts node_name 
    # puts node_values['box'] 
    config.vm.define node_name do |config| 
     config.vm.box = node_values['box'] 
     config.vm.hostname = node_name 
     config.vm.network :private_network, ip: node_values['ip'] 
        config.vm.provider :virtualbox do |vb| 
      vb.customize ["modifyvm", :id, "--memory", node_values['memory']] 
      vb.customize ["modifyvm", :id, "--name", node_name] 
     end 
    end 
end 

nodes.json

가 VM을 정의하기 위해, 당신은 내가 엉뚱한 곳에서 찾고 있었다, 결국 당신의

{ 
    "nodes": { 
    "jenkins.example.com": { 
     "info": "jenkins master server", 
     "box": "../Vgrant-boxes/centos65_virtualbox_50G.box", 
     "ip": "192.168.35.101", 
     "ports": [], 
     "memory": 512 
    }, 
    "node01.example.com": { 
     "info": "tomcat app host server", 
     "box": "../Vgrant-boxes/centos65_virtualbox_50G.box", 
     "ip": "192.168.35.121", 
     "ports": [], 
     "memory": 512 
    }, 
    "node02.example.com": { 
     "info": "jboss app host server", 
     "box": "../Vgrant-boxes/centos65_virtualbox_50G.box", 
     "ip": "192.168.35.122", 
     "ports": [], 
     "memory": 512 
    }, 
    "node03.example.com": { 
     "info": "oracle xe server", 
     "box": "../Vgrant-boxes/centos65_virtualbox_50G.box", 
     "ip": "192.168.35.123", 
     "ports": [], 
     "memory": 512 
    }, 
    "node04.example.com": { 
     "info": "artifactory server", 
     "box": "../Vgrant-boxes/centos65_virtualbox_50G.box", 
     "ip": "192.168.35.124", 
     "ports": [], 
     "memory": 512 
    } 
    } 
} 
+0

나는 내가 통과해야 인수가 "고정 표시기 실행"명령이기 때문에이 방법은 고정 표시기 공급자에 대해 작동하지 않습니다 생각 :

코드는 다음과 같은 것을했다. Vagrant docs에 따르면 이러한 인수는 config.vm.provision 명령을 사용하여 전달되지만 사용 방법을 잘 모르겠습니다. –

+0

@LuisCarlosJersak 어쩌면 내가 요리사 레시피를 제공하는 데 사용했던 [this] (https://github.com/cloudhuang/vagrant-ci-env/blob/master/Vagrantfile)을 참조 할 수 있습니다. –