Skip to content

Instantly share code, notes, and snippets.

@mvlsqz
Last active August 2, 2018 03:01
Show Gist options
  • Save mvlsqz/399401b3af4355867ff71bccc1025ca6 to your computer and use it in GitHub Desktop.
Save mvlsqz/399401b3af4355867ff71bccc1025ca6 to your computer and use it in GitHub Desktop.
swarm cluster on virtualbox

Required software

Vagrant

Virtualbox

Run the master

vagrant up master

At the end this will return the tokens to add workers or managers to the swarm cluster

Run the workers

vagrant up worker1
vagrant up worker2

ssh connection to the nodes

To get connected to the nodes, should use vagrant ssh command like:

vagrant ssh [worker1|master]
---
- hosts: all
become: yes
become_method: sudo
gather_facts: False
pre_tasks:
- setup:
gather_subset: 'network'
tasks:
- name: is docker already installed
shell: >
docker info
register: docker_info
changed_when: false
ignore_errors: true
failed_when: false
- name: installs docker and setup repositories
shell: >
curl -fsSL https://get.docker.com/ | sh
when:
- docker_info.stdout == ""
args:
warn: false
- name: enable docker
systemd:
name: docker
enabled: yes
state: reloaded
when:
- docker_info.stdout == ""
- name: adding user to docker
user:
name: vagrant
groups: docker
append: yes
- name: determine swarm status
shell: >
docker info | egrep '^Swarm: '
register: swarm_status
when:
- ansible_fqdn == 'manager.test.lan'
changed_when: false
- name: enabling swarm
shell: >
docker swarm init --advertise-addr {{ ansible_eth1['ipv4']['address'] }}
when:
- ansible_fqdn == "manager.test.lan"
- '"inactive" in swarm_status.stdout'
- name: looking for the swarm worker key
shell: >
docker swarm join-token worker
register: swarm_worker_key
when: ansible_fqdn == 'manager.test.lan'
changed_when: false
- name: looking for the swarm manager key
shell: >
docker swarm join-token manager
register: swarm_manager_key
when: ansible_fqdn == 'manager.test.lan'
changed_when: false
- name: Here is the swarm worker key
debug: msg="{{ swarm_worker_key.stdout_lines }}"
when: ansible_fqdn == 'manager.test.lan'
- name: Here is the swarm manager key
debug: msg="{{ swarm_manager_key.stdout_lines }}"
when: ansible_fqdn == 'manager.test.lan'
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure('2') do |config|
config.vm.box = 'centos/7'
config.vm.define 'manager' do |manager|
manager.vm.network 'private_network', ip: '10.10.10.10'
manager.vm.host_name = 'manager.test.lan'
end
%w[worker1 worker2 worker3].each_with_index do |worker, index|
config.vm.define worker, autostart: false do |wkr|
wkr.vm.network 'private_network', ip: "10.10.10.#{index + 2}"
wkr.vm.host_name = "worker#{index + 1}.test.lan"
end
end
config.vm.provider :virtualbox do |v|
v.customize ['modifyvm', :id, '--memory', 1024]
end
config.vm.provision :ansible_local do |ansible|
ansible.playbook = 'playbook.yml'
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment