Skip to content

Operators

Viti Stack is composed of independent operators that each own a specific stage of the infrastructure lifecycle. The operators are designed to be loosely coupled — each watches specific CRDs and gates its work on upstream status fields, forming a pipeline from network provisioning through to running Kubernetes clusters.

Operator Lifecycle

Operator Layers

Layers

Layer 1 — Network Provisioning

Provisions network segments (IP prefixes, VLANs) from an upstream source. Exactly one provisioning operator acts per NetworkNamespace, selected by the spec.networkProvisioning.provider field.

Operator Provider Description
nms-operator nam (default) Allocates network segments from the Network Automation Manager API
manual-ip-provisioning-operator manual Copies user-supplied network parameters from spec to status

Input: NetworkNamespace created Output: NetworkNamespace.status.provisioningPhase = Ready, with ipv4Prefix, vlanId, and gateway populated

Layer 2 — IP Allocation

Assigns individual IP addresses to machines. Gated on provisioningPhase: Ready — these operators do not act until Layer 1 completes. The allocation method is selected by spec.ipAllocation.type on the NetworkNamespace.

Operator Allocation Type Description
static-ip-operator static Allocates IPs from a defined range, tracked as IPAllocation CRs
kea-operator dhcp Manages DHCP reservations in ISC Kea

Input: NetworkNamespace with provisioningPhase: Ready + NetworkConfiguration with MAC address Output: IPAllocation with status.phase = Allocated (static) or DHCP lease (dhcp)

Layer 3 — Machine Provisioning

Creates and manages virtual machines on the underlying hypervisor. Machines reference a MachineProvider that selects which operator handles them.

Operator Provider Type Description
kubevirt-operator kubevirt Creates KubeVirt VirtualMachine resources, manages storage and cloud-init
proxmox-operator proxmox Creates Proxmox VMs via the Proxmox API

Input: Machine CR with providerRef and NetworkConfiguration with assigned IP Output: Machine.status.phase = Running

Layer 4 — Cluster Provisioning

Orchestrates Kubernetes cluster creation by generating Machine manifests and coordinating the bootstrap process.

Operator Description
talos-operator Generates Machine CRs from KubernetesCluster spec, manages Talos configuration and cluster bootstrap

Input: KubernetesCluster CR with desired topology Output: Running Kubernetes cluster with control plane and worker nodes

Layer 5 — Observability

Cross-cutting monitoring that watches resources across all layers.

Component Description
kubevirt-status-page Real-time web UI showing KubeVirt nodes, VMs, and cluster allocation via SSE