iT邦幫忙

0

vagrant introduction

  • 分享至 

  • xImage
  •  

official site: https://developer.hashicorp.com/vagrant

vagrant 是一個工具幫助管裡 virtual machines
好處是能夠快速的用單一 source 建立多分副本
並預先設定好內容

適合用在地端快速設定/重建開發環境
對於 devops/SRE 個人認為是必學工具
畢竟開發過程中需要一次次的重複確認 能夠快速重建乾淨的環境是相當重要的

vagrant deafult 使用 virtualbox 作為 providers(執行 VM 的 hypervisor)
雖然也支援 hyper-v/vmware 不過因為設定多少有不同的部份 相容性也是問題
個人是建議就乖乖使用 virtualbox 避免不必要的踩雷
providers

getting start

  1. install vagrant
  2. install virtualbox
  3. crate a Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
end
  1. provision VM vagrant up
  2. connect VM vagrant ssh
  3. cleanup vagrant destroy -f

tips

create base box

box 即為 vagrant 在建立 VM 時的 image
vagrant 不會從 iso 開始安裝
是將已安裝完成的 VM 打包 box file 作為 VM source

雖然社群有現成的 box
但在開發過程中, 會需要預先安裝好開發環境 比如說 python
雖然可以在 vagrant 部屬過程中安裝 但那樣效率極低
所以建議是自己先安裝好 VM 先把基本需要的東西準備好後
包成 box 供後續使用
詳細請見 create base box

network

vagrant default 會使用 nat network 對外 + 1 private network
在建立 VM 後
預設情況使用 vagrant ssh 可以連進 VM
但要配合其他工具連線就顯的不易使用, 能夠直接使用 ssh or tcp/ip 連線是最容易的
但 private network 是 DHCP 進而導致需要知道 IP 後才能連線
這邊只要在 Vagrantfile 中提供詳細的設定即可, 後面再一併提供範例

use loop

如果一次只能建一台 VM
那使用 snapshot 功能即可
vagrant 讓你可以建立多台 VM
這才是用他的價值所在

use link clone

如果要建立 10 個 VM
每個都要 10G 的空間
那不只建立過程會慢, 甚至浪費硬體 resource
只要在 vagrantfile 加入 linked-clones 即可

sample

經過以上改善
成品如下

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

$vms = 3 # how many VM to create
$v_cpus = 2 # set cpu source
$v_memory = 2048 # set memory source


Vagrant.configure("2") do |config|

# box source
config.vm.box = "server24.box"  # box source
# box authenticate
  config.ssh.username = "ubuntu"
  config.ssh.password = "ubuntu"

# config VM resource  
  config.vm.provider "virtualbox" do |v|
    v.linked_clone = true
    v.cpus = $v_cpus
    v.memory = $v_memory
  end

# use loop create VM
  (1..$vms).each do |i|
    # Defining VM properties
    config.vm.define "lab_vm#{i}" do |node|
      node.vm.hostname = "node#{i}.owan.lab"
      node.vm.network "private_network", ip: "192.168.56.#{100+i}"  # set VM IP
      node.vm.provision "shell",reboot: true, inline: "echo reboot"
    end
  end
end

本文同步發表自 vagrant introduction


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言