Workload Storage

Some workloads need different volumes with different storage capacities to fit their components needs. These volumes are stored in LVM Logical Volumes.

Volumes

Considering all storage volumes required for workloads running in the cluster, create a configuration as below:

metalk8s_lvm_drives_vg_metalk8s: ['/dev/vdb']
metalk8s_lvm_lvs_vg_metalk8s:
    lv01:
        size: 52G
    lv02:
        size: 52G
    lv03:
        size: 52G
    lv04:
        size: 11G
    lv05:
        size: 11G
    lv06:
        size: 11G
    lv07:
        size: 5G
    lv08:
        size: 5G

This configuration can be set on a whole Ansible group of nodes (see Group Variables), or on a specific host (see Host Variables).

Resize LVs

Volumes can be resized (one or several at once). Change the volume size value to a higher one and run:

ansible-playbook -b -i <inventory>/hosts -t storage playbooks/deploy.yml

Configuration layout

The configuration can be applied to groups and hosts in two different ways.

Note

Configuration files are merged for every created host or group.

To apply a configuration, create a YAML file in either (or both) group_vars and host_vars with the group name associated, or create a folder in group_vars or host_vars with several YAML files. The ansible-playbook above must be run.

Add extra LVs

It is possible to configure LVM drives and volumes for one node only.

Exemplified below, a default storage configuration (group_vars/kube-node/storage.yml):

# metalk8s_lvm_vgs = ['vg_metalk8s']
metalk8s_lvm_drives_vg_metalk8s: ['/dev/vdb']
metalk8s_lvm_lvs_vg_metalk8s:
  lv01:
      size: 52G
  lv02:
      size: 52G
  lv03:
      size: 52G

In host_vars, create a new file (host_vars/node_1.yml):

metalk8s_lvm_vgs = ['vg_metalk8s', 'mynewvg']
metalk8s_lvm_drives_mynewvg: ['/dev/vdc']
metalk8s_lvm_lvs_vg_metalk8s:
  lv01:
     size: 52G
metalk8s_lvm_lvs_mynewvg:
  lv01:
     size: 1T

Except node_1, every machine has a single vg_metalk8s with six logical volumes (three specified, three default). On node_1, there are two volume groups (vg_metalk8s and mynewvg) with four logical volumes on vg_metalk8s (one specified, three default) and one logical volume on mynewvg.

Note

As the volume group name becomes a prefix, several LVs can have the same name.