The best option is to start with the Kubernetes Getting started section.
For a cluster you're managing yourself, the officially supported tool for deploying Kubernetes is kubeadm.
Check this link - Bootstrapping clusters with kubeadm. This guide describes all the necessary steps:
- Installing kubeadm
- Troubleshooting kubeadm
- Creating a cluster with kubeadm
- Customizing components with the kubeadm API
- Options for Highly Available Topology
- Creating Highly Available Clusters with kubeadm
- Set up a High Availability etcd Cluster with kubeadm
- Configuring each kubelet in your cluster using kubeadm
- Dual-stack support with kubeadm
Also, check this link - Production environment:
A production-quality Kubernetes cluster requires planning and preparation. If your Kubernetes cluster is to run critical workloads, it must be configured to be resilient. This page explains steps you can take to set up a production-ready cluster, or to promote an existing cluster for production use.
There is also Kubespray:
Kubespray is a composition of Ansible playbooks, inventory, provisioning tools, and domain knowledge for generic OS/Kubernetes clusters configuration management tasks.
Kubespray vs Kubeadm
Kubeadm provides domain Knowledge of Kubernetes clusters' life cycle management, including self-hosted layouts, dynamic discovery services and so on. Had it belonged to the new operators world, it may have been named a "Kubernetes cluster operator". Kubespray however, does generic configuration management tasks from the "OS operators" ansible world, plus some initial K8s clustering (with networking plugins included) and control plane bootstrapping.
Kubespray has started using kubeadm internally for cluster creation since v2.3 in order to consume life cycle management domain knowledge from it and offload generic OS configuration things from it, which hopefully benefits both sides.