k0s install with Ansible
April 30, 2022
I wanted to use Ansible to install k0s so that it could be easily replicated across multiple machines. There is a k0s Ansible playbook available at: https://docs.k0sproject.io/v1.21.0+k0s.0/examples/ansible-playbook/ I took this and modified it to my needs a bit.
I ended up with the following files, building on the Ansible setup from my previous blog post.
supported-k0s-version.json
This file was supplied as part of the repository and defined which version to install
{
"schemaVersion": 1,
"label": "supports k0s",
"message": "v1.22.4+k0s.1",
"color": "green"
}
install-k0s.yml
This playbook was used to install k0s onto the nodes defined in inventory.yml in my previous post.
---
- hosts: all
name: Download k0s on all nodes
become: yes
roles:
- role: download
tags: download
- role: prereq
tags: prereq
- hosts: initial_controller
gather_facts: yes
become: yes
name: Configure initial k0s control plane node
roles:
- role: k0s/initial_controller
tags: init
- hosts: controller
gather_facts: yes
become: yes
serial: 1
name: Configure k0s control plane nodes
roles:
- role: k0s/controller
tags: server
- hosts: worker
become: yes
name: Configure k0s worker nodes
roles:
- role: k0s/worker
tags: worker
This made use of the roles folder, which was also copied from the link above. I did have to change a timeout in the roles/k0s/initial_controller/tasks/main.yml
file, the delay in this following block was set to 15 seconds, and I was getting a timeout on setting up the worker join token. I tried 30, but that was no good and went for 60 in the end which succeeded.
- name: Wait for k8s apiserver
wait_for:
host: localhost
port: 6443
delay: 60
timeout: 180
remove-k0s.yml
Finally, I created a playbook to remove k0s from the nodes:
---
- hosts: all
gather_facts: yes
become: yes
roles:
- role: reset
Running Playbooks
These playbooks can be run as follows. To install k0s on the cluster:
$ ansible-playbook install-k0s.yml --ask-become-pass
To remove it again
$ ansible-playbook remove-k0s.yml --ask-become-pass