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