Using Minikube (Kubernetes) for local Node.js development
$echo `whoami`



We have a problem

Developer Excuses
-
My code is compiling
-
That person doesn't work here anymore
-
That's a feature
-
That's the way we've always done it
Best developer excuse

Just one problem..


Something helped with that
-
Isolate apps in containers
-
Package deps in your app
-
Run, build, ship anywhere
-
No more, it works on my machine

Wait, no my workflow is....
-
Make app
-
Blame devops
-
Profit

New problem
-
Build your app
-
Run local and integration tests
-
Ops team uses tool to publish new docker image
-
Ops team comes back and says it doesn't work

Kubernetes (k8s) is an open-source system for automating deployment, scaling, and management of containerized applications.
Another problem
Difficult to set up
- kube-up.sh (deprecated)
- kops
- kube-aws (CoreOS)
Commitment to cloud provider
Google Cloud
AWS
Microsoft
I can use docker locally, can I use Kubernetes locally?



Minikube is a tool that makes it easy to run Kubernetes locally
- Single-node Kubernetes cluster inside a VM on your computer
- Allows you to use kubectl to access cluster for development purposes
- Test strategies on you computer instead of in the cloud
-
kubectl
- https://kubernetes.io/docs/tasks/tools/install-kubectl/
-
macOS
- xhyve driver, VirtualBox or VMware Fusion
-
Linux
- VirtualBox or KVM
-
Windows
- VirtualBox or Hyper-V
- VT-x/AMD-v virtualization must be enabled in BIOS
- Internet connection on first run
What you will need
-
macOS
- brew install minikube
-
Linux
- curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin
-
Windows
- https://storage.googleapis.com/minikube/releases/latest/minikube-windows-amd64.exe
- rename file to minikube.exe and add it to your path
Installing Minikube
-
It can’t expose your application on type LoadBalancer
- – Kubernetes allows you to do this with the cloud provider but not locally, so you must expose your application with NODEPORT
- It can not help you convince your boss that you need a raise because of your new devOPS skills
- Use upgraded docker version outside of what minikube provides version 0.21 uses docker version 1.12 (Server)
What Minikube can't do

Project that I will demonstrate
Fixit Vancouver
https://github.com/troy0820/fixit-vancouver
This is what I did before we start this demo….
- I’m using minikube version 0.21
- minikube start
- minikube docker-env
- eval $(minikube docker-env)
- Downloaded images that I need ahead of time
- Using local docker images to use in your Minikube cluster
- Deploying those local images to your Minikube cluster
- Making replicaSets, healthChecks, autoscaling, dashboard, minikube services
- Using Ingress to expose multiple applications without using multiple LoadBalancers, in our case NODEPORTS
Demo Time
deck
By Troy M. Connor
deck
- 1,213