Vagrant is command line utility for managing the lifecycle of virtual machines. It help you to deploy a cluster of server with just one command line. And for that, we only need to create vagrantfile which will contain configuration of the VM you want to deploy.
Vagrant will create VM based on the Virtualisation software you're using. In my case, I'll use Virtualbox. But it's also work with VMware, Docker, Hyper-V or a custom provider (AWS). These virtualisation tools are called Providers in Vagrant.
A pratical use case of vagrant can be : "In a company, if a developer want to test a feature on his computer before pushing to production, he can use a vagrantfile build by for example a devops engineer and get all an infrastructure similar to production".
The image above present global architecture of Vagrant.
Get Started with Vagrant
I'm using Ubuntu 20.04 for this lab
How to install vagrant ?
Before installing vagrant, you need to install virtualisation tool for example virtualbox in case. Run the command below if you want to use virtualbox and it's not installed.
sudo apt update
sudo apt install virtualbox -y
Add repository addition dependencies if it's not installed on your system.
sudo apt install -y apt-transport-https \
ca-certificates \
curl \
software-properties-common
Add the official Vagrant APT repository to your system
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
And finaly run command below to install vagrant
sudo apt update
sudo apt install vagrant -y
vagrant --version
How to use Vagrant ?
Vagrantfile
We'll use a simple vagrantfile for this tuto. You can check the full documentation on how to create vagrantfile here.
# -*- mode: ruby -*-
# vi: set ft=ruby :
BRIDGE_NETWORK = "Realtek RTL8852AE WiFi 6 802.11ax PCIe Adapter"
#replace with with your bridge network
### Master (Kubernetes Master Node)
MASTER_RAM = 4096
MASTER_CPU = 4
### Cluster nodernetes
N = 2
RAM = 2048
CPU = 2
PRIVATE_IP_PREFIX = "192.168.130."
PUBLIC_IP_PREFIX = "192.168.1."
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo Hello"
(1..N).each do |machine_id|
config.vm.define "node-0#{machine_id}" do |node|
node.vm.box = "peru/ubuntu-20.04-server-amd64"
node.vm.hostname = "node-0#{machine_id}"
node.vm.provider "virtualbox" do |v|
v.name = "node-0#{machine_id}"
v.memory = RAM
v.cpus = CPU
end
node.vm.network "public_network", bridge: BRIDGE_NETWORK, ip: "#{PUBLIC_IP_PREFIX}#{170+machine_id}"
node.vm.network "private_network", ip: "#{PRIVATE_IP_PREFIX}#{170+machine_id}"
# config.vm.provision "ansible" do |ansible|
# ansible.playbook = "ansible-playbook/site_staging.yml"
# end
#you can use playbook there to configure your vm after their creation
end
end
config.vm.define "master" do |master|
master.vm.box = "peru/ubuntu-20.04-server-amd64"
master.vm.provider "virtualbox" do |v|
v.name = "master"
v.memory = MASTER_RAM
v.cpus = MASTER_CPU
end
master.vm.network "public_network", bridge: BRIDGE_NETWORK, ip: "#{PUBLIC_IP_PREFIX}#{170}"
master.vm.network "private_network", ip: "#{PRIVATE_IP_PREFIX}#{170}"
end
end
This image present code in vagrantfile for configuration of a VM worker node in Kubernetes Cluster. Full Code here
Deploy a Cluster with Vagrant
After writing your vagrantfile, we just need to run the command vagrant up
to create our cluster.
vagrant validate //look for error in our vagrantfile
vagrant up
Delete the cluster by using the command below
vagrant destroy
Remote ssh to your VM using the command below
ssh vagrant@ip //ip of the VM your want to connect
The default username and password in VM create with vagrant is vagrant.
Top comments (0)