There are many ways to install Kubernetes and the obvious starting point is the setup section in the official documentation. But let's be honest, that's a little bit overwhelming, isn't it? This post should give you a high-level overview of what the different approaches are and which one might be the best for your situation. Note that I won't consider local/development setups here, such as Minikube or Minishift. Instead, we're talking about setting up Kubernetes for production usage.

A few questions to consider upfront:

  • Is your target environment bare metal, on-premises, public cloud?
  • Do you want to have fine-grained control over the install process or more of "push-button-do-it-for-me" install?
  • What's your budget (both time and money)?

Really, it's a spectrum of options you're looking at and taking into account the above questions may look somewhat like the following:

Let's now have a closer look at the different groups and examples of concrete methods and tools:

  • Manual means that you manually set up everything from the networking bits over downloading, configuring and launching components such as etcd or kube-apiserver. You've got full control over what goes where, but it might take you some time and it's error-prone. The ultimate reference in this area is Kelsey Hightower's Kubernetes The Hard Way (KTHW).
  • Installer are CLI tools that leverage templates and/or automation tools such as Terraform and Ansible. You typically have a lot control over what is going on, but less than in the manual approach. Examples include:
    • OpenCredo's Kubernetes from scratch to AWS with Terraform and Ansible part 1 and 2
    • kubeadm (think of a building block for other installers)
    • kops, mainly AWS
    • kubicorn
    • kubespray (Ansible-based, both bare-metal and cloud)
    • OpenShift advanced install based on Ansible
  • Hosted effectively means little to no installation effort on your end. For example:

To be clear, this is not a comprehensive listing of all the available options. Some offerings, such as OpenShift Dedicated, just don't fit in any of the categories. Further, the installation realm is moving so fast that whatever I write today could be obsolete tomorrow. For example, at GopherCon 2017, less than a month ago, at time of writing, kubicorn was open-sourced and I got involved in it, because it is a promising and very flexible approach. Another example, reportedly, AWS now also plans to offer its own hosted Kubernetes offering.
Who knows what install options will be available by end of year, so I'd suggest keeping your eyes peeled and your mind open.

Last but not least: In the Kubernetes SIG Cluster Lifecycle we've recently launched a task force that is looking into the adoption of kubeadm and if you're interested, you're more than welcome to chime in here as well.