Skip to content

Infrastructure Overview

Tower Fleet infrastructure is organized in distinct layers, from physical hardware up through virtualization to the Kubernetes orchestration platform.

Infrastructure Layers

┌─────────────────────────────────────────────────────────┐
│                   Applications Layer                    │
│  (Home Portal, Money Tracker, RMS, Arr-Stack, etc.)    │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│              Kubernetes Orchestration Layer             │
│     (k3s cluster, Supabase, MetalLB, Longhorn)         │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│              Virtualization & Compute Layer             │
│         (Proxmox, LXC Containers, VMs)                 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│              Physical Infrastructure Layer              │
│     (Network, Storage, Compute Hardware)               │
└─────────────────────────────────────────────────────────┘

Physical Infrastructure

Network: - Router/Firewall: OPNsense - Primary subnet: 10.89.97.0/24 - VLANs for network segmentation

Storage: - ZFS on Proxmox host - NAS: LXC 101 serving /vault via NFS - Distributed storage: Longhorn in k3s cluster

Compute: - Proxmox VE hypervisor on physical server - ~23 LXC containers for various services - 5 VMs (arr-stack, k3s cluster nodes, PC)

Virtualization Layer

Hypervisor: Proxmox VE 8.x - Web UI: https://10.89.97.xxx:8006 (IP varies by host) - Manages both LXC containers and KVM virtual machines

LXC Containers: - Lightweight virtualization for services - Direct filesystem access via //rpool/data/subvol-<ID>-disk-0/ - Key containers: - 101: NAS (storage server) - Active - 150, 160, 170, 190: Development containers - Stopped (deprecated) - now host-based in /root/projects/ - 411: Documentation server - Stopped (deprecated) - replaced by OtterWiki on K8s

Virtual Machines: - VM 100: arr-stack (media automation) at 10.89.97.50 - VM 201-203: k3s cluster (master + 2 workers) - VM 300: PC (personal workstation)

Orchestration Layer

Kubernetes Cluster: - Platform: k3s (lightweight Kubernetes) - Topology: 3-node cluster (1 master + 2 workers) - VMs: 201 (master), 202-203 (workers) - Load balancing: MetalLB - Storage: Longhorn distributed block storage - TLS: cert-manager with self-signed CA

Core Services: - Supabase: Shared PostgreSQL, Auth, Storage, Realtime - Observability: Grafana, Loki, Prometheus - Ingress: Traefik (included with k3s)

Applications Layer

Development Apps (Kubernetes): - Home Portal (unified homelab dashboard) - Money Tracker (personal finance) - RMS (recipe management system)

Media Automation (VM 100): - Arr-stack: Sonarr, Radarr, Lidarr, Prowlarr - Download clients: SABnzbd, Deluge (via VPN) - Request management: Overseerr, Jellyseerr

Other Services (LXC): - Documentation: OtterWiki on K8s (https://otterwiki.bogocat.com) - Storage: NFS share on LXC 101 - Various homelab utilities

Key Infrastructure Documents

Physical & Virtualization: - Network Configuration - OPNsense, routing, VLANs - Storage - ZFS, NAS, distributed storage - Proxmox & LXC Operations - Container/VM management - Arr-Stack - Media automation on VM 100

Orchestration: - Kubernetes Cluster - k3s installation - Core Infrastructure - Helm, MetalLB, Longhorn - Observability - Monitoring stack - Supabase Platform - Shared database platform

Applications: - Applications Overview - All running services - Arr-Stack - Media automation system

Access Patterns

From Proxmox Host:

# Enter LXC container (e.g., NAS on 101)
pct enter 101

# Execute command in container
pct exec 101 -- systemctl status smbd

# SSH to VM (e.g., arr-stack)
ssh root@10.89.97.50

# Kubernetes operations
kubectl get nodes
kubectl get pods -A

From Development Host (Proxmox):

# Start development server
cd /root/projects/home-portal && npm run dev

# Access Kubernetes Supabase
curl http://10.89.97.214:8000/rest/v1/

# Access NAS storage
ls /vault/media

Network Map

Internet → OPNsense (10.89.97.1)
              ├─ Proxmox Host (10.89.97.x)
              │   ├─ /root/projects/ (host-based development)
              │   ├─ LXC 101 (NAS) - 10.89.97.101
              │   │
              │   ├─ VM 100 (arr-stack) - 10.89.97.50
              │   ├─ VM 201 (k3s-master) - 10.89.97.201
              │   ├─ VM 202 (k3s-worker-1) - 10.89.97.202
              │   └─ VM 203 (k3s-worker-2) - 10.89.97.203
              └─ Kubernetes Services (via MetalLB)
                  ├─ Supabase - 10.89.97.214
                  ├─ Grafana - 10.89.97.211
                  ├─ NGINX Ingress - 10.89.97.220 (*.internal apps)
                  └─ Other services - 10.89.97.210+
Layer Resource Location
Docs OtterWiki https://otterwiki.bogocat.com
K8s Grafana http://10.89.97.211:3000
K8s Supabase http://10.89.97.214:8000
K8s Apps http://home.internal, http://money.internal, http://travel.internal
Media Sonarr http://10.89.97.50:8989
Media Radarr http://10.89.97.50:7878
Media Overseerr http://10.89.97.50:5055

Related Documentation: - Proxmox & LXC Operations - Kubernetes Cluster Setup - Architecture Decisions