# Setting up Kubernetes

- How did we set up these Kubernetes clusters that we're using?

--

- We used `kubeadm` on "fresh" EC2 instances with Ubuntu 16.04 LTS

    1. Install Docker

    2. Install Kubernetes packages

    3. Run `kubeadm init` on the master node

    4. Set up Weave (the overlay network)
       <br/>
       (that step is just one `kubectl apply` command; discussed later)

    5. Run `kubeadm join` on the other nodes (with the token produced by `kubeadm init`)

    6. Copy the configuration file generated by `kubeadm init`

---

## `kubeadm` drawbacks

- Doesn't set up Docker or any other container engine

- Doesn't set up the overlay network

- Scripting is complex
  <br/>
  (because extracting the token requires advanced `kubectl` commands)

- Doesn't set up multi-master (no high availability)

--

- It's still twice as many steps as setting up a Swarm cluster 😕

---

## Other deployment options

- If you are on Google Cloud:
  [GKE](https://cloud.google.com/container-engine/)

  Empirically the best Kubernetes deployment out there

- If you are on AWS:
  [kops](https://github.com/kubernetes/kops)

  ... But with AWS re:invent just around the corner, expect some changes

- On a local machine:
  [minikube](https://kubernetes.io/docs/getting-started-guides/minikube/),
  [kubespawn](https://github.com/kinvolk/kube-spawn),
  [Docker4Mac (coming soon)](https://beta.docker.com/)

- If you want something customizable:
  [kubicorn](https://github.com/kris-nova/kubicorn)

  Probably the closest to a multi-cloud/hybrid solution so far, but in development

- Also, many commercial options!
