This repo provides a template Vagrantfile to create a CoreOS virtual machine cluster with three nodes (hostname prefix 'core') using the VirtualBox software hypervisor.
- Install dependencies
- VirtualBox 4.3.10 or greater.
- Vagrant 1.6.3 or greater.
- Clone this project and get it running!
git clone https://github.com/Sadathossain/coreos-vagrant/
cd coreos-vagrant
wget -O config.rb --no-check-certificate "https://onedrive.live.com/download?cid=250471D9C3703BE3&resid=250471D9C3703BE3%2130390&authkey=AAEWRm-mnCLgk6U"
wget -O user-data --no-check-certificate "https://onedrive.live.com/download?cid=250471D9C3703BE3&resid=250471D9C3703BE3%2130393&authkey=ALmTQ-fS5sZotUU"
Generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
Specify the initial size of your cluster with ?size=X
Replace each time 'vagrant destroy'
Edit cl.conf and user-data with generated
- Startup and SSH
There are two "providers" for Vagrant with slightly different instructions. Follow one of the following two options:
VirtualBox Provider
The VirtualBox provider is the default Vagrant provider. Use this if you are unsure.
vagrant up
# core-01
vagrant ssh core-01 -- -A
# core-02
vagrant ssh core-02 -- -A
# core-03
vagrant ssh core-03 -- -A
VMware Provider
The VMware provider is a commercial addon from Hashicorp that offers better stability and speed. If you use this provider follow these instructions.
VMware Fusion:
vagrant up --provider vmware_fusion
vagrant ssh
VMware Workstation:
vagrant up --provider vmware_workstation
vagrant ssh
vagrant up
triggers vagrant to download the CoreOS image (if necessary) and (re)launch the instance
vagrant ssh
connects you to the virtual machine.
Configuration is stored in the directory so you can always return to this machine by executing vagrant ssh from the directory where the Vagrantfile was located.
- Get started using CoreOS
There is optional shared folder setup. You can try it out by adding a section to your Vagrantfile like this.
config.vm.network "private_network", ip: "172.17.8.150"
config.vm.synced_folder ".", "/home/core/share", id: "core", :nfs => true, :mount_options => ['nolock,vers=3,udp']
After a 'vagrant reload' you will be prompted for your local machine password.
When using the VirtualBox provider for Vagrant (the default), Ignition is used to provision the machine. This uses a special plugin that is
automatically installed when using the default Vagrantfile. The config options for the plugin are all prefixed with config.ignition
and can
be found in this Vagrantfile or in the README of the plugin
To get started, run curl https://discovery.etcd.io/new\?size\=X
, where X
is the number of servers in your cluster (if a size is not provided,
the default of 3 will be used). Then, replace <token>
in the cl.conf
file with the generated token from the curl command. More configuration may be added if necessary. Then, use config transpiler to write the Ignition config
to config.ign by running ct --platform=vagrant-virtualbox < cl.conf > config.ign
. To see all available configuration options, check out
the Container Linux Configuration Specification as well as the Container Linux Config Transpiler Getting Started Documentation.
There is also a basic Ignition file provided based on the Container Linux config that is included. To use that instead (not recommended),
copy config.ign.sample
to config.ign
and make any necessary modifications. Check out the Ignition Getting Started documentation
to learn about the available features.
When using the VMWare provider for Vagrant, the Vagrantfile will provision your CoreOS VM(s)
with coreos-cloudinit if a user-data
file is found in the project directory. coreos-cloudinit simplifies the
provisioning process through the use of a script or cloud-config document.
To get started, copy user-data.sample
to user-data
and make any necessary modifications.
Check out the coreos-cloudinit documentation to learn about the available features.
The Vagrantfile will parse a config.rb
file containing a set of options used to configure your CoreOS cluster.
See config.rb.sample
for more information.
Launching a CoreOS cluster on Vagrant is as simple as configuring $num_instances
in a config.rb
file to 3 (or more!) and running vagrant up
.
If using the VirtualBox provider (default), copy the make sure to create a config.ign
as described above so that the machines can be configured with
etcd and flanneld correctly. Also, make sure to provide a fresh discovery URL in your config.ign
file to bootstrap etcd in your cluster.
If you are using the VMWare provider, make sure you provide a fresh discovery URL in your user-data
if you wish to bootstrap etcd in your cluster.
CoreOS is a rolling release distribution and versions that are out of date will automatically update. If you want to start from the most up to date version you will need to make sure that you have the latest box file of CoreOS. You can do this by running
vagrant box update
By setting the $expose_docker_tcp
configuration value you can forward a local TCP port to docker on
each CoreOS machine that you launch. The first machine will be available on the port that you specify
and each additional machine will increment the port by 1.
Follow the Enable Remote API instructions to get the CoreOS VM setup to work with port forwarding.
Then you can then use the docker
command from your local shell by setting DOCKER_HOST
:
export DOCKER_HOST=tcp://localhost:2375
If vagrant fails to run successfully, first make sure that the latest version of the coreos-vagrant project has been downloaded, then run
vagrant destroy -f
to remove old machines, vagrant box update
to update the OS box, and vagrant plugin update vagrant-ignition
to
update the ignition plugin.