Provision nodes for a microk8s cluster in openstack
Find a file
2024-01-16 16:12:39 +01:00
chrony.conf Add cloudconfig and fix typo in snap volume definition. 2024-01-15 20:28:12 +01:00
iac_vars.yaml Futureproof securitygroup logic. 2024-01-16 07:40:38 +01:00
kubenodes-user.yaml.j2 Add workarount to attach volumes in an determined order 2024-01-16 09:00:03 +01:00
kubenodes.yaml Add workarount to attach volumes in an determined order 2024-01-16 09:00:03 +01:00
main.yaml Define number of nodes i varsfile 2024-01-15 22:42:19 +01:00
README.md Add section on how to install requirements and how to apply the playbook 2024-01-16 16:12:39 +01:00
securitygrouptasks.yaml Add security group to allow access between kubernetes nodes 2024-01-15 09:33:52 +01:00

Matrixtest-IaC-Ansible

This ansible playbook creates a three node cluster in openstack.

In this case a microk8s cluster.

The following tasks is executed by this playbook.

  • Creates a custom security group with rules to accept traffic between the nodes.
  • Create an os volume from the debian-12 image.
  • Create an snap volume to be used as an LVM volume for easy resize and mounted on /lib/snap.
  • Query all security groups in the project.
  • Create an network port for each node and use a selection of the queried security groups.
  • Create an instance with os volume, snap volume and port attached and a custom cloudinit config.

Install ansible on a host with access to the openstack api endpoints. Run "ansible-galaxy -vv collection install openstack.cloud" to install the ansible openstack.cloud plugin. Auth is provided to the playbook by environment variables. Source the rc file of app credentials for the desired openstack project. To apply the config run "ansible-playbook main.yaml"

Cloudinit config.

Cloudinit does the following tasks.

  • Install tools for LVM2,XFS and the Chronyd ntp sevice.
  • Configure Chronyd to use netnod.se as a source.
  • Configure a lvol_snap LVM volume and format it with XFS.
  • Add a mount record of the lvm volume in fstab and verifies it.

Expansion of volume by online resize

To expand the attached snap volume first query the api version of the volume endpoint from the management node and set the new size of the volume.

  • curl -L https://v2.api.dco.safedc.net:8776/ | jq '.versions[1].version' # Returns 3.60
  • openstack --os-volume-api-version 3.60 volume set --size 30 6f1a238d-f746-4604-92c9-0985ad4b83fd

From inside the instance run the following commands.

  • sudo pvresize /dev/sdb
  • sudo lvresize -l +100%FREE snapvg/lvol_snap
  • sudo xfs_growfs /dev/snapvg/lvol_snap

Now we have expanded the mounted device with zero downtime.