Skip to content

Configuration

All cluster settings are managed through a single file: cluster.yaml. This page explains every configurable field.


File Structure

cluster.yaml has two top-level sections:

cluster:
  # Global cluster settings
  ...

nodes:
  # List of node definitions
  ...

Cluster Section

Field Type Default Description
pod_cidr string 10.244.0.0/16 CIDR range for pod IP addresses
service_cidr string 10.96.0.0/16 CIDR range for Kubernetes service IPs
calico_version string v3.31.5 Calico CNI version to deploy
box string ubuntu/jammy64 Vagrant box image for all VMs

Example

cluster:
  pod_cidr: "10.244.0.0/16"
  service_cidr: "10.96.0.0/16"
  calico_version: "v3.31.5"
  box: "ubuntu/jammy64"

Pod CIDR

Changing pod_cidr from the default requires that the value matches the Calico custom resource configuration. The provisioning script handles this automatically.


Nodes Section

Each node is defined as a list entry with the following fields:

Field Type Required Description
name string VM hostname (must be unique)
ip string Private network IP on 192.168.56.x subnet
memory integer RAM allocation in MB
cpus integer Number of virtual CPUs
role string Either "controlplane" or "worker"

Constraints

  • Exactly one node must have role: "controlplane". The Vagrantfile validates this at startup and aborts with an error if violated.
  • All other nodes must have role: "worker".
  • Each node must have a unique name and ip.

Control Plane Node

- name: "controlplane"
  ip: "192.168.56.10"
  memory: 2048          # Minimum 2048 MB recommended
  cpus: 2               # Minimum 2 CPUs required by kubeadm
  role: "controlplane"

Control Plane Resources

kubeadm requires at least 2 CPUs for the control plane node. Setting cpus: 1 will cause kubeadm init to fail.

Worker Node

- name: "node01"
  ip: "192.168.56.11"
  memory: 1536          # Minimum 1024 MB for basic workloads
  cpus: 1
  role: "worker"

Adding Worker Nodes

To add a new worker node:

  1. Copy an existing worker block
  2. Change the name (must be unique)
  3. Increment the IP address
  4. Adjust memory and cpus as needed
  5. Run vagrant up
nodes:
  # ... existing nodes ...

  - name: "node04"
    ip: "192.168.56.14"
    memory: 2048
    cpus: 2
    role: "worker"

Removing Worker Nodes

To remove a worker node:

  1. Delete or comment out the node entry in cluster.yaml
  2. Destroy the specific VM: vagrant destroy node03 -f

Note

Removing a node from cluster.yaml does not automatically destroy its VM. You must run vagrant destroy <name> separately.


Full Example Configuration

cluster:
  pod_cidr: "10.244.0.0/16"
  service_cidr: "10.96.0.0/16"
  calico_version: "v3.31.5"
  box: "ubuntu/jammy64"

nodes:
  - name: "controlplane"
    ip: "192.168.56.10"
    memory: 2048
    cpus: 2
    role: "controlplane"

  - name: "node01"
    ip: "192.168.56.11"
    memory: 1536
    cpus: 1
    role: "worker"

  - name: "node02"
    ip: "192.168.56.12"
    memory: 1536
    cpus: 1
    role: "worker"

  - name: "node03"
    ip: "192.168.56.13"
    memory: 1536
    cpus: 1
    role: "worker"