Skip to content

Vagrant 操作

任何目录登录vagrant

讲如下内容复制到.ssh文件夹下,并命名为config,然后就可以在任何目录通过ssh vagrant-host登录主机了

yaml
Host vagrant-host
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/press/Vagrant/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  PubkeyAcceptedKeyTypes +ssh-rsa
  HostKeyAlgorithms +ssh-rsa

Vagrantfile配置

基础Vagrangtfile配置

ruby
Vagrant.configure("2") do |config|
   # hostname设置
  config.vm.hostname = "node1"

  # 必须先禁用默认的同步目录,否则会报错,原因未知!!!,开启此行就可以不用安装vagrant-vbguest
  config.vm.synced_folder '.', '/vagrant', disabled: true

  # 同步目录设置,实时同步采用默认方式即可,rsync不起作用
  config.vm.synced_folder "D:/xxx/code", "/home/www/"

  # 端口转发设置
  config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # host-only
  config.vm.network "private_network", ip: "192.168.33.10"

  # 创建一个bridge桥接网络,指定IP
  config.vm.network "public_network", ip: "192.168.0.200"
  
  config.vm.provider "virtualbox" do |vb|
     # 指定vm-name,也就是virtualbox管理控制台中的虚机名称。如果不指定该选项会生成一个随机的名字,不容易区分。
    vb.name = "centos7"

    # vagrant up启动时,是否自动打开virtual box的窗口,缺省为false
    vb.gui = true

    # 指定vm内存,单位为MB
    vb.memory = "4096"

    # 设置CPU个数
    vb.cpus = 2
    
    #修改vb.name的值
    vb.customize ["modifyvm", :id, "--name", "mfsmaster2"]
     
    #如修改显存,缺省为8M,如果启动桌面,至少需要10M,如下修改为16M:
    vb.customize ["modifyvm", :id, "--vram", "16"]
     
    #调整虚拟机的内存
    vb.customize ["modifyvm", :id, "--memory", "1024"]
     
    #指定虚拟CPU个数
    vb.customize ["modifyvm", :id, "--cpus", "2"]
     
    #增加光驱:
    vb.customize ["storageattach",:id,"--storagectl", "IDE Controller","--port","0","--device","0","--type","dvddrive","--medium","/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso"]
    #注:meduim参数不可以为空,如果只挂载驱动器不挂在iso,指定为“emptydrive”。如果要卸载光驱,medium传入none即可。
    #从这个指令可以看出,customize方法传入一个json数组,按照顺序传入参数即可。 json数组传入多个参数
    vb.customize ["modifyvm", :id, "--name", "mfsserver3", "--memory", "2048"]
    
    # 单个机器执行脚本
    vb.vm.provision :shell do |shell|
      shell.path = "db.sh"
    end
	end

  # 初始脚本
  # 外置文件初始脚本
  config.vm.provision "shell", privileged: true, path: "./setup.sh"
  
  # 行内样式
  config.vm.provision "shell", inline: "sudo apt-get update; sudo ln -sf /usr/bin/python3 /usr/bin/python"
  
  # 块输入
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
  SHELL

	 
end
ruby
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.hostname = "vagrant-demo"
  config.vm.box_version = "2004.01"
  config.vm.define "web-server" do |web| # virtualbox name
    web.vm.hostname = "web" # hostname
  end
  config.vm.define "database" do |db|
    db.vm.hostname = "db"
  end
end

循环Vagrangtfile配置

setup.sh:

sh
#/bin/sh

# install some tools
sudo yum install -y git vim gcc glibc-static telnet bridge-utils

# install docker
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh

# start docker service
sudo groupadd docker
sudo gpasswd -a vagrant docker
sudo systemctl start docker

rm -rf get-docker.sh

Vagrantfile:

ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.require_version ">= 1.6.0"

boxes = [
    {
        :name => "gitlab",
        :eth1 => "192.168.211.10",
        :mem => "4096",
        :cpu => "2"
    },
    {
        :name => "gitlab-ci",
        :eth1 => "192.168.211.11",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "k8s-master",
        :eth1 => "192.168.211.20",
        :mem => "2048",
        :cpu => "1"
    },
    {
        :name => "k8s-node",
        :eth1 => "192.168.211.21",
        :mem => "2048",
        :cpu => "1"
    },    
]

Vagrant.configure(2) do |config|

  config.vm.box = "centos/7"

  boxes.each do |opts|
      config.vm.define opts[:name] do |config|
        config.vm.hostname = opts[:name]
        config.vm.provider "vmware_fusion" do |v|
          v.vmx["memsize"] = opts[:mem]
          v.vmx["numvcpus"] = opts[:cpu]
        end

        config.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--memory", opts[:mem]]
          v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
        end

        config.vm.network :private_network, ip: opts[:eth1]
      end
  end

  config.vm.synced_folder "./labs", "/home/vagrant/labs"
  config.vm.provision "shell", privileged: true, path: "./setup.sh"

end