Build a Kubernetes cluster using kubeadm via Ansible.
Branch: master
Clone or download

Kubeadm Ansible Playbook

Build a Kubernetes cluster using Ansible with kubeadm. The goal is easily install a Kubernetes cluster on machines running:

  • Ubuntu 16.04
  • CentOS 7
  • Debian 9

System requirements:

  • Deployment environment must have Ansible 2.4.0+
  • Master and nodes must have passwordless SSH access


Add the system information gathered above into a file called hosts.ini. For example:




If you're working with ubuntu, add the following properties to each host ansible_python_interpreter='python3':

[master] ansible_python_interpreter='python3'

192.16.35.[10:11] ansible_python_interpreter='python3'


Before continuing, edit group_vars/all.yml to your specified configuration.

For example, I choose to run flannel instead of calico, and thus:

# Network implementation('flannel', 'calico')
network: flannel

Note: Depending on your setup, you may need to modify cni_opts to an available network interface. By default, kubeadm-ansible uses eth1. Your default interface may be eth0.

After going through the setup, run the site.yaml playbook:

$ ansible-playbook site.yaml
==> master1: TASK [addon : Create Kubernetes dashboard deployment] **************************
==> master1: changed: [ ->]
==> master1:
==> master1: PLAY RECAP *********************************************************************
==> master1:               : ok=18   changed=14   unreachable=0    failed=0
==> master1:               : ok=18   changed=14   unreachable=0    failed=0
==> master1:               : ok=34   changed=29   unreachable=0    failed=0

Download the admin.conf from the master node:

$ scp k8s@k8s-master:/etc/kubernetes/admin.conf .

Verify cluster is fully running using kubectl:

$ export KUBECONFIG=~/admin.conf
$ kubectl get node
master1   Ready     22m       v1.6.3
node1     Ready     20m       v1.6.3
node2     Ready     20m       v1.6.3

$ kubectl get po -n kube-system
NAME                                    READY     STATUS    RESTARTS   AGE
etcd-master1                            1/1       Running   0          23m

Resetting the environment

Finally, reset all kubeadm installed state using reset-site.yaml playbook:

$ ansible-playbook reset-site.yaml