diff --git a/.gitignore b/.gitignore index 1e69553255..5a9f2a3e8b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ .idea/ **/_partials.tpl **/_globals.tpl +dev/.vagrant +dev/*.log diff --git a/dev/README.md b/dev/README.md new file mode 100644 index 0000000000..2e5c0acf45 --- /dev/null +++ b/dev/README.md @@ -0,0 +1,43 @@ +# Development Environment Setup + +## Requirements + + * Hardware + * 16GB RAM + * 32GB HDD Space + * Software + * Vagrant + * VirtualBox + * Kubectl + * Helm + * Git + +## Deploy + + * Make sure you are in the directory containing the Vagrantfile before running the following commands. + +### Create VM + +``` bash +vagrant up --provider virtualbox +``` + +### Deploy NFS Provisioner for development PVCs + +``` bash +vagrant ssh --command "sudo docker exec kubeadm-aio kubectl create -R -f /opt/nfs-provisioner/" +``` + +### Setup Clients and deploy Helm's tiller + +``` bash +./setup-dev-host.sh +``` + +### Label VM node(s) for OpenStack-Helm Deployment + +``` bash +kubectl label nodes openstack-control-plane=enabled --all --namespace=openstack +kubectl label nodes openvswitch=enabled --all --namespace=openstack +kubectl label nodes openstack-compute-node=enabled --all --namespace=openstack +``` diff --git a/dev/Vagrantfile b/dev/Vagrantfile index 6ce8d8429b..7ed0c604ac 100644 --- a/dev/Vagrantfile +++ b/dev/Vagrantfile @@ -1,5 +1,14 @@ # -*- mode: ruby -*- # vi: set ft=ruby : +# NOTE: Variable overrides are in ./config.rb +require "yaml" +require "fileutils" + +# Use a variable file for overrides: +CONFIG = File.expand_path("config.rb") +if File.exist?(CONFIG) + require CONFIG +end # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for @@ -19,52 +28,44 @@ Vagrant.configure("2") do |config| # `vagrant box outdated`. This is not recommended. # config.vm.box_check_update = false - # Create a forwarded port mapping which allows access to a specific port - # within the machine from a port on the host machine. In the example below, - # accessing "localhost:8080" will access port 80 on the guest machine. - config.vm.network "forwarded_port", guest: 6443, host: 8443 - # Create a private network, which allows host-only access to the machine # using a specific IP. - # config.vm.network "private_network", ip: "192.168.33.10" - - # Create a public network, which generally matched to bridged network. - # Bridged networks make the machine appear as another physical device on - # your network. - # config.vm.network "public_network" + config.vm.network "private_network", ip: "192.168.33.10" # Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. - # config.vm.synced_folder "../data", "/vagrant_data" + config.vm.synced_folder "../", "/opt/openstack-helm" # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options. - # Example for VirtualBox: - # config.vm.provider "virtualbox" do |vb| # Display the VirtualBox GUI when booting the machine vb.gui = true # Customize the amount of memory on the VM: - vb.memory = "8192" + vb.memory = $ram + + # Customize the number of vCPUs in the VM: + vb.cpus = $vcpu_cores + + # Set the size of the VM's root disk: + unless File.exist?('.vagrant/machines/default/virtualbox/openstack-helm-storage.vdi') + vb.customize ['createhd', '--filename', '.vagrant/machines/default/virtualbox/openstack-helm-storage', '--size', $docker_disk] + end + vb.customize ['storageattach', :id, '--storagectl', 'SCSI', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', '.vagrant/machines/default/virtualbox/openstack-helm-storage.vdi'] + end - # - # View the documentation for the provider you are using for more - # information on available options. - # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies - # such as FTP and Heroku are also available. See the documentation at - # https://docs.vagrantup.com/v2/push/atlas.html for more information. - # config.push.define "atlas" do |push| - # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" - # end - - # Enable provisioning with a shell script. Additional provisioners such as - # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the - # documentation for more information about their specific syntax and use. + # Enable provisioning with a shell script. config.vm.provision "shell", inline: <<-SHELL + # Setup docker storage + mkfs.xfs /dev/disk/by-path/pci-0000\:00\:14.0-scsi-0\:0\:2\:0 -f -L docker-srg + mkdir -p /var/lib/docker + echo "LABEL=docker-srg /var/lib/docker xfs defaults 0 0" >> /etc/fstab + mount -a + apt-get update apt-get install -y \ docker.io \ @@ -85,6 +86,7 @@ Vagrant.configure("2") do |config| --volume=/etc/kubernetes:/etc/kubernetes:rw \ --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro \ --volume=/var/run/docker.sock:/run/docker.sock \ + --env KUBE_BIND_DEV=enp0s8 \ --env KUBELET_CONTAINER=docker.io/port/kubeadm-aio:latest \ docker.io/port/kubeadm-aio:latest SHELL diff --git a/dev/config.rb b/dev/config.rb new file mode 100644 index 0000000000..3547aca7b8 --- /dev/null +++ b/dev/config.rb @@ -0,0 +1,4 @@ +# VM Specs +$docker_disk = 20480 +$vcpu_cores = 4 +$ram = 8192 diff --git a/dev/setup-dev-host.sh b/dev/setup-dev-host.sh new file mode 100755 index 0000000000..29f9ec90d9 --- /dev/null +++ b/dev/setup-dev-host.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -e +# Setting up kubectl creds +mkdir -p ${HOME}/.kube +if [ -f ${HOME}/.kube/config ]; then + echo "Previous kube config found, backing it up" + mv -v ${HOME}/.kube/config ${HOME}/.kube/config.$(date "+%F-%T") +fi +echo "Getting kubeconfig from kube1" +vagrant ssh default -c "sudo cat /etc/kubernetes/admin.conf" > ${HOME}/.kube/config + +# Setting up helm client if present +if which helm 2>/dev/null; then + helm init +fi + +echo "clients should now be ready to access the Kubernetes cluster"