Skip to content

Configuration Reference

This page documents every file you need to edit before deploying the homelab. Values like IP addresses, credentials, and resource allocations are specific to your environment and must be configured manually.

Packer

File: packer/k8s-node/k8s-node.auto.pkrvars.hcl

Copy the example file to get started:

cp packer/k8s-node/k8s-node.auto.pkrvars.hcl.example packer/k8s-node/k8s-node.auto.pkrvars.hcl
Variable Description Default
proxmox_url Proxmox API URL (required)
proxmox_api_token_id Proxmox API token ID (required)
proxmox_api_token_secret Proxmox API token secret (required)
proxmox_node Proxmox node to build the template on (required)
template_id VM ID for the resulting template 9000
iso_url Ubuntu 24.04 server ISO URL Ubuntu 24.04.2 LTS
iso_checksum ISO checksum (file URL for automatic verification) Ubuntu SHA256SUMS
iso_storage_pool Proxmox storage pool for the ISO local
disk_storage_pool Proxmox storage pool for the VM disk local-lvm
k8s_version Kubernetes version to install (e.g. 1.31.4) 1.31.4
k8s_version_minor Kubernetes minor version for apt repo (e.g. 1.31) 1.31
timezone Timezone for the template America/Chicago
media_uid UID for the media user 977
media_gid GID for the media group 988

Note

The proxmox_api_token_id and proxmox_api_token_secret are the same credentials used by Terraform. The template_id must match the clone_template_id variable in terraform/hosts/<cluster>/variables.tf.

Terraform

File: terraform/hosts/homelabk8s01/terraform.tfvars

Copy the example file to get started:

cp terraform/hosts/homelabk8s01/terraform.tfvars.example terraform/hosts/homelabk8s01/terraform.tfvars

Nodes are defined as a map. Each entry specifies the VM role, IP address, Proxmox VM ID, CPU cores, and memory. Worker nodes can optionally include tags and PCI device passthrough:

nodes = {
  homelabk8s01-node-1 = {
    role   = "control-plane"
    ip     = "192.168.10.50/24"
    vm_id  = 200
    cores  = 2
    memory = 8192
  }
  homelabk8s01-node-2 = {
    role   = "worker"
    ip     = "192.168.10.51/24"
    vm_id  = 201
    cores  = 4
    memory = 24576
  }
  homelabk8s01-node-3 = {
    role         = "worker"
    ip           = "192.168.10.52/24"
    vm_id        = 202
    cores        = 4
    memory       = 24576
    tags         = ["gpu"]
    pci_mappings = ["igpu"]
  }
}

The tags and pci_mappings fields are used to pass an Intel iGPU through to a worker node for hardware transcoding in Jellyfin and Tdarr. The pci_mappings value references a Proxmox PCI device mapping created by the pve-configure playbook.

Ansible

Global Variables

File: ansible/group_vars/all/vars.yml

Variable Description
timezone Timezone for all nodes (e.g. America/Chicago)
media_uid UID for the shared media user across NFS and pods
media_gid GID for the shared media group across NFS and pods

Inventory Files

File What to edit
ansible/inventory/homelabpve01/hosts.yml Proxmox host IP address
ansible/inventory/homelabk8s01/hosts.yml K8s node IPs (must match the values in terraform.tfvars)
ansible/inventory/homelabk8s01/group_vars/all.yml nas_ip, nas_export_path, nfs_mount_path

Note

The node IPs in the Ansible inventory must match the IPs defined in terraform.tfvars. A mismatch will cause Ansible to fail when it tries to connect to the provisioned VMs.

Kubernetes Manifests

The following manifest files contain environment-specific values that must be edited before deployment:

File What to edit
k8s/clusters/homelabk8s01/apps/arr/prereqs/env.yml TZ, PUID, PGID for *arr pods
k8s/clusters/homelabk8s01/infrastructure/gateway/l2-pool.yml LoadBalancer IP range for Cilium L2
k8s/clusters/homelabk8s01/infrastructure/nfs-provisioner/values.yaml NAS IP address for the NFS provisioner
k8s/clusters/homelabk8s01/apps/arr/prereqs/shared-data-pv.yml NAS IP address for the shared media PersistentVolume
k8s/clusters/homelabk8s01/apps/arr/downloads/values.yaml VPN server region
k8s/bootstrap/applicationsets/cluster-apps.yml Git repository URL for ArgoCD

Tip

After editing these files, commit the changes to your Git repository. ArgoCD will pick up the new configuration on its next sync cycle.