mirror of
https://codeberg.org/scottslowe/learning-tools.git
synced 2026-03-11 09:04:37 +00:00
Merge pull request #109 from scottslowe/k8s
Add environment for using kubeadm with Vagrant
This commit is contained in:
commit
0445d30798
5 changed files with 211 additions and 0 deletions
49
kubernetes/kubeadm-vagrant/README.md
Normal file
49
kubernetes/kubeadm-vagrant/README.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# Local Kubernetes Cluster with Kubeadm
|
||||
|
||||
These files were created to allow users to use Vagrant ([http://www.vagrantup.com](http://www.vagrantup.com)) quickly and relatively easily spin up a local Kubernetes cluster that is bootstrapped using `kubeadm`.
|
||||
|
||||
## Contents
|
||||
|
||||
* **ansible.cfg**: This Ansible configuration file configures Ansible for use with this Vagrant environment. No changes to this file should be necessary.
|
||||
|
||||
* **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.
|
||||
|
||||
* **provision.yml**: This Ansible playbook configures the VMs with the necessary package repositories, and installs the prerequisite packages. No changes to this file should 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 an Ubuntu 16.04 base box. Review `machines.yml` for some suggested boxes for Libvirt, VirtualBox, and the VMware virtualization platforms.
|
||||
|
||||
2. If the name of your Ubuntu 16.04 base box is _not_ one of the ones listed in `machines.yml`, edit `machines.yml` to supply the correct box name(s). This file has separate lines for each provider; be sure to edit the correct line for your provider ("lv" is for Libvirt, "vb" is for VirtualBox, and "vmw" is for VMware).
|
||||
|
||||
3. Place the files from the `kubernetes/kubeadm-vagrant` 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 `kubernetes/kubeadm-vagrant` folder.
|
||||
|
||||
4. Run `vagrant up` to instantiate 3 VMs---one manager and two nodes. All the VMs will be running Ubuntu 16.04.
|
||||
|
||||
5. Once Vagrant is finished, use `vagrant ssh master` to log into the manager VM.
|
||||
|
||||
6. While logged into "master", run the following command to start bootstrapping your Kubernetes cluster:
|
||||
|
||||
kubeadm init --apiserver-advertise-address 192.168.100.100 \
|
||||
--feature-gates CoreDNS=true DynamicKubeletConfig=true \
|
||||
SelfHosting=true --pod-network-cidr 172.24.0.0/16
|
||||
|
||||
7. When the command completes, follow the steps listed to install a configuration file for `kubelet`.
|
||||
|
||||
8. Copy the final output of the `kubeadm init` command, which includes a token, to the clipboard. You'll need it later.
|
||||
|
||||
9. Install a CNI plugin, such as Calico:
|
||||
|
||||
kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
|
||||
|
||||
10. Log out and run `vagrant ssh node-01` to log into "node-01". Run the `kubeadm join` command you copied from the output on "master".
|
||||
|
||||
11. Repeat step 10, but on "node-02".
|
||||
|
||||
Enjoy!
|
||||
84
kubernetes/kubeadm-vagrant/Vagrantfile
vendored
Normal file
84
kubernetes/kubeadm-vagrant/Vagrantfile
vendored
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
# -*- 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'
|
||||
|
||||
# Configure CPU & RAM per settings in machines.yml (Libvirt)
|
||||
srv.vm.provider 'libvirt' do |lv,override|
|
||||
lv.memory = machine['ram']
|
||||
lv.cpus = machine['vcpu']
|
||||
override.vm.box = machine['box']['lv']
|
||||
if machine['nested'] == true
|
||||
lv.nested = true
|
||||
end # if machine['nested']
|
||||
end # srv.vm.provider 'libvirt'
|
||||
end # config.vm.define
|
||||
end # machines.each
|
||||
|
||||
# Configure the VM using Ansible
|
||||
config.vm.provision 'ansible' do |ansible|
|
||||
ansible.playbook = 'ansible.yml'
|
||||
end # config.vm.provision
|
||||
end # Vagrant.configure
|
||||
5
kubernetes/kubeadm-vagrant/ansible.cfg
Normal file
5
kubernetes/kubeadm-vagrant/ansible.cfg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
[defaults]
|
||||
inventory = .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
|
||||
private_key_file = ~/.vagrant.d/insecure_private_key
|
||||
remote_user = vagrant
|
||||
host_key_checking = False
|
||||
42
kubernetes/kubeadm-vagrant/ansible.yml
Normal file
42
kubernetes/kubeadm-vagrant/ansible.yml
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
- hosts: "all"
|
||||
become: true
|
||||
remote_user: "vagrant"
|
||||
gather_facts: false
|
||||
|
||||
tasks:
|
||||
- name: "Install Python"
|
||||
raw: "apt-get -y -q install python"
|
||||
|
||||
- name: "Gather facts"
|
||||
setup:
|
||||
|
||||
- name: "Install Kubernetes APT Key"
|
||||
apt_key:
|
||||
url: "https://packages.cloud.google.com/apt/doc/apt-key.gpg"
|
||||
state: "present"
|
||||
tags:
|
||||
- manager
|
||||
- worker
|
||||
|
||||
- name: "Add Kubernetes repository for Ubuntu Xenial"
|
||||
apt_repository:
|
||||
repo: "deb http://apt.kubernetes.io/ kubernetes-xenial main"
|
||||
state: "present"
|
||||
update_cache: "yes"
|
||||
tags:
|
||||
- manager
|
||||
- worker
|
||||
|
||||
- name: "Install packages for Docker and Kubernetes"
|
||||
apt:
|
||||
name: "{{ item }}"
|
||||
state: "present"
|
||||
with_items:
|
||||
- "docker.io"
|
||||
- "kubectl"
|
||||
- "kubelet"
|
||||
- "kubeadm"
|
||||
tags:
|
||||
- manager
|
||||
- node
|
||||
31
kubernetes/kubeadm-vagrant/machines.yml
Normal file
31
kubernetes/kubeadm-vagrant/machines.yml
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
- box:
|
||||
vmw: "generic/ubuntu1604"
|
||||
vb: "ubuntu/xenial64"
|
||||
lv: "generic/ubuntu1604"
|
||||
name: "master"
|
||||
nics:
|
||||
- type: "private_network"
|
||||
ip_addr: "192.168.100.100"
|
||||
ram: "2048"
|
||||
vcpu: "1"
|
||||
- box:
|
||||
vmw: "generic/ubuntu1604"
|
||||
vb: "ubuntu/xenial64"
|
||||
lv: "generic/ubuntu1604"
|
||||
name: "node-01"
|
||||
nics:
|
||||
- type: "private_network"
|
||||
ip_addr: "192.168.100.101"
|
||||
ram: "2048"
|
||||
vcpu: "1"
|
||||
- box:
|
||||
vmw: "generic/ubuntu1604"
|
||||
vb: "ubuntu/xenial64"
|
||||
lv: "generic/ubuntu1604"
|
||||
name: "node-02"
|
||||
nics:
|
||||
- type: "private_network"
|
||||
ip_addr: "192.168.100.102"
|
||||
ram: "2048"
|
||||
vcpu: "1"
|
||||
Loading…
Reference in a new issue