Add files to support learning Docker Swarm Mode on CoreOS

Add Vagrantfile, external YAML data file, and README.md for environment used to learn/experiment with Docker Swarm Mode on CoreOS. This environment also serves as early prototyping for future AWS-based environment.

Signed-off-by: Scott Lowe <scott.lowe@scottlowe.org>
This commit is contained in:
Scott Lowe 2017-03-13 10:00:37 -06:00
parent f7caa9d798
commit afd339df33
No known key found for this signature in database
GPG key ID: 949F43F6E6C11780
3 changed files with 157 additions and 0 deletions

View file

@ -0,0 +1,42 @@
# Docker Swarm Mode with CoreOS
These files were created to allow users to use Vagrant ([http://www.vagrantup.com](http://www.vagrantup.com)) quickly and relatively easily test Docker "Swarm Mode" using CoreOS Stable. This environment was tested using Vagrant 1.9.1 with VirtualBox 5.1.14, but should work with Vagrant's VMware provider as well.
## Contents
* **machines.yml**: This YAML file contains a list of VM definitions. It is referenced by `Vagrantfile` when Vagrant instantiates the VMs. You will need to edit this file to provide the correct Vagrant box names. Other edits should not be necessary.
* **README.md**: This file you're currently reading.
* **Vagrantfile**: This file is used by Vagrant to spin up the virtual machines. This file is fairly extensively commented to help explain what's happening. You should be able to use this file unchanged; all the VM configuration options are stored outside this file.
## Instructions
These instructions assume you've already installed your virtualization provider (VMware Fusion/Workstation or VirtualBox), Vagrant, and any necessary plugins (such as the Vagrant VMware plugin). Please refer to the documentation for those products for more information on installation or configuration.
1. Use `vagrant box add` to install the CoreOS Vagrant box. The following URLs can be used with the `vagrant box add` command to install the CoreOS Vagrant box:
For VirtualBox: [https://stable.release.core-os.net/amd64-usr/current/coreos_production_vagrant.json](https://stable.release.core-os.net/amd64-usr/current/coreos_production_vagrant.json)
For VMware Fusion: [https://stable.release.core-os.net/amd64-usr/current/coreos_production_vagrant_vmware_fusion.json](https://stable.release.core-os.net/amd64-usr/current/coreos_production_vagrant_vmware_fusion.json)
This should install a Vagrant box named "coreos-stable". The `machines.yml` file in this environment assumes this is the name of the box; if you are using a different name, you'll need to edit `machines.yml` accordingly.
2. Place the files from the `docker/coreos-swarm-mode` directory of this GitHub repository into a directory on your local system. You can clone the entire "learning-tools" repository (using `git clone`) or just download the specific files from the the `docker/coreos-swarm-mode` folder.
3. As noted in step #1, if the name of your CoreOS Vagrant box is _not_ "coreos-stable", edit `machines.yml` to supply the correct box name.
4. Run `vagrant up` to instantiate 4 VMs---one manager and three workers. All the VMs will be running CoreOS.
5. Once Vagrant is finished, use `vagrant ssh manager` to log into the manager VM.
6. While logged into the manager VM, run `docker swarm init --advertise-addr 192.168.100.100` to create a new swarm. If you have edited the IP addresses supplied in `machines.yml`, then you'll need to adjust the command accordingly to use the IP address supplied for the manager VM.
The output of that command will provide a command-line to use to join worker nodes to the swarm. Copy and paste this output; you'll need it shortly.
7. Log out of the VM and use `vagrant ssh worker-01` to log in to the first worker VM. Paste the output of the command in step #6 to have the worker join the swarm.
8. Repeat step #7 for the remaining worker nodes.
9. Use `vagrant ssh manager` to log back into the manager VM. Run `docker node ls` to show the Docker Engine instances participating in the swarm.
Enjoy!

69
docker/coreos-swarm-mode/Vagrantfile vendored Normal file
View file

@ -0,0 +1,69 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Specify minimum Vagrant version and Vagrant API version
Vagrant.require_version '>= 1.6.0'
VAGRANTFILE_API_VERSION = '2'
# Require 'yaml' module
require 'yaml'
# Read YAML file with VM details (box, CPU, RAM, IP addresses)
# Edit machines.yml to change VM configuration details
machines = YAML.load_file(File.join(File.dirname(__FILE__), 'machines.yml'))
# Create and configure the VMs
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Always use Vagrant's default insecure key
config.ssh.insert_key = false
# Iterate through entries in YAML file to create VMs
machines.each do |machine|
# Configure the VMs per details in machines.yml
config.vm.define machine['name'] do |srv|
# Don't check for box updates
srv.vm.box_check_update = false
# Specify the hostname of the VM
srv.vm.hostname = machine['name']
# Specify the Vagrant box to use (use VMware box by default)
srv.vm.box = machine['box']['vmw']
# Configure default synced folder (disable by default)
if machine['sync_disabled'] != nil
srv.vm.synced_folder '.', '/vagrant', disabled: machine['sync_disabled']
else
srv.vm.synced_folder '.', '/vagrant', disabled: true
end #if machine['sync_disabled']
# Iterate through networks as per settings in machines.yml
machine['nics'].each do |net|
if net['ip_addr'] == 'dhcp'
srv.vm.network net['type'], type: net['ip_addr']
else
srv.vm.network net['type'], ip: net['ip_addr']
end # if net['ip_addr']
end # machine['nics'].each
# Configure CPU & RAM per settings in machines.yml (Fusion)
srv.vm.provider 'vmware_fusion' do |vmw|
vmw.vmx['memsize'] = machine['ram']
vmw.vmx['numvcpus'] = machine['vcpu']
if machine['nested'] == true
vmw.vmx['vhv.enable'] = 'TRUE'
end #if machine['nested']
end # srv.vm.provider 'vmware_fusion'
# Configure CPU & RAM per settings in machines.yml (VirtualBox)
srv.vm.provider 'virtualbox' do |vb, override|
vb.memory = machine['ram']
vb.cpus = machine['vcpu']
override.vm.box = machine['box']['vb']
end # srv.vm.provider 'virtualbox'
end # config.vm.define
end # machines.each
end # Vagrant.configure

View file

@ -0,0 +1,46 @@
---
- box:
vmw: "coreos-stable"
vb: "coreos-stable"
name: "manager"
nics:
- type: "private_network"
ip_addr: "192.168.100.100"
ram: "512"
vcpu: "1"
- box:
vmw: "coreos-stable"
vb: "coreos-stable"
name: "worker-01"
nics:
- type: "private_network"
ip_addr: "192.168.100.101"
ram: "512"
vcpu: "1"
- box:
vmw: "coreos-stable"
vb: "coreos-stable"
name: "worker-02"
nics:
- type: "private_network"
ip_addr: "192.168.100.102"
ram: "512"
vcpu: "1"
- box:
vmw: "coreos-stable"
vb: "coreos-stable"
name: "worker-03"
nics:
- type: "private_network"
ip_addr: "192.168.100.103"
ram: "512"
vcpu: "1"
- box:
vmw: "coreos-stable"
vb: "coreos-stable"
name: "worker-04"
nics:
- type: "private_network"
ip_addr: "192.168.100.104"
ram: "512"
vcpu: "1"