In this post we will deploy Kubernetes with k3s to a 6 node Raspberry Pi Cluster using Ansible.
Im using the code from github.com/rancher/k3s-ansible and we will be using the instructions from their repository.
I have forked that repository for myself which is available at github.com/ruanbekker/k3s-ansible if you want to see what I've changed for my setup.
First clone the repository:
$ git clone https://github.com/rancher/k3s-ansible
$ cd k3s-ansible
Copy their sample directory to something of your own:
$ cp -R inventory/sample inventory/my-cluster
Then edit the inventory/my-cluster/hosts.ini
file and populate your node information for the master and agent nodes.
For my case I'm using version v1.18.9+k3s1
, using the username pi
and extra server args, so I edited inventory/my-cluster/group_vars/all.yml
and populated the following:
k3s_version: v1.18.9+k3s1
ansible_user: pi
ansible_ssh_private_key_file: ~/.ssh/id_rsa
ansible_python_interpreter: /usr/bin/python3
systemd_dir: /etc/systemd/system
master_ip: "{{ hostvars[groups['master'][0]]['ansible_host'] | default(groups['master'][0]) }}"
extra_server_args: "--tls-san k3s.mydomain.com --write-kubeconfig-mode 644"
extra_agent_args: ""
Then deploy k3s to your cluster using ansible:
$ ansible-playbook site.yml -i inventory/my-cluster/hosts.ini
Copy the config to your workstation:
$ scp pi@k3s-master-ip:~/.kube/config ~/.kube/config
Then test it out to view the nodes:
$ kubectl get nodes --output wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
rpi-07 Ready <none> 7m18s v1.18.9+k3s1 192.168.0.121 <none> Raspbian GNU/Linux 10 (buster) 5.4.51-v7l+ containerd://1.3.3-k3s2
rpi-05 Ready master 7m44s v1.18.9+k3s1 192.168.0.119 <none> Raspbian GNU/Linux 10 (buster) 5.4.51-v7l+ containerd://1.3.3-k3s2
rpi-02 Ready <none> 6m53s v1.18.9+k3s1 192.168.0.116 <none> Raspbian GNU/Linux 10 (buster) 5.4.51-v7+ containerd://1.3.3-k3s2
rpi-03 Ready <none> 6m50s v1.18.9+k3s1 192.168.0.117 <none> Raspbian GNU/Linux 10 (buster) 5.4.51-v7+ containerd://1.3.3-k3s2
rpi-06 Ready <none> 7m17s v1.18.9+k3s1 192.168.0.120 <none> Raspbian GNU/Linux 10 (buster) 5.4.51-v7l+ containerd://1.3.3-k3s2
rpi-01 Ready <none> 6m46s v1.18.9+k3s1 192.168.0.115 <none> Raspbian GNU/Linux 10 (buster) 5.4.51-v7+ containerd://1.3.3-k3s2