Class Reconciler

All Implemented Interfaces:
Iterable<ComponentType>, Channel, ComponentType, Eligible, Manager

public class Reconciler extends Component
Adapts Kubenetes resources for instances of the Runner application (the VMs) to changes in VM definitions (the CRs).

In particular, the reconciler generates and updates:

  • A PVC for storage used by all VMs as a common repository for CDROM images.

  • A ConfigMap that defines the configuration file for the runner.

  • A StatefulSet that creates

    • the Pod with the Runner instance,
    • a PVC for 1 MiB of persistent storage used by the Runner (referred to as the “runnerDataPvc”) and
    • the PVCs for the VM’s disks.
  • (Optional) A load balancer Service that allows the user to access a VM’s console without knowing which node it runs on.

The reconciler is part of the Controller component. It’s configuration properties are therefore defined in

"/Manager":
  "/Controller":
    "/Reconciler":
      ...

The reconciler supports the following configuration properties:

  • runnerDataPvc.storageClassName: The storage class name to be used for the “runnerDataPvc” (the small volume used by the runner for information such as the EFI variables). By default, no storageClassName is generated, which causes Kubernetes to use storage from the default storage class. Define this if you want to use a specific storage class.

  • cpuOvercommit: The amount by which the current cpu count from the VM definition is divided when generating the resources properties for the VM (defaults to 2).

  • ramOvercommit: The amount by which the current ram size from the VM definition is divided when generating the resources properties for the VM (defaults to 1.25).

  • loadBalancerService: If defined, causes a load balancer service to be created. This property may be a boolean or YAML that defines additional labels or annotations to be merged into the service defintion. Here’s an example for using MetalLb as “internal load balancer”:

    loadBalancerService:
      annotations:
        metallb.universe.tf/loadBalancerIPs: 192.168.168.1
        metallb.universe.tf/ip-allocated-from-pool: single-common
        metallb.universe.tf/allow-shared-ip: single-common
    

    This makes all VM consoles available at IP address 192.168.168.1 with the port numbers from the VM definitions.