Vagrant – doskonałe narzędzie do nauki i testowania

Vagrant daje nam możliwość szybkiego uruchomienia wirtualnych maszyn dla celów developerskich, testowania, nauki czy zabawy.
W tym wpisie pokażemy jak w prosty sposób utworzyć sobie mini homelab do nauki i testowania.

Instalacja Vagrant

Na stronie vagrantup.com znajdziemy przygotowane paczki z najnowszą wersją Vagrant.

W przypadku Linuksa możemy także zainstalować Vagranta z repozytoriów dystrybycji.
Przykładowo w Debianie:

apt install vagrant virtualbox

Przykład: tworzenie maszyny wirtualnej z Debian 10

Utworzenie w bieżącym katalogu pliku konfiguracyjnego Vagrantfile:

vagrant init debian/buster64

Pobranie obrazu dysku i jego uruchomienie:

vagrant up

Przy pierwszym uruchomieniu proces może trochę potrwać, gdyż niezbędne będzie pobranie obrazy tzw. box.

Zalogowanie się do maszyny uruchomionej za pomocą Vagrant:

vagrant ssh

Po zalogowaniu możemy wykonywać wszystkie zadania administracyjne za pomocą sudo – bez hasła.
Np. zalogować się na konto roota:

sudo su -

Warto też przejrzeć wygenerowany plik Vagrantfile i ewentualnie wprowadzić w nim potrzebne zmiany.

Nasz homelab: CentOS, Debian oraz Ubuntu

W pliku konfiguracyjnym Vagrantfile możemy zdefiniować wiele maszyn wirtualnych (multi-machine).
Utworzymy teraz nasz mini homelab z CentOS 8, Debiana 10 oraz Ubuntu 20.04 18.04.
Maszyny znajdują się w jednej sieci więc można swobodnie łączyć się pomiędzy nimi.
Tworzymy katalog: mkdir homelab, a w nim plik Vagrantfile z zawartością:

servers=[
  {
    :hostname => "centos",
    :ip => "192.168.100.10",
    :box => "generic/centos8",
    :ram => 1024,
    :cpu => 1
  },
  {
    :hostname => "debian",
    :ip => "192.168.100.11",
    :box => "debian/buster64",
    :ram => 1024,
    :cpu => 1
  },
  {
    :hostname => "ubuntu",
    :ip => "192.168.100.12",
    :box => "ubuntu/focal64",
    :ram => 1024,
    :cpu => 1
  }
]

Vagrant.configure(2) do |config|
    servers.each do |machine|
        config.vm.define machine[:hostname] do |node|
            node.vm.box = machine[:box]
            node.vm.hostname = machine[:hostname]
            node.vm.network "private_network", ip: machine[:ip]
            node.vm.provider "virtualbox" do |vb|
                vb.customize ["modifyvm", :id, "--memory", machine[:ram]]
                vb.name = machine[:hostname]
            end
        end
    end
end

Po wydaniu polecenia vagrant up w katalogu z powyższym plikiem konfiguracyjnym, zostaną pobrane odpowiednie boxy dla tych trzech dystrybucji (tylko jeśli jeszcze nie są dostępne lokalnie) oraz uruchomione zostaną wszystkie trzy maszyny wirtualne.
Możemy oczywiście wykonywać komendy vagrant dla każdej z maszyn osobno – identyfikując ją po nazwie np.

vagrant halt debian
vagrant ssh centos

Przydatne komendy

vagrant status
Current machine states:

centos                    poweroff (virtualbox)
debian                    running (virtualbox)
ubuntu                    poweroff (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

Nieco więcej informacji o wszystkich maszynach wirtualnych:

vagrant global-status
id       name   provider   state    directory                           
------------------------------------------------------------------------
2a7b7f2  centos virtualbox poweroff /home/user/Vagrant                
e7d35ce  debian virtualbox poweroff /home/user/Vagrant                
1c714b2  ubuntu virtualbox poweroff /home/user/Vagrant 

Uruchamianie vm:

vagrant up centos

Zatrzymywanie vm:

vagrant halt ubuntu

Zalogowanie się do maszyny:

vagrant ssh debian

Jeśli chcemy przywrócić maszynę do stanu zaraz po instalacji możemy ją zniszczyć:

vagrant destroy debian

… i uruchomić nową instancję:

vagrant up debian

Strona domowa oraz dokumentacja: vagrantup.com
Dostępne boxy: app.vagrantup.com

Dodaj komentarz