This project was based on work from coolsvap/kubeadm-vagrant by @coolsvap, now it is mostly independent.
A demo of the start and destroy of a cluster can be found here: README.md Demo section.
make
Targetsmake
kubectl
- Optional when KUBECTL_AUTO_CONF
is set to false
(default: true
).grep
cut
rsync
KUBETOKEN
is given):
/dev/urandom
openssl
command - Fallback for when /dev/urandom
is not available.2.2.0
)
2.2.2
(if you should experience issues, please upgrade to at least this Vagrant version or higher)vagrant-reload
REQUIRED For BOX_OS=fedora
(set by default) and when using the vagrant-reload*
targets, the vagrant-reload
plugin is needed. An automatic attempt to install the plugin is made. To install manually run one of the following commands:
make vagrant-plugins
orvagrant plugin install vagrant-reload
vagrant plugin install vagrant-libvirt
)libvirtd
version 5.10.0
.Waiting for domain to get an IP address...
, using virsh
run virsh force reset VM_NAME
(VM_NAME
can be obtained using virsh list
command) or in virt-manager Force Reset
on the VM.libvirt
is recommended)6.0.0
(if you should experience issues, please upgrade to at least this version or higher)VBoxManage
binary in PATH
.NOTE
kubectl
is only needed when thekubectl
auto configuration is enabled (default is enabled), to disable it set the variableKUBECTL_AUTO_CONF
tofalse
. For more information, see the Configuration / Variables doc page.
MASTER_CPUS
)MASTER_MEMORY_SIZE_GB
)NODE_CPUS
)NODE_MEMORY_SIZE_GB
)These resources can be changed by setting the according variables for the make up
command, see Configuration / Variables doc page.
To start with the defaults, 1x master and 2x workers, run the following:
$ make up -j 3
The -j3
will cause three VMs to be started in parallel to speed up the cluster creation.
NOTE Your
kubectl
is automatically configured to use a context for the created cluster, after the master VM is started. The context is named after the directory theMakefile
is in.
$ kubectl config current-context
k8s-vagrant-multi-node
$ kubectl get componentstatus
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health": "true"}
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 4m v1.17.3
node1 Ready <none> 4m v1.17.3
node2 Ready <none> 4m v1.17.3
There are multiple sets of Vagrantfiles available (see vagrantfiles/
) which can be used to use a different OS for the Kubernetes environment.
Also see Usage doc page.
To start up the Vagrant Kubernetes multi node environment with the default of two worker nodes + a master (not parallel) run:
$ make up
NOTE Your
kubectl
is automatically configured to use a context for the created cluster, after the master VM is started. The context is named after the directory theMakefile
is in.
To start up 4 VMs in parallel run (-j
flag does not control how many (worker) VMs are started, the NODE_COUNT
variable is used for that):
$ NODE_COUNT=3 make up -j4
The flag -j CORES/THREADS
allows yout to set how many VMs (Makefile targets) will be run at the same time.
You can also use -j $(nproc)
to start as many VMs as cores/threads you have in your machine.
So to start up all VMs (master and three nodes) in parallel, you would add one to the chosen NODE_COUNT
.
$ make status
master not created (virtualbox)
node1 not created (virtualbox)
node2 not created (virtualbox)
To destroy the Vagrant environment run:
$ make clean
$ make clean-data
The make load-image
target can be used to copy a docker image from your local docker daemon to all the VMs in your cluster.
The IMG
variable can be expressed in a few ways, for example:
$ make load-image IMG=your_name/your_image_name:your_tag
$ make load-image IMG=your_name/your_image_name
$ make load-image IMG=my-private-registry.com/your_name/your_image_name:your_tag
You can also specify a new image name and tag to use after the image has been copied to the VM's by setting the TAG
variable.
This will not change the image/tag in your local docker daemon, it will only affect the image in the VM's.
$ make load-image IMG=repo/image:tag TAG=new_repo/new_image:new_tag
See the data/VM_NAME/
directories, where VM_NAME
is for example master
.
make
TargetsSee Configuration / Variables doc page.
See Demo doc page.
Please attach the output of the make versions
command to the issue as is shown in the issue template. This makes debugging easier.