Kubernetes Cluster w/ Vagrant, conjure-up, juju on AWS

Kubernetes Cluster w/ Vagrant, conjure-up, juju on AWS

This guide is for those looking to configure a K8s clusters for testing purposes on AWS. It leverages Vagrant/Ubuntu/conjure-up/juju to provision a cluster on nearly any cloud provider in 10 minutes. This guide is specific to using AWSCLI and therefore AWS to configure the cluster. This cluster spins up 3 total EC2 instances within your account. It also configures your K8s cluster's IAM Roles, VPC, and Security Groups automatically.

Detailed info on conjure-up: https://conjure-up.io/.

Detailed info on juju: https://jaas.ai/.


VirtualBox: https://www.virtualbox.org/wiki/Downloads

Vagrant: https://www.vagrantup.com/downloads.html

AWS Account w/ a valid payment method

Create a directory for your Vagrant VM
cd to the created directory

vagrant init ubuntu/xenial64
vagrant box add ubuntu/xenial64

Open your vagrant file with a .txt editor. Uncomment line 26, and change ports: config.vm.network "forwarded_port", guest: 8001, host: 8001

run your virtualbox vm:

vagrant up --provider virtualbox

ssh to the local ubuntu vagrant vm:

vagrant ssh

run updates:

sudo apt-get update

install/configure ntp:

sudo apt-get install ntp ntpdate ntpstat
sudo service ntp stop
sudo ntpdate time.nist.gov
sudo service ntp start

install AWSCLI:

sudo apt-get install python3-pip
pip3 install awscli --user
aws configure

-access key id
-secret access key
-specify region (us-east-1)
-output format (table)

test connectivity:

aws ec2 describe-regions

install/configure conjure-up:

sudo snap install conjure-up --classic
conjure-up kubernetes-core

  • Deploy New Self-Hosted Controller
  • Use flannel as your Network Plugin
  • Leave sudo password empty
  • Wait for the deployment to complete, change instance types if you want to lower cost per/hr.

run juju status and ensure you see an active state for all apps/units listed.

Congrats, you've setup a full k8s cluster on EC2!

If for any reason you need to tear down your cluster, just run the following:

juju switch
juju destroy-controller switchname --destroy-all-models

Check that your instances in the AWS console now show as terminated.

You can spin a fresh cluster back up at anytime by running:

conjure-up kubernetes-core

Banner Art by: https://www.deviantart.com/grenadekitten