MEGATRON Infrastructure Documentation

MEGATRON is a high-performance workstation serving as the central hub for software development, Kubernetes cluster management, machine learning research, and production SaaS hosting. Built around an AMD Threadripper 3990X with dual RTX 3090 GPUs and 251 GiB of RAM, it runs a K3s Kubernetes cluster spanning three nodes and hosts over a dozen production applications.

Quick Stats

MetricValue
CPUAMD Threadripper 3990X (64C/128T)
RAM251 GiB (42 GiB used)
GPUs2x NVIDIA RTX 3090 (24 GB each)
OSUbuntu 20.04.6 LTS, Kernel 5.15.0-139-generic
Uptime37 days
K8sK3s v1.33.6+k3s1, 3 nodes
Namespaces31
Applications7+ production apps across 5 domains
Research Projects130+ (ULTRATHINK SNN research)
Root Disk1.6T / 3.1T (54%)
Network Storage79T / 88T SMB share (90%)

What Runs on MEGATRON

Production Applications

  • STIQ (stiq.us) -- SaaS platform with prod/dev/staging environments
  • GlamHub (glamhub.m3gatr0n.com) -- Content platform with Astro, Directus, Umami analytics
  • CoreStation (corestation.io) -- Fire department SaaS with 3 environments
  • IDP (idp.pro) -- Identity provider platform
  • Kelsey Farm Equipment (kelseyfarmequipment.com) -- E-commerce
  • Aegis VPN (aegis.m3gatr0n.com) -- VPN service
  • Bibliotheca -- Docker-based book management with TTS and search

Infrastructure Services

Authentik (SSO), Vault (secrets), Harbor (container registry), Devtron (CI/CD), Prometheus/Grafana/Loki (monitoring), Longhorn (distributed storage), Linkerd (service mesh), cert-manager (TLS), and more.

Research

The ULTRATHINK project -- 130+ spiking neural network and efficient attention research papers organized across 8 waves, with dedicated Claude Code agents per project.

Architecture at a Glance

Internet
  |
  v
Cloudflare (DNS + WAF)
  |
  v
cloudflared tunnel ──> Traefik Ingress (NodePort :32672)
                            |
                    ┌───────┼───────┐
                    v       v       v
                K3s Pods  K3s Pods  K3s Pods
              (megatron) (thing1)  (thing2)
                    |
                    v
              Docker Containers (Bibliotheca, Coolify)
              GPU Workloads (ULTRATHINK research)
              Tailscale Mesh (Mac Studio, MacBook, Lambda)

Documentation Sections

SectionDescription
SystemHardware specs, OS, storage, GPUs
ClusterK3s architecture, nodes, namespaces
ApplicationsAll hosted applications with details
InfrastructureSupporting services (auth, monitoring, CI/CD)
DockerNon-Kubernetes containers
NetworkingCloudflare tunnels, Tailscale, TLS
IaCTerraform, Helm, Kustomize, Compose
SSH & AccessSSH config, rescue SSH, kubeconfig
ResearchULTRATHINK project overview
IssuesKnown problems and degraded services
RunbooksOperational procedures

Audit Date

This documentation was generated from a comprehensive system audit performed on 2026-03-24. Resource usage figures (RAM, disk, GPU) reflect point-in-time snapshots and will drift over time.

Hardware

MEGATRON is a workstation-class server built for parallel compute workloads -- deep learning training, Kubernetes orchestration, and multi-tenant application hosting.

CPU

PropertyValue
ModelAMD Ryzen Threadripper 3990X
ArchitectureZen 2 (Castle Peak)
Cores / Threads64 / 128
Base Clock2.9 GHz
Boost Clock4.3 GHz
L3 Cache256 MB
TDP280W
SocketsTRX4

Memory

PropertyValue
Total251 GiB
Used~42 GiB
Available~206 GiB
Swap Total31 GiB
Swap Used21 GiB

Note: 21 GiB of swap in use despite 206 GiB available RAM suggests processes were swapped out over the 37-day uptime and not yet paged back in. Consider a targeted swapoff -a && swapon -a cycle during a maintenance window if swap pressure becomes a concern.

GPUs

PropertyGPU 0GPU 1
ModelNVIDIA GeForce RTX 3090NVIDIA GeForce RTX 3090
VRAM24 GB GDDR6X24 GB GDDR6X
VRAM Used2.7 GB14 MB
Temperature53C46C
Power Draw29W / 350W17W / 350W
CUDA Cores10,49610,496
ArchitectureAmpere (GA102)Ampere (GA102)

See GPUs for detailed GPU information including driver version and active processes.

System Load

MetricValue
1-min load20.07
5-min load18.45
15-min load17.86
Uptime37 days

With 128 logical threads, a load average of ~20 represents approximately 16% CPU utilization. The steady load across all three windows indicates consistent background workload, likely from K3s cluster operations and running pods.

Resource Usage Summary

CPU:  [####................] ~16% (load 20 / 128 threads)
RAM:  [###.................] ~17% (42 / 251 GiB)
SWAP: [##############......] ~68% (21 / 31 GiB)
GPU0: [##..................] ~11% VRAM (2.7 / 24 GB)
GPU1: [....................] ~0%  VRAM (14 MB / 24 GB)
ROOT: [###########.........] 54% (1.6T / 3.1T)
SMB:  [##################..] 90% (79T / 88T)

Top Processes by Resource Usage

At the time of audit, the primary consumers are:

  • K3s server and agent processes -- Kubernetes control plane and kubelet
  • containerd -- Container runtime for all K3s pods
  • cloudflared -- Cloudflare tunnel daemon
  • AlertManager -- At 203% CPU (known issue, see Current Issues)
  • VNC server -- In restart loop consuming resources (known issue)

Peripheral Notes

  • Storage: NVMe primary (3.1T), SMB network share (88T), NFS mounts (currently down)
  • Network: Dual-stack networking with Cloudflare tunnel, Tailscale mesh, and direct SSH
  • The system runs in a DEGRADED systemd state due to failed motd-news and wol-enable services (non-critical)

OS & Kernel

Operating System

PropertyValue
DistributionUbuntu 20.04.6 LTS (Focal Fossa)
Kernel5.15.0-139-generic
Architecturex86_64
Uptime37 days
System StateDEGRADED

Kernel Details

The system runs kernel 5.15, the HWE (Hardware Enablement) kernel for Ubuntu 20.04. This is a long-term support kernel with backported hardware support.

$ uname -a
Linux megatron 5.15.0-139-generic #149~20.04.1-Ubuntu SMP x86_64 GNU/Linux

Key kernel features in use:

  • cgroups v2 -- Used by K3s for container resource isolation
  • NVIDIA kernel modules -- GPU passthrough to containers and bare-metal workloads
  • NVMe support -- Primary storage driver
  • CIFS/SMB -- Network filesystem for the 88T share
  • NFS -- Network filesystem (currently degraded, host unreachable)
  • WireGuard -- Used by Tailscale for mesh networking

Uptime & Load

MetricValue
Uptime37 days
Load (1m / 5m / 15m)20.07 / 18.45 / 17.86

The load averages are stable across all three windows, indicating a consistent baseline workload. With 128 logical threads, this represents roughly 16% sustained utilization.

Systemd Service Summary

The system is in a DEGRADED state due to failed non-critical services.

Failed Services

ServiceStatusImpact
motd-news.serviceFailedNone -- message of the day fetching
wol-enable.serviceFailedNone -- Wake-on-LAN setup

Key Running Services

ServiceDescription
k3s.serviceK3s Kubernetes server (control plane)
sshd.serviceOpenSSH server (port 22)
sshd-rescue.serviceRescue SSH daemon (port 2222, high priority)
cloudflared.serviceCloudflare tunnel daemon
tailscaled.serviceTailscale VPN daemon
docker.serviceDocker daemon for non-K3s containers
containerd.serviceContainer runtime (K3s)
nvidia-persistenced.serviceNVIDIA GPU persistence daemon
smbd.serviceSamba file sharing
ufw.serviceUncomplicated Firewall

Service Counts (Approximate)

StateCount
Running150+
Exited (one-shot, OK)80+
Failed2
Total loaded300+

Timezone & Locale

PropertyValue
TimezoneUS Eastern (EST/EDT)
Localeen_US.UTF-8

Notable Configuration

  • Rescue SSH runs on port 2222 with Nice -20 priority and OOM protection, ensuring emergency access even under extreme load. See Rescue SSH.
  • Forgejo SSH runs on port 2223 for Git operations.
  • The system has been running for 37 days without reboot, accumulating 21 GiB of swap usage despite ample free RAM.

Upgrade Considerations

Ubuntu 20.04 LTS reaches end of standard support in April 2025 (extended security maintenance available through 2030). Consider planning an upgrade to Ubuntu 22.04 LTS or 24.04 LTS during a maintenance window.

Storage

Disk Layout

Local Storage

MountDeviceSizeUsedAvailUse%Filesystem
/ (root)nvme0n1p53.1T1.6T1.4T54%ext4

The root filesystem is on an NVMe drive providing high-speed I/O for the OS, K3s cluster data, Docker images, and research workloads.

Network Storage

MountSourceSizeUsedAvailUse%TypeStatus
SMB share//10.0.0.41/Main88T79T~8.2T90%CIFSOK
/mnt/cloudyNFS host----NFSDOWN
/mnt/cloudy-rwNFS host----NFSDOWN

Warning: The SMB share is at 90% capacity (79T/88T). Only ~8.2T remains. Monitor closely and plan cleanup or expansion. See Current Issues.

Warning: NFS mounts to /mnt/cloudy and /mnt/cloudy-rw are unreachable -- the NFS host is down.

Storage Architecture

┌──────────────────────────────────────────────────────┐
│                     MEGATRON                          │
│                                                      │
│  ┌─────────────────────────┐  ┌───────────────────┐  │
│  │  NVMe (nvme0n1p5)       │  │  Longhorn PVs     │  │
│  │  3.1T root filesystem   │  │  Distributed K3s  │  │
│  │  ├── /                  │  │  storage across    │  │
│  │  ├── /home/lucas/       │  │  megatron, thing1, │  │
│  │  │   ├── Papers/ 234GB  │  │  thing2            │  │
│  │  │   ├── juke/ 60GB     │  └───────────────────┘  │
│  │  │   └── miniconda3/44GB│                         │
│  │  ├── /var/lib/rancher/  │  ┌───────────────────┐  │
│  │  │   (K3s data)         │  │  SMB //10.0.0.41  │  │
│  │  └── /var/lib/docker/   │  │  88T NAS share    │  │
│  └─────────────────────────┘  │  90% full         │  │
│                               └───────────────────┘  │
│  ┌─────────────────────────┐                         │
│  │  NFS (DOWN)             │                         │
│  │  /mnt/cloudy            │                         │
│  │  /mnt/cloudy-rw         │                         │
│  │  Host unreachable       │                         │
│  └─────────────────────────┘                         │
└──────────────────────────────────────────────────────┘

Top Directories by Size

DirectorySizeDescription
~/Papers/234 GBULTRATHINK research projects (130+ papers)
~/juke/60 GBMedia/music collection
~/miniconda3/44 GBConda environments and packages

Shared Storage Layout (Research)

The ULTRATHINK research projects use a shared storage structure:

/mnt/shared/
├── datasets/         # Shared datasets (ImageNet, CIFAR, etc.)
├── checkpoints/      # Model checkpoints per project
├── pretrained/       # Pretrained models (TORCH_HOME)
├── logs/             # TensorBoard, MLflow logs
└── results/          # Experiment results

Environment variables for each project:

export {PROJECT}_DATA=/mnt/shared/datasets
export {PROJECT}_CHECKPOINTS=/mnt/shared/checkpoints/{project}
export {PROJECT}_LOGS=/mnt/shared/logs/{project}
export TORCH_HOME=/mnt/shared/pretrained

Kubernetes Persistent Storage

K3s uses Longhorn as the distributed storage backend for persistent volumes. Longhorn replicates data across the three cluster nodes (megatron, thing1, thing2) for redundancy.

See Longhorn and Storage Classes for details.

Disk Usage Quick Check

# Check all mount points
df -h

# Check root filesystem usage
df -h /

# Top-level directory sizes
du -sh /home/lucas/*/ 2>/dev/null | sort -rh | head -20

# Check inode usage
df -i /

# Check NVMe health
sudo smartctl -a /dev/nvme0n1

# Check SMB share status
mount | grep cifs

Maintenance Recommendations

  1. SMB share at 90% -- Audit large files, archive old data, or expand the NAS
  2. NFS mounts down -- Investigate and restore the NFS host or remove stale mount entries from /etc/fstab
  3. Root disk at 54% -- Healthy but growing; monitor ~/Papers/ (234 GB) and conda envs (44 GB)
  4. Swap usage (21/31 GiB) -- Consider swapoff -a && swapon -a during a maintenance window to reclaim
  5. Longhorn health -- Verify replica counts and volume health via the Longhorn UI

GPUs

MEGATRON has two NVIDIA GeForce RTX 3090 GPUs, primarily used for deep learning training (ULTRATHINK research) and inference workloads (Ollama LLM serving).

GPU Specifications

SpecificationValue
ModelNVIDIA GeForce RTX 3090
Count2
ArchitectureAmpere (GA102)
CUDA Cores10,496 per GPU
Tensor Cores328 per GPU (3rd gen)
RT Cores82 per GPU (2nd gen)
VRAM24 GB GDDR6X per GPU
Memory Bus384-bit
Memory Bandwidth936.2 GB/s
TDP350W per GPU
Compute Capability8.6
NVLinkNot available (consumer card)

Current Status

MetricGPU 0GPU 1
VRAM Used2.7 GB / 24 GB14 MB / 24 GB
VRAM Utilization11.3%0.06%
Temperature53C46C
Power Draw29W / 350W17W / 350W
Fan SpeedAutoAuto
Performance StateP8 (idle)P8 (idle)
GPU 0:  VRAM [##..................] 11%   Temp: 53C   Power:  29W / 350W
GPU 1:  VRAM [....................]  0%   Temp: 46C   Power:  17W / 350W

GPU 0 has a 2.7 GB allocation, likely from an Ollama model loaded in VRAM or a persistent CUDA context. GPU 1 is essentially idle.

Quick Commands

# Full GPU status
nvidia-smi

# Compact CSV output
nvidia-smi --query-gpu=index,name,memory.used,memory.total,temperature.gpu,power.draw \
  --format=csv

# Real-time monitoring (updates every second)
watch -n 1 nvidia-smi

# List GPU compute processes
nvidia-smi --query-compute-apps=pid,name,gpu_uuid,used_memory --format=csv

# Check driver and CUDA version
nvidia-smi | head -4

GPU Usage by Workload

WorkloadGPU(s)Typical VRAMNotes
ULTRATHINK Training0 + 120-48 GB totalDistributed training across both GPUs
Ollama (LLM inference)02-20 GBModel-dependent; 7B ~ 4GB, 70B ~ 40GB
Bibliotheca TTS0 or 11-4 GBGPU-accelerated text-to-speech
JupyterHub notebooksAnyVariableInteractive research
MLflow experiments0 or 1VariableTracked experiment runs

Multi-GPU Training

For ULTRATHINK research, both GPUs can be used together:

# PyTorch DataParallel (simpler, less efficient)
CUDA_VISIBLE_DEVICES=0,1 python train.py

# PyTorch DistributedDataParallel (recommended for performance)
torchrun --nproc_per_node=2 train.py

# Use only a specific GPU
CUDA_VISIBLE_DEVICES=1 python inference.py

Kubernetes GPU Access

The cluster has a gpu-operator namespace, indicating the NVIDIA GPU Operator is deployed for Kubernetes GPU scheduling. Pods can request GPU resources:

resources:
  limits:
    nvidia.com/gpu: 1

The GPU Operator manages:

  • NVIDIA driver lifecycle
  • NVIDIA Container Toolkit
  • Device plugin for Kubernetes
  • GPU Feature Discovery
  • DCGM Exporter (monitoring)

Thermal Notes

Both GPUs are running cool (46-53C) at near-idle power draw. Under full training load, expect:

ConditionGPU TempPower DrawSystem Power
Idle45-55C17-30W~100W GPU total
Single GPU training75-83C300-350W~350W GPU total
Dual GPU training78-85C300-350W each~700W GPU total

Ensure adequate cooling and a sufficient PSU (recommended 1200W+ for dual 3090 under full load, accounting for the 280W TDP CPU).

Troubleshooting

# GPU not detected
lspci | grep -i nvidia
dmesg | grep -i nvidia

# Reset GPU (use with caution)
sudo nvidia-smi --gpu-reset -i 0

# Check for stuck processes
nvidia-smi --query-compute-apps=pid,name,used_memory --format=csv
kill -9 <stuck_pid>

# Verify CUDA installation
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.device_count())"

Cluster Overview

MEGATRON runs a K3s Kubernetes cluster -- a lightweight, production-ready distribution of Kubernetes designed for resource-constrained and edge environments.

Cluster Summary

PropertyValue
DistributionK3s
Versionv1.33.6+k3s1
Nodes3
Control Planemegatron (single master)
Workersthing1, thing2
Namespaces31
Pods100+
Ingress ControllerTraefik
Storage BackendLonghorn
Service MeshLinkerd
Container Runtimecontainerd

Architecture

                    ┌─────────────────────────────────────────────┐
                    │              K3s Cluster                    │
                    │                                             │
  Internet ───>     │  ┌─────────────────────────────┐           │
  Cloudflare ───>   │  │     megatron (control-plane) │           │
  cloudflared ───>  │  │     ─────────────────────────│           │
                    │  │  K3s Server (API, scheduler,  │           │
  :32672 ──────>    │  │    controller-manager, etcd)  │           │
  Traefik           │  │  Traefik Ingress Controller   │           │
                    │  │  cert-manager                 │           │
                    │  │  GPU Operator (2x RTX 3090)   │           │
                    │  │  Longhorn Manager              │           │
                    │  │  Application Pods              │           │
                    │  │  Age: 88 days                  │           │
                    │  └─────────────────────────────┘           │
                    │                                             │
                    │  ┌──────────────────┐  ┌──────────────────┐│
                    │  │  thing1 (worker)  │  │  thing2 (worker)  ││
                    │  │  ────────────────  │  │  ────────────────  ││
                    │  │  K3s Agent        │  │  K3s Agent        ││
                    │  │  Application Pods │  │  Application Pods ││
                    │  │  Longhorn Replica │  │  Longhorn Replica ││
                    │  │  Age: 11 hours    │  │  Age: 11 hours    ││
                    │  └──────────────────┘  └──────────────────┘│
                    └─────────────────────────────────────────────┘

Traffic Flow

Internet
    │
    v
Cloudflare DNS + WAF
    │
    v
cloudflared (tunnel 6d8885c4-...)
    │
    v
https://localhost:32672 (noTLSVerify)
    │
    v
Traefik Ingress Controller (kube-system)
    │
    ├──> IngressRoute (hostname-based routing)
    │        │
    │        ├──> stiq.us ──────────> stiq namespace pods
    │        ├──> glamhub.m3gatr0n ─> glamhub namespace pods
    │        ├──> corestation.io ───> corestation namespace pods
    │        ├──> idp.pro ──────────> idp namespace pods
    │        ├──> kelsey... ────────> kelsey namespace pods
    │        ├──> aegis.m3gatr0n ──> aegis namespace pods
    │        ├──> auth.m3gatr0n ───> authentik namespace pods
    │        ├──> registry.m3gatr0n > registry namespace pods
    │        ├──> grafana.m3gatr0n ─> monitoring namespace pods
    │        └──> platform.m3gatr0n > devtroncd namespace pods
    │
    v
Linkerd Service Mesh (mTLS between pods)

Key Components

Ingress: Traefik

Traefik runs as the default K3s ingress controller in kube-system. It terminates TLS (via cert-manager certificates) and routes traffic to backend services based on hostname matching. All external traffic arrives through the Cloudflare tunnel on NodePort 32672.

Storage: Longhorn

Longhorn provides distributed block storage with replication across nodes. It manages persistent volumes for stateful workloads like databases, registries, and secret stores.

Mesh: Linkerd

Linkerd provides mutual TLS between pods, traffic splitting, and observability. Recently deployed (11 hours old at audit time).

Certificates: cert-manager

cert-manager automates TLS certificate provisioning via Let's Encrypt. Currently configured with HTTP-01 challenge, which is broken behind the Cloudflare tunnel. Migration to DNS-01 is required. See TLS Certificates.

GPU: NVIDIA GPU Operator

The GPU Operator in the gpu-operator namespace manages NVIDIA drivers, container toolkit, and device plugin for GPU-accelerated pods.

Quick Commands

# Cluster status
kubectl get nodes -o wide

# All pods across all namespaces
kubectl get pods -A

# Namespace list with pod counts
kubectl get ns

# Cluster info
kubectl cluster-info

# K3s specific
k3s kubectl get nodes
systemctl status k3s

Nodes

The K3s cluster consists of three nodes: one control-plane/master node (megatron) and two worker nodes (thing1, thing2).

Node Summary

NodeRoleK3s VersionAgeStatus
megatroncontrol-plane, masterv1.33.6+k3s188 daysReady
thing1workerv1.33.6+k3s111 hoursReady
thing2workerv1.33.6+k3s111 hoursReady

Note: thing1 and thing2 were recently joined or re-joined to the cluster (11 hours old at audit time). This is significantly newer than megatron's 88-day age, suggesting the workers were recently provisioned, re-imaged, or reconnected.

Node Details

megatron (Control Plane)

PropertyValue
Rolecontrol-plane, master
OSUbuntu 20.04.6 LTS
Kernel5.15.0-139-generic
CPUAMD Threadripper 3990X (64C/128T)
RAM251 GiB
GPUs2x NVIDIA RTX 3090 (24GB each)
Root Disk3.1T NVMe
K3s Versionv1.33.6+k3s1
Age88 days
Tailscale IP100.70.25.47

This node runs:

  • K3s server (API server, scheduler, controller-manager, embedded etcd)
  • Traefik ingress controller
  • cert-manager
  • Most application pods (as the primary node)
  • GPU-accelerated workloads
  • Docker daemon (for non-K3s containers)

thing1 (Worker)

PropertyValue
Roleworker
K3s Versionv1.33.6+k3s1
Age11 hours

thing2 (Worker)

PropertyValue
Roleworker
K3s Versionv1.33.6+k3s1
Age11 hours

Hardware details for thing1 and thing2 are not captured in the audit. Run kubectl describe node thing1 and kubectl describe node thing2 for full specs.

Node Architecture

┌──────────────────────────────────────────────────┐
│  megatron (control-plane)                        │
│  AMD Threadripper 3990X | 251GB RAM | 2x 3090    │
│  ┌──────────────────────────────────────────────┐│
│  │ K3s Server: API, scheduler, etcd, controller ││
│  │ Traefik, cert-manager, Longhorn mgr          ││
│  │ Application pods (stiq, glamhub, core, ...)  ││
│  │ GPU workloads, Docker containers             ││
│  └──────────────────────────────────────────────┘│
└──────────────────────────────────────────────────┘
         │                    │
         v                    v
┌────────────────┐   ┌────────────────┐
│ thing1 (worker)│   │ thing2 (worker)│
│ K3s Agent      │   │ K3s Agent      │
│ App pods       │   │ App pods       │
│ Longhorn       │   │ Longhorn       │
│ replicas       │   │ replicas       │
└────────────────┘   └────────────────┘

Node Management

# List nodes with details
kubectl get nodes -o wide

# Describe a specific node
kubectl describe node megatron

# Check node resource usage
kubectl top nodes

# Drain a node for maintenance
kubectl drain thing1 --ignore-daemonsets --delete-emptydir-data

# Uncordon after maintenance
kubectl uncordon thing1

# Check K3s agent status on worker
ssh thing1 'systemctl status k3s-agent'

# Join a new worker node
# On the new node:
curl -sfL https://get.k3s.io | K3S_URL=https://megatron:6443 \
  K3S_TOKEN=<token> sh -

Labels and Taints

To schedule GPU workloads only on megatron:

# Label GPU node
kubectl label node megatron gpu=true

# Taint non-GPU nodes
kubectl taint nodes thing1 gpu=false:NoSchedule
kubectl taint nodes thing2 gpu=false:NoSchedule

Pods requesting nvidia.com/gpu resources will automatically be scheduled on nodes with available GPUs through the NVIDIA device plugin.

Namespaces

The cluster has 31 namespaces spanning production applications, development environments, infrastructure services, and specialized workloads.

Namespace Inventory

Application Namespaces

NamespacePurposeEnvironmentsKey Services
stiqSTIQ SaaS platform (production)prodAPI, app, admin
stiq-devSTIQ developmentdevAPI, app, admin
stiq-stagingSTIQ stagingstagingAPI, app, admin
glamhubGlamHub content platform (production)prodAstro, Directus, Umami, N8N, Ollama, Qdrant
glamhub-devGlamHub developmentdevMirrors prod stack
corestationCoreStation fire dept SaaS (production)prodAPI, app, admin
corestation-devCoreStation developmentdevAPI, app, admin
corestation-stagingCoreStation stagingstagingAPI, app, admin
idpIDP identity platform (production)prodAPI, app
idp-devIDP developmentdevAPI, app
kelseyKelsey Farm Equipment (production)prodApp, API
aegisAegis VPN (production)prodVPN, API
aegis-devAegis VPN developmentdevVPN, API

Infrastructure Namespaces

NamespacePurposeKey Components
kube-systemCore K3s componentsTraefik, CoreDNS, metrics-server
kube-node-leaseNode heartbeat leasesLease objects
kube-publicPublic cluster infoConfigMaps
defaultDefault namespace(should be empty)
authentikSSO/OIDC providerAuthentik server, worker, Redis, PostgreSQL
vaultSecrets managementHashiCorp Vault
registryContainer registryHarbor core, database, Redis, Trivy
devtroncdCI/CD GitOps platformDevtron, ArgoCD, PostgreSQL
monitoringObservability stackPrometheus, Grafana, Loki, AlertManager
cert-managerTLS automationcert-manager controller, webhook, cainjector
longhorn-systemDistributed storageLonghorn manager, driver, UI
linkerdService meshLinkerd control plane, proxies

Specialized Namespaces

NamespacePurposeKey Components
ai-mlML/AI workloadsMLflow, Ollama
gpu-operatorGPU managementNVIDIA GPU Operator, device plugin
jupyterhubNotebook serverJupyterHub, user notebook pods
argoWorkflow orchestrationArgo Workflows controller, server
openfaasServerless functionsOpenFaaS gateway, controller
dataData servicesData processing pipelines
docsDocumentationDocumentation site hosting
sonarqubeCode qualitySonarQube server, database

Namespace Map

K3s Cluster (31 namespaces)
│
├── System (4)
│   ├── kube-system          (Traefik, CoreDNS, metrics)
│   ├── kube-node-lease      (node heartbeats)
│   ├── kube-public          (public config)
│   └── default              (unused)
│
├── Applications (13)
│   ├── stiq / stiq-dev / stiq-staging
│   ├── glamhub / glamhub-dev
│   ├── corestation / corestation-dev / corestation-staging
│   ├── idp / idp-dev
│   ├── kelsey
│   └── aegis / aegis-dev
│
├── Infrastructure (7)
│   ├── authentik            (SSO)
│   ├── vault                (secrets)
│   ├── registry             (Harbor)
│   ├── devtroncd            (CI/CD)
│   ├── monitoring           (Prometheus, Grafana, Loki)
│   ├── cert-manager         (TLS certs)
│   └── longhorn-system      (storage)
│
├── Platform Services (4)
│   ├── linkerd              (service mesh)
│   ├── argo                 (workflows)
│   ├── openfaas             (serverless)
│   └── sonarqube            (code quality)
│
└── Specialized (3)
    ├── ai-ml                (MLflow, Ollama)
    ├── gpu-operator         (NVIDIA)
    ├── jupyterhub           (notebooks)
    ├── data                 (data processing)
    └── docs                 (documentation)

Quick Commands

# List all namespaces
kubectl get namespaces

# Pods in a specific namespace
kubectl get pods -n stiq

# All resources in a namespace
kubectl get all -n glamhub

# Resource usage by namespace
kubectl top pods -n monitoring

# Create a new namespace
kubectl create namespace my-new-ns

# Set default namespace for kubectl
kubectl config set-context --current --namespace=stiq

Multi-Environment Pattern

Most applications follow a consistent multi-environment pattern:

EnvironmentNamespace SuffixDomain PatternPurpose
Production(none)app.domain.comLive traffic
Development-devdev-app.domain.comActive development
Staging-stagingstaging-app.domain.comPre-release validation

Example for STIQ:

  • stiq -> stiq.us, api.stiq.us, app.stiq.us, admin.stiq.us
  • stiq-dev -> dev.stiq.us, dev-api.stiq.us, dev-app.stiq.us, dev-admin.stiq.us
  • stiq-staging -> staging.stiq.us, staging-api.stiq.us, staging-app.stiq.us, staging-admin.stiq.us

Pods & Services

Auto-generated: 2026-03-24 14:19:42 CDT

This page is automatically generated from live cluster state.

Nodes

NAME       STATUS   ROLES                  AGE   VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
megatron   Ready    control-plane,master   88d   v1.33.6+k3s1   10.0.0.85     <none>        Ubuntu 20.04.6 LTS   5.15.0-139-generic   containerd://2.1.5-k3s1.33
thing1     Ready    <none>                 12h   v1.33.6+k3s1   10.0.0.92     <none>        Ubuntu 24.04.4 LTS   6.17.0-19-generic    containerd://2.1.5-k3s1.33
thing2     Ready    <none>                 12h   v1.33.6+k3s1   10.0.0.91     <none>        Ubuntu 24.04.4 LTS   6.17.0-19-generic    containerd://2.1.5-k3s1.33

Pods by Namespace

NamespacePodReadyStatusRestartsAge
aegisaegis-guardian-66478678b8-shmbr1/1Running020d
aegisaegis-sentinel-57cfc7777f-r98kq1/1Running020d
ai-mlgpu-test-job-v2-master-00/1Completed011h
ai-mlmlflow-5564b6fdf9-862hb2/2Running04h23m
ai-mlollama-5685d5bbbc-9s2zx1/1Running011h
ai-mlollama-58fbcfdfb9-n8tlf0/2Init:0/104h23m
argoworkflow-controller-7bc968fd7d-rxmvz1/1Running1(11h
argo-rolloutsargo-rollouts-79b89d8856-ghj4h1/1Running011h
authentikauthentik-server-6d49f878c7-gpk9f1/1Running03h40m
authentikauthentik-worker-6f948944cd-9r7421/1Running12(171m
cert-managercert-manager-7ff7f97d55-7qz5w1/1Running24(37d
cert-managercert-manager-cainjector-59bb669f8d-zp6nr1/1Running28(37d
cert-managercert-manager-webhook-59bbd786df-x4zd21/1Running22(37d
cnpg-systemcnpg-cloudnative-pg-75b9dd87c8-4fxc61/1Running011h
corestationhydrant-api-cf4d8446c-4zr9l1/1Running020d
corestationhydrant-web-7b8f9cf54-9pzdx1/1Running020d
datapostgres-postgresql-01/1Running32(3h
dataredis-master-01/1Running20(37d
db-testtest-db-11/1Running011h
db-testtest-db-21/1Running011h
devtroncdapp-sync-cronjob-29568960-8hzk70/1Completed02d19h
devtroncdapp-sync-cronjob-29570400-jg6hr0/1Completed043h
devtroncdapp-sync-cronjob-29571840-hppzl0/1Completed019h
devtroncdapp-sync-job-qh58u-9cclv0/1Completed020d
devtroncdargocd-dex-server-f8d4c7fcd-lc5n81/1Running020d
devtroncdcm-acme-http-solver-2wvnb1/1Running04h22m
devtroncddashboard-5d4879d946-jbtlx1/1Running020d
devtroncddevtron-599f6b9b54-8j4991/1Running3(20d
devtroncddevtron-nats-03/3Running020d
devtroncddevtron-nats-test-request-reply0/1Completed020d
devtroncdgit-sensor-01/1Running3(20d
devtroncdinception-84b64bcdcf-d4p7p1/1Running020d
devtroncdkubelink-6dfbd6fd69-sx47q1/1Running3(20d
devtroncdkubewatch-57bdcf77d5-fxz4z1/1Running5(20d
devtroncdlens-85d7ffc74d-8lnkr1/1Running4(20d
devtroncdpostgresql-migrate-casbin-phmsc-svmq20/1Completed020d
devtroncdpostgresql-migrate-devtron-alpzi-5qz5g0/1Completed320d
devtroncdpostgresql-migrate-gitsensor-tzejb-bg6lp0/1Completed320d
devtroncdpostgresql-migrate-lens-cmdqu-v2b2r0/1Completed320d
devtroncdpostgresql-postgresql-02/2Running020d
dnscoredns-56bc8b7d7f-2hp4p1/1Running29(37d
docscm-acme-http-solver-jp6nn2/2Running05m29s
docsmegatron-docs-5dd4d46dbf-x6gbj1/2CrashLoopBackOff5(27s
docsoutline-756dc8df7f-hpqpp2/2Running03h55m
docsoutline-postgres-79b458859-hc2l52/2Running04h23m
docsoutline-redis-7dd594d967-j9vns2/2Running04h23m
docswikijs-744568f8ff-qk7vz2/2Running04h3m
glamhubadmin-app-77f7fb96b5-w7xkz1/1Running08d
glamhubastro-site-7fbc6cc75b-blhsz1/1Running08d
glamhubcontent-worker-78bcd75c65-ltvv21/1Running09d
glamhubdirectus-64785956fc-t762j1/1Running08d
glamhubhaystack-578d4bf78f-725kk1/1Running08d
glamhubn8n-577cd6bcbb-mckkq1/1Running3(9d
glamhubollama-668ff98868-vk74t1/1Running09d
glamhubpostgresql-978c65955-gpm2p1/1Running1(9d
glamhubqdrant-584df9fd54-jcq581/1Running09d
glamhubredis-6db4cffc85-dc4t61/1Running09d
glamhubumami-694dc6d9b6-cnzs81/1Running09d
glamhub-devadmin-app-b45b8cc9c-r7cf91/1Running08d
gpu-operatorgpu-feature-discovery-2hjfv1/1Running011h
gpu-operatorgpu-feature-discovery-8gsv71/1Running111h
gpu-operatorgpu-feature-discovery-swgjn1/1Running011h
gpu-operatorgpu-operator-55b78d68b-jtdkt1/1Running1(11h
gpu-operatorgpu-operator-node-feature-discovery-gc-775976dc9d-28ssc1/1Running011h
gpu-operatorgpu-operator-node-feature-discovery-master-c784d775d-szzjs1/1Running1(11h
gpu-operatorgpu-operator-node-feature-discovery-worker-5nw5z1/1Running011h
gpu-operatorgpu-operator-node-feature-discovery-worker-b6rf81/1Running011h
gpu-operatorgpu-operator-node-feature-discovery-worker-q2kt41/1Running011h
gpu-operatornvidia-container-toolkit-daemonset-4rmkq1/1Running011h
gpu-operatornvidia-container-toolkit-daemonset-gpkfb1/1Running011h
gpu-operatornvidia-container-toolkit-daemonset-ws5hj1/1Running011h
gpu-operatornvidia-cuda-validator-8bvmg0/1Completed011h
gpu-operatornvidia-cuda-validator-mmvfz0/1Completed011h
gpu-operatornvidia-cuda-validator-zh92f0/1Completed011h
gpu-operatornvidia-dcgm-exporter-htwnf1/1Running011h
gpu-operatornvidia-dcgm-exporter-pknfk1/1Running011h
gpu-operatornvidia-dcgm-exporter-v4wpc1/1Running111h
gpu-operatornvidia-device-plugin-daemonset-2ffk41/1Running011h
gpu-operatornvidia-device-plugin-daemonset-6ct4t1/1Running011h
gpu-operatornvidia-device-plugin-daemonset-mzt2l1/1Running111h
gpu-operatornvidia-operator-validator-fzpvt1/1Running011h
gpu-operatornvidia-operator-validator-gzn281/1Running011h
gpu-operatornvidia-operator-validator-j9rk41/1Running011h
idpidp-core-6df97f46c9-ng5271/1Running020d
jupyterhubcontinuous-image-puller-7hwlt1/1Running011h
jupyterhubcontinuous-image-puller-7rj851/1Running011h
jupyterhubcontinuous-image-puller-c2czj1/1Running011h
jupyterhubhub-8cdb6dbd7-5jmkn2/2Running04h
jupyterhubproxy-58f55b8795-6pn292/2Running04h
kelseykelsey-app-5d9cd5cf7-rjxcp1/1Running020d
kube-systemmetrics-server-7bfffcd44-qs96p1/1Running27(37d
kube-systemlocal-path-provisioner-869c44bfbd-pg9f81/1Running19(37d
kube-systemcoredns-6d668d687-5pg471/1Running22(37d
kube-systemsvclb-devtron-service-9104f337-5frsq1/1Running012h
kube-systemsvclb-devtron-service-9104f337-7tptp0/1Pending020d
kube-systemsvclb-devtron-service-9104f337-b88461/1Running012h
kube-systemsvclb-traefik-07e361ea-926z42/2Running022d
kube-systemsvclb-traefik-07e361ea-mdlzb0/2Pending012h
kube-systemsvclb-traefik-07e361ea-tcjr60/2Pending012h
kube-systemtraefik-8898b95b4-l6xbs1/1Running13(37d
kubeflowtraining-operator-79cc5c4557-w88tc1/1Running011h
linkerdlinkerd-destination-8545fcf85-wvxc74/4Running011h
linkerdlinkerd-identity-c97756c79-zn29c2/2Running011h
linkerdlinkerd-proxy-injector-68f6b78f4c-t2z562/2Running011h
linkerd-vizmetrics-api-54cb8699c8-gqxtf2/2Running011h
linkerd-vizprometheus-5c965f96cc-h2mn62/2Running011h
linkerd-viztap-c56c78c67-gj5wj2/2Running011h
linkerd-viztap-injector-76947889cc-khqj72/2Running011h
linkerd-vizweb-8b796c6f4-vrwvp2/2Running011h
longhorn-systemcsi-attacher-5bcb65bf95-625vn1/1Running011h
longhorn-systemcsi-attacher-5bcb65bf95-7f6z71/1Running011h
longhorn-systemcsi-attacher-5bcb65bf95-99wdj1/1Running011h
longhorn-systemcsi-provisioner-5d498c6944-hk7nd1/1Running011h
longhorn-systemcsi-provisioner-5d498c6944-kkl521/1Running011h
longhorn-systemcsi-provisioner-5d498c6944-tj2471/1Running011h
longhorn-systemcsi-resizer-6c6474c996-2hbql1/1Running011h
longhorn-systemcsi-resizer-6c6474c996-wkjsb1/1Running011h
longhorn-systemcsi-resizer-6c6474c996-xvlck1/1Running011h
longhorn-systemcsi-snapshotter-5cc5fb45d9-b4zk71/1Running011h
longhorn-systemcsi-snapshotter-5cc5fb45d9-g85751/1Running011h
longhorn-systemcsi-snapshotter-5cc5fb45d9-rw2tz1/1Running011h
longhorn-systemengine-image-ei-75a03ec3-dltql1/1Running011h
longhorn-systemengine-image-ei-75a03ec3-kvntt1/1Running011h
longhorn-systemengine-image-ei-75a03ec3-w47p71/1Running011h
longhorn-systeminstance-manager-4672022a1c82ae04132538dc7150b5ef1/1Running011h
longhorn-systeminstance-manager-5c58e84d2652a90aca7a85427ea2c14d1/1Running011h
longhorn-systeminstance-manager-b6a0ed5cacc882ffa2bdb4001da8f3a81/1Running011h
longhorn-systemlonghorn-csi-plugin-6w8zl3/3Running011h
longhorn-systemlonghorn-csi-plugin-dxvz93/3Running011h
longhorn-systemlonghorn-csi-plugin-wp7bb3/3Running011h
longhorn-systemlonghorn-driver-deployer-746f54969f-6txmb1/1Running011h
longhorn-systemlonghorn-manager-5x79l2/2Running3(11h
longhorn-systemlonghorn-manager-jctlg2/2Running5(11h
longhorn-systemlonghorn-manager-kr7hz2/2Running1(11h
longhorn-systemlonghorn-ui-5df99fc477-czls41/1Running011h
longhorn-systemlonghorn-ui-5df99fc477-hvt5f1/1Running011h
miniominio-5dd88fbb75-88mjg2/2Running04h23m
monitoringalertmanager-01/1Running016m
monitoringpromtail-mmlcd1/1Running012h
monitoringgrafana-6c9d8cffdb-xtpnr1/1Running04h6m
monitoringloki-5bc6cc48f5-c7b2f1/1Running021d
monitoringprometheus-kube-state-metrics-7f6d5f59d5-jtrvq1/1Running32(36d
monitoringprometheus-prometheus-node-exporter-2gb2v1/1Running1(11h
monitoringprometheus-prometheus-node-exporter-4vflc1/1Running2488d
monitoringprometheus-prometheus-node-exporter-b8tfv1/1Running1(11h
monitoringprometheus-prometheus-pushgateway-849f5c884c-4m4471/1Running21(37d
monitoringprometheus-server-74687fc4b4-tghql2/2Running39(37d
monitoringpromtail-fxrmx1/1Running012h
monitoringcm-acme-http-solver-7f4xb1/1Running04h22m
monitoringpromtail-r9bp21/1Running021d
natsnats-02/2Running011h
natsnats-box-8cdff494f-7dg692/2Running04h23m
openfaasalertmanager-86dfdb8477-rn76j1/1Running011h
openfaasgateway-646b8ffb9f-dzct72/2Running1(11h
openfaasnats-68cdf6fb98-5xsqt1/1Running011h
openfaasprometheus-874d869b7-tqqm21/1Running011h
openfaasqueue-worker-7bc5c894c5-5bkb21/1Running1(11h
openfaas-fnfiglet-7479dc7678-ndvjb2/2Running011h
portalportal-598fb95886-xztr71/1Running026m
registryharbor-core-56d459f965-dvjhd1/1Running020d
registrycm-acme-http-solver-jfzhh1/1Running04h22m
registryharbor-database-01/1Running020d
registryharbor-exporter-69db77b557-vnbkj1/1Running020d
registryharbor-jobservice-86959d8d74-s7v5q1/1Running020d
registryharbor-nginx-746ddb69d4-9xq791/1Running020d
registryharbor-portal-65cbc8d65-qd7x61/1Running020d
registryharbor-redis-01/1Running020d
registryharbor-registry-7698c885d8-mp5cs2/2Running020d
registryharbor-trivy-01/1Running020d
sonarqubesonarqube-sonarqube-01/1Running011h
stiqstiq-admin-64b9655df4-kd7771/1Running020d
stiqstiq-web-64cccf6c-nw89f1/1Running020d
stiqstiq-marketing-d87fb986c-5ljjc1/1Running020d
stiqstiq-api-69d456f7ff-jzfqv1/1Running61(3h
stiq-devstiq-admin-7cd6cb7b4-krzzt1/1Running020d
stiq-devstiq-marketing-665dc49fc8-t68b91/1Running020d
stiq-devstiq-web-5757d46b97-hzqnw1/1Running020d
stiq-devstiq-api-7d8dcc7dd7-ghctn1/1Running64(3h
stiq-stagingstiq-admin-595b55d8c7-wh9bq1/1Running020d
stiq-stagingstiq-web-64f7d7cf59-ts8dm1/1Running020d
stiq-stagingstiq-marketing-7fd69b5b48-n87gd1/1Running020d
stiq-stagingstiq-api-5864594d7c-98j221/1Running61(3h
vaultvault-02/2Running04h18m
vaultvault-agent-injector-5bf75dc74-lstxk2/2Running04h18m
velerovelero-5c89779b4f-t58jr1/1Running011h

Services

NamespaceNameTypeCluster-IPPorts
aegisaegis-guardianClusterIP10.43.115.18980/TCP
aegisaegis-sentinelClusterIP10.43.46.4580/TCP
ai-mlgpu-test-job-v2-master-0ClusterIPNone23456/TCP
ai-mlmlflowNodePort10.43.232.1685000:30050/TCP
ai-mlollamaNodePort10.43.75.13711434:30434/TCP
argo-rolloutsargo-rollouts-metricsClusterIP10.43.224.1718090/TCP
authentikauthentik-serverClusterIP10.43.82.6280/TCP,443/TCP
cert-managercert-managerClusterIP10.43.144.1529402/TCP
cert-managercert-manager-cainjectorClusterIP10.43.85.1509402/TCP
cert-managercert-manager-webhookClusterIP10.43.204.34443/TCP,9402/TCP
cnpg-systemcnpg-webhook-serviceClusterIP10.43.132.22443/TCP
corestationhydrant-apiClusterIP10.43.122.14780/TCP
corestationhydrant-webClusterIP10.43.191.8780/TCP
datapostgres-postgresqlClusterIP10.43.49.2095432/TCP
datapostgres-postgresql-hlClusterIPNone5432/TCP
dataredis-headlessClusterIPNone6379/TCP
dataredis-masterClusterIP10.43.106.1166379/TCP
db-testtest-db-rClusterIP10.43.28.1025432/TCP
db-testtest-db-roClusterIP10.43.189.725432/TCP
db-testtest-db-rwClusterIP10.43.188.2115432/TCP
defaultkubernetesClusterIP10.43.0.1443/TCP
devtroncdargocd-dex-serverClusterIP10.43.202.1765556/TCP,5557/TCP,5558/TCP
devtroncdcm-acme-http-solver-982t8NodePort10.43.251.218089:31878/TCP
devtroncddashboard-serviceClusterIP10.43.67.22080/TCP
devtroncddevtron-natsClusterIPNone4222/TCP,6222/TCP,8222/TCP,7777/TCP,7422/TCP,7522/TCP
devtroncddevtron-serviceLoadBalancer10.43.67.5980:31985/TCP
devtroncdgit-sensor-serviceClusterIP10.43.111.18780/TCP,90/TCP
devtroncdkubelink-service-headlessClusterIPNone50051/TCP
devtroncdlens-serviceClusterIP10.43.139.17180/TCP
devtroncdpostgresql-postgresqlClusterIP10.43.62.645432/TCP
devtroncdpostgresql-postgresql-headlessClusterIPNone5432/TCP
devtroncdpostgresql-postgresql-metricsClusterIP10.43.57.2219187/TCP
docscm-acme-http-solver-mgqp9NodePort10.43.2.598089:31866/TCP
docsmegatron-docsClusterIP10.43.219.1380/TCP
docsoutlineNodePort10.43.21.183000:30080/TCP
docsoutline-postgresClusterIP10.43.127.2435432/TCP
docsoutline-redisClusterIP10.43.106.2426379/TCP
docswikijsNodePort10.43.181.1083000:30081/TCP
glamhubadmin-appNodePort10.43.2.2104322:30322/TCP
glamhubastro-siteNodePort10.43.138.594321:30321/TCP
glamhubdirectusNodePort10.43.193.538055:30055/TCP
glamhubglamhub-analyticsClusterIP10.43.251.3880/TCP
glamhubglamhub-cmsClusterIP10.43.42.14480/TCP
glamhubglamhub-webClusterIP10.43.169.9780/TCP
glamhubhaystackClusterIP10.43.54.2288080/TCP
glamhubn8nNodePort10.43.44.1735678:30678/TCP
glamhubollamaClusterIP10.43.78.25511434/TCP
glamhubpostgresqlClusterIP10.43.177.1915432/TCP
glamhubqdrantClusterIP10.43.35.966333/TCP,6334/TCP
glamhubredisClusterIP10.43.70.2186379/TCP
glamhubumamiClusterIP10.43.241.963000/TCP
glamhub-devadmin-appClusterIP10.43.182.1694322/TCP
gpu-operatorgpu-operatorClusterIP10.43.102.808080/TCP
gpu-operatornvidia-dcgm-exporterClusterIP10.43.193.1689400/TCP
idpidp-coreClusterIP10.43.182.24580/TCP
jupyterhubhubClusterIP10.43.180.2018081/TCP
jupyterhubproxy-apiClusterIP10.43.252.38001/TCP
jupyterhubproxy-publicNodePort10.43.250.2180:30888/TCP
kelseykelsey-appClusterIP10.43.59.24380/TCP
kube-systemkube-dnsClusterIP10.43.0.1053/UDP,53/TCP,9153/TCP
kube-systemmetrics-serverClusterIP10.43.53.37443/TCP
kube-systemtraefikLoadBalancer10.43.133.680:32521/TCP,443:32672/TCP
kubeflowtraining-operatorClusterIP10.43.47.338080/TCP,443/TCP
linkerdlinkerd-dstClusterIP10.43.24.1428086/TCP
linkerdlinkerd-dst-headlessClusterIPNone8086/TCP
linkerdlinkerd-identityClusterIP10.43.208.1118080/TCP
linkerdlinkerd-identity-headlessClusterIPNone8080/TCP
linkerdlinkerd-policyClusterIPNone8090/TCP
linkerdlinkerd-policy-validatorClusterIP10.43.92.188443/TCP
linkerdlinkerd-proxy-injectorClusterIP10.43.96.22443/TCP
linkerdlinkerd-sp-validatorClusterIP10.43.223.192443/TCP
linkerd-vizmetrics-apiClusterIP10.43.109.218085/TCP
linkerd-vizprometheusClusterIP10.43.246.1029090/TCP
linkerd-viztapClusterIP10.43.209.1698088/TCP,443/TCP
linkerd-viztap-injectorClusterIP10.43.15.136443/TCP
linkerd-vizwebClusterIP10.43.210.678084/TCP,9994/TCP
longhorn-systemlonghorn-admission-webhookClusterIP10.43.8.129502/TCP
longhorn-systemlonghorn-backendClusterIP10.43.94.1759500/TCP
longhorn-systemlonghorn-frontendClusterIP10.43.98.12080/TCP
longhorn-systemlonghorn-recovery-backendClusterIP10.43.58.09503/TCP
miniominioNodePort10.43.166.559000:30900/TCP
miniominio-consoleNodePort10.43.48.2379001:30901/TCP
monitoringalertmanagerClusterIP10.43.110.329093/TCP
monitoringalertmanager-headlessClusterIPNone9093/TCP
monitoringcm-acme-http-solver-fbnjpNodePort10.43.136.1458089:32569/TCP
monitoringgrafanaClusterIP10.43.125.843000/TCP
monitoringlokiClusterIP10.43.105.303100/TCP
monitoringprometheus-kube-state-metricsClusterIP10.43.103.748080/TCP
monitoringprometheus-prometheus-node-exporterClusterIP10.43.52.69100/TCP
monitoringprometheus-prometheus-pushgatewayClusterIP10.43.192.1199091/TCP
monitoringprometheus-serverClusterIP10.43.219.3580/TCP
natsnatsClusterIP10.43.48.524222/TCP
natsnats-headlessClusterIPNone4222/TCP,8222/TCP
openfaasgatewayClusterIP10.43.165.808080/TCP
openfaasalertmanagerClusterIP10.43.141.1649093/TCP
openfaasgateway-externalNodePort10.43.187.1678080:31112/TCP
openfaasnatsClusterIP10.43.6.264222/TCP
openfaasprometheusClusterIP10.43.176.199090/TCP
openfaas-fnfigletClusterIP10.43.147.2038080/TCP
portalportalNodePort10.43.170.12580:30000/TCP
registryharbor-coreClusterIP10.43.175.9280/TCP,8001/TCP
registryharborNodePort10.43.22.13780:30500/TCP
registrycm-acme-http-solver-fsrl9NodePort10.43.250.1948089:30362/TCP
registryharbor-databaseClusterIP10.43.118.345432/TCP
registryharbor-exporterClusterIP10.43.34.308001/TCP
registryharbor-jobserviceClusterIP10.43.9.6580/TCP,8001/TCP
registryharbor-portalClusterIP10.43.237.11280/TCP
registryharbor-redisClusterIP10.43.72.1196379/TCP
registryharbor-registryClusterIP10.43.28.1195000/TCP,8080/TCP,8001/TCP
registryharbor-trivyClusterIP10.43.40.1238080/TCP
sonarqubesonarqube-sonarqubeNodePort10.43.169.1469000:30090/TCP
stiqstiq-adminClusterIP10.43.11.1880/TCP
stiqstiq-webClusterIP10.43.192.21480/TCP
stiqstiq-marketingClusterIP10.43.234.22080/TCP
stiqstiq-apiClusterIP10.43.144.713000/TCP
stiq-devstiq-apiClusterIP10.43.86.2103000/TCP
stiq-devstiq-marketingClusterIP10.43.209.20080/TCP
stiq-devstiq-webClusterIP10.43.11.17280/TCP
stiq-devstiq-adminClusterIP10.43.193.8280/TCP
stiq-stagingstiq-adminClusterIP10.43.217.15880/TCP
stiq-stagingstiq-webClusterIP10.43.84.24480/TCP
stiq-stagingstiq-marketingClusterIP10.43.126.20880/TCP
stiq-stagingstiq-apiClusterIP10.43.103.2283000/TCP
vaultvaultClusterIP10.43.32.2348200/TCP,8201/TCP
vaultvault-agent-injector-svcClusterIP10.43.98.236443/TCP
vaultvault-internalClusterIPNone8200/TCP,8201/TCP
veleroveleroClusterIP10.43.26.978085/TCP

Ingresses

NamespaceNameHostsAddress
aegisaegis-ingressaegis.m3gatr0n.com,api.aegis.m3gatr0n.com10.0.0.85
authentikauthentik-serverauth.m3gatr0n.com10.0.0.85
corestationcorestation-ingresscorestation.io,app.corestation.io,api.corestation.io+
devtroncdcm-acme-http-solver-vxm9rplatform.m3gatr0n.com10.0.0.85
devtroncddevtron-dashboardplatform.m3gatr0n.com10.0.0.85
docscm-acme-http-solver-cdglwdocs.m3gatr0n.com10.0.0.85
docsmegatron-docsdocs.m3gatr0n.com10.0.0.85
docswikijswiki.m3gatr0n.com10.0.0.85
glamhubglamhub-ingressglamhub.com,www.glamhub.com,admin.glamhub.com+
idpidp-ingressidp.pro,api.idp.pro,app.idp.pro10.0.0.85
kelseykelsey-appkelseyfarmequipment.com,www.kelseyfarmequipment.com,api.kelseyfarmequipment.com10.0.0.85
monitoringalertmanageralertmanager.m3gatr0n.com10.0.0.85
monitoringcm-acme-http-solver-9sd6cgrafana.10-0-0-36.sslip.io10.0.0.85
monitoringgrafanagrafana.m3gatr0n.com10.0.0.85
monitoringgrafana-ingressgrafana.stiq.us10.0.0.85
monitoringprometheusprometheus.m3gatr0n.com10.0.0.85
registrycm-acme-http-solver-n6nh4registry.m3gatr0n.com10.0.0.85
registryharbor-portalregistry.m3gatr0n.com10.0.0.85
stiq-devstiq-ingressdev-api.stiq.us,dev-app.stiq.us,dev.stiq.us+
stiq-stagingstiq-ingressstaging-api.stiq.us,staging-app.stiq.us,staging.stiq.us+
stiqstiq-ingressapi.stiq.us,app.stiq.us,stiq.us+

Certificates

NamespaceNameReadySecretAge
cert-managerkuber-caTruekuber-ca-secret87d
devtroncddevtron-tlsFalsedevtron-tls20d
docsmegatron-docs-tlsFalsemegatron-docs-tls5m33s
kube-systemtraefik-dashboard-tlsTruetraefik-dashboard-tls87d
kube-systemwildcard-sslipTruewildcard-sslip-tls87d
monitoringwildcard-sslip-tlsFalsewildcard-sslip-tls87d
registryharbor-tlsFalseharbor-tls20d

Storage Classes

Kubernetes storage classes define how persistent volumes are provisioned in the K3s cluster.

Available Storage Classes

Storage ClassProvisionerReclaim PolicyDefaultNotes
local-pathrancher.io/local-pathDeleteYes (K3s default)Uses local node storage
longhorndriver.longhorn.ioDeleteNoDistributed replicated storage

local-path (K3s Default)

The K3s default storage class uses the local-path provisioner, which creates PersistentVolumes on the local filesystem of the node where the pod is scheduled.

  • Pros: Simple, fast, no additional infrastructure
  • Cons: No replication, data lost if node fails, pod-to-node affinity required
  • Best for: Non-critical workloads, ephemeral data, development environments
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: local-path
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Longhorn (Distributed)

Longhorn provides distributed block storage with replication across the three cluster nodes (megatron, thing1, thing2).

  • Pros: Data replication (configurable replicas), snapshots, backups, web UI
  • Cons: Higher resource overhead, network-dependent I/O, more complex
  • Best for: Databases, stateful applications, anything requiring data durability
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-durable-pvc
spec:
  storageClassName: longhorn
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Quick Commands

# List storage classes
kubectl get storageclass

# List persistent volumes
kubectl get pv

# List persistent volume claims across all namespaces
kubectl get pvc -A

# Check Longhorn volumes
kubectl get volumes.longhorn.io -n longhorn-system

# Check Longhorn replicas
kubectl get replicas.longhorn.io -n longhorn-system

Choosing a Storage Class

Use CaseRecommended ClassReason
Database (production)longhornReplication for durability
Database (dev)local-pathPerformance, simplicity
Container registrylonghornLarge volumes, durability
Temporary build artifactslocal-pathSpeed, disposable
Secrets/configlonghornDurability across restarts

TODO: expand with Longhorn backup configuration, snapshot policies, and volume health monitoring.

Application Index

All applications hosted on MEGATRON, including Kubernetes-based services and Docker containers.

Production Applications

ApplicationDomain(s)NamespacesTech StackEnvironmentsStatus
STIQstiq.us, api/app/admin.stiq.usstiq, stiq-dev, stiq-stagingSaaS platformprod, dev, stagingRunning
GlamHubglamhub.m3gatr0n.com + subdomainsglamhub, glamhub-devAstro 6, Directus 11, Umami, N8N, Ollama, Qdrantprod, devRunning
CoreStationcorestation.io, api/app/admin.corestation.iocorestation, corestation-dev, corestation-stagingFire Department SaaSprod, dev, stagingRunning
IDPidp.pro, api/app.idp.proidp, idp-devIdentity Provider platformprod, devRunning
Kelsey Equipmentkelseyfarmequipment.com, www/api.kelsey...kelsey, kelsey-devFarm equipment e-commerceprod, devRunning
Aegis VPNaegis.m3gatr0n.com, api/vpn.aegis...aegis, aegis-devVPN serviceprod, devRunning
Bibliothecalocalhost:8080 (Docker)Docker containersBook management, TTS, qBittorrent, MeilisearchsinglePartial (categorizer restarting)

Infrastructure Services

ServiceDomainNamespacePurposeStatus
Authentikauth.m3gatr0n.comauthentikOIDC/SSO providerRunning
Vault(internal)vaultSecrets managementRunning (3h51m uptime)
Harborregistry.m3gatr0n.comregistryContainer registryTLS NOT READY
Devtronplatform.m3gatr0n.comdevtroncdCI/CD GitOpsTLS NOT READY
Prometheusprometheus.m3gatr0n.commonitoringMetrics collectionRunning
Grafanagrafana.m3gatr0n.commonitoringVisualizationRunning
Loki(internal)monitoringLog aggregationRunning
AlertManageralertmanager.m3gatr0n.commonitoringAlert routing203% CPU issue
Longhorn(internal)longhorn-systemDistributed storageRunning
Linkerd(internal)linkerdService meshRunning (11h old)
MLflow(internal)ai-mlML experiment trackingRunning
Ollama(internal)ai-ml, glamhubLLM inference (port 11434)Running
JupyterHub(internal)jupyterhubNotebook serverRunning
OpenFaaS(internal)openfaasServerless functionsRunning
Argo Workflows(internal)argoWorkflow orchestrationRunning
cert-manager(internal)cert-managerTLS cert automationRunning (issuer broken)
Coolifylocalhost:8000DockerPaaS platformRunning

Docker-Only Containers

ContainerPurposeStatus
bibliotheca-webBook management web UIRunning
bibliotheca-torrentqBittorrent download clientRunning
bibliotheca-vpnGluetun VPN for torrentRunning (healthy)
bibliotheca-ttsGPU-accelerated TTSRunning
bibliotheca-nginxReverse proxyRunning
bibliotheca-discoveryBook discovery serviceRunning
bibliotheca-categorizerBook categorizationRESTARTING
coolifyPaaS platformRunning
mariadb:11Coolify databaseRunning
redis:7-alpineCoolify cacheRunning
meilisearchSearch engineRunning

Domain Map

stiq.us ─────────────────────> stiq namespace
  ├── api.stiq.us
  ├── app.stiq.us
  ├── admin.stiq.us
  ├── dev*.stiq.us ──────────> stiq-dev namespace
  └── staging*.stiq.us ─────> stiq-staging namespace

corestation.io ──────────────> corestation namespace
  ├── api.corestation.io
  ├── app.corestation.io
  ├── admin.corestation.io
  ├── dev*.corestation.io ──> corestation-dev namespace
  └── staging*.corestation ─> corestation-staging namespace

idp.pro ─────────────────────> idp namespace
  ├── api.idp.pro
  ├── app.idp.pro
  └── dev*.idp.pro ─────────> idp-dev namespace

kelseyfarmequipment.com ─────> kelsey namespace
  ├── www.kelseyfarmequipment.com
  └── api.kelseyfarmequipment.com

m3gatr0n.com (infrastructure)
  ├── glamhub.m3gatr0n.com ─> glamhub namespace
  ├── auth.m3gatr0n.com ────> authentik namespace
  ├── aegis.m3gatr0n.com ───> aegis namespace
  ├── registry.m3gatr0n.com > registry namespace
  ├── platform.m3gatr0n.com > devtroncd namespace
  ├── grafana.m3gatr0n.com ─> monitoring namespace
  ├── prometheus.m3gatr0n.com > monitoring namespace
  └── alertmanager.m3gatr0n.com > monitoring namespace

Application Details

GlamHub

GlamHub is a content management and publishing platform running on the MEGATRON cluster. It features a modern frontend, headless CMS, analytics, workflow automation, and AI-powered features.

Overview

PropertyValue
Primary Domainglamhub.m3gatr0n.com
Namespacesglamhub (prod), glamhub-dev (dev)
FrontendAstro 6
CMSDirectus 11
AnalyticsUmami
AutomationN8N
LLM InferenceOllama
Vector SearchQdrant

URLs

ServiceProduction URLDev URL
Frontendglamhub.m3gatr0n.comdev-glamhub.m3gatr0n.com
Admin (Directus)admin-glamhub.m3gatr0n.comdev-admin-glamhub.m3gatr0n.com
CMS APIcms-glamhub.m3gatr0n.comdev-cms-glamhub.m3gatr0n.com
N8N Workflowsn8n-glamhub.m3gatr0n.comdev-n8n-glamhub.m3gatr0n.com

Architecture

                    ┌─────────────────────────────────────┐
                    │          glamhub namespace           │
                    │                                     │
  glamhub.m3gatr0n  │  ┌──────────┐    ┌──────────────┐  │
  ─────────────────>│  │ Astro 6  │───>│ Directus 11  │  │
                    │  │ Frontend │    │ Headless CMS │  │
                    │  └──────────┘    └──────┬───────┘  │
                    │                         │          │
  admin-glamhub     │  ┌──────────────────────┘          │
  ─────────────────>│  │                                 │
                    │  v                                  │
                    │  ┌──────────┐    ┌──────────────┐  │
                    │  │ Database │    │   Umami      │  │
                    │  │ (Postgres│    │  Analytics   │  │
                    │  │  or SQL) │    └──────────────┘  │
                    │  └──────────┘                      │
                    │                                     │
  n8n-glamhub       │  ┌──────────┐    ┌──────────────┐  │
  ─────────────────>│  │   N8N    │───>│   Ollama     │  │
                    │  │ Workflows│    │  LLM Engine  │  │
                    │  └──────────┘    └──────────────┘  │
                    │                                     │
                    │  ┌──────────────┐                   │
                    │  │   Qdrant     │                   │
                    │  │ Vector Store │                   │
                    │  └──────────────┘                   │
                    └─────────────────────────────────────┘

Component Details

Astro 6 (Frontend)

  • Static site generation with server-side rendering
  • Modern web framework for content-driven sites
  • Connected to Directus for dynamic content

Directus 11 (Headless CMS)

  • API-first content management
  • Admin dashboard at admin-glamhub.m3gatr0n.com
  • RESTful and GraphQL APIs
  • Role-based access control

Umami (Analytics)

  • Privacy-focused web analytics
  • Lightweight alternative to Google Analytics
  • Tracks page views, events, and user sessions

N8N (Workflow Automation)

  • Visual workflow builder
  • Connects to Ollama for AI-powered content workflows
  • Scheduled tasks and event-driven automation
  • Accessible at n8n-glamhub.m3gatr0n.com

Ollama (LLM Inference)

  • Local LLM serving on port 11434
  • Used by N8N for content generation, summarization, and processing
  • Also available in the ai-ml namespace for other workloads
  • GPU-accelerated inference using RTX 3090

Qdrant (Vector Database)

  • Vector similarity search engine
  • Stores embeddings for semantic search over content
  • Supports RAG (Retrieval-Augmented Generation) workflows with Ollama

Environments

EnvironmentNamespacePurpose
ProductionglamhubLive site serving real users
Developmentglamhub-devActive development and testing

Quick Commands

# Check pods in glamhub namespace
kubectl get pods -n glamhub

# Check services
kubectl get svc -n glamhub

# View logs for Directus
kubectl logs -n glamhub -l app=directus --tail=100 -f

# Restart a component
kubectl rollout restart deployment/astro -n glamhub

STIQ

STIQ is a SaaS platform hosted on the MEGATRON cluster with full multi-environment support across production, development, and staging.

Overview

PropertyValue
Primary Domainstiq.us
TypeSaaS Platform
Namespacesstiq, stiq-dev, stiq-staging
EnvironmentsProduction, Development, Staging

URLs

Production (stiq namespace)

ServiceURL
Main Sitestiq.us
APIapi.stiq.us
Applicationapp.stiq.us
Admin Paneladmin.stiq.us

Development (stiq-dev namespace)

ServiceURL
Main Sitedev.stiq.us
APIdev-api.stiq.us
Applicationdev-app.stiq.us
Admin Paneldev-admin.stiq.us

Staging (stiq-staging namespace)

ServiceURL
Main Sitestaging.stiq.us
APIstaging-api.stiq.us
Applicationstaging-app.stiq.us
Admin Panelstaging-admin.stiq.us

Architecture

                        stiq.us
                           │
                           v
              ┌────────────────────────┐
              │    Cloudflare Tunnel    │
              └───────────┬────────────┘
                          │
                          v
              ┌────────────────────────┐
              │   Traefik Ingress      │
              │   Host-based routing   │
              └───────────┬────────────┘
                          │
          ┌───────────────┼───────────────┐
          v               v               v
 ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
 │  stiq (prod) │ │ stiq-dev     │ │ stiq-staging │
 │              │ │              │ │              │
 │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │
 │ │   App    │ │ │ │   App    │ │ │ │   App    │ │
 │ │ Frontend │ │ │ │ Frontend │ │ │ │ Frontend │ │
 │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │
 │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │
 │ │   API    │ │ │ │   API    │ │ │ │   API    │ │
 │ │ Backend  │ │ │ │ Backend  │ │ │ │ Backend  │ │
 │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │
 │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │
 │ │  Admin   │ │ │ │  Admin   │ │ │ │  Admin   │ │
 │ │  Panel   │ │ │ │  Panel   │ │ │ │  Panel   │ │
 │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │
 │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │
 │ │ Database │ │ │ │ Database │ │ │ │ Database │ │
 │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │
 └──────────────┘ └──────────────┘ └──────────────┘

Environment Promotion

Code changes flow through the environments:

Development (stiq-dev)
    │
    │  Manual promotion / PR merge
    v
Staging (stiq-staging)
    │
    │  Validation + approval
    v
Production (stiq)

Networking

All STIQ subdomains are routed through the Cloudflare tunnel using Pattern B:

  • Hostname matched at Cloudflare
  • Proxied to https://localhost:32672 (Traefik NodePort) with noTLSVerify
  • Traefik routes to the correct namespace based on hostname

Quick Commands

# Check all STIQ pods across environments
kubectl get pods -n stiq
kubectl get pods -n stiq-dev
kubectl get pods -n stiq-staging

# View services
kubectl get svc -n stiq

# View ingress routes
kubectl get ingressroute -n stiq

# Tail API logs
kubectl logs -n stiq -l app=api --tail=100 -f

# Scale API replicas
kubectl scale deployment/api -n stiq --replicas=3

CoreStation

CoreStation is a SaaS platform designed for fire departments, running on the MEGATRON cluster with three environments.

Overview

PropertyValue
Primary Domaincorestation.io
TypeFire Department SaaS
Namespacescorestation, corestation-dev, corestation-staging
EnvironmentsProduction, Development, Staging
Source Code/home/lucas/fire-department-saas/

URLs

Production (corestation namespace)

ServiceURL
Main Sitecorestation.io
APIapi.corestation.io
Applicationapp.corestation.io
Admin Paneladmin.corestation.io

Development (corestation-dev namespace)

ServiceURL
Main Sitedev.corestation.io
APIdev-api.corestation.io
Applicationdev-app.corestation.io
Admin Paneldev-admin.corestation.io

Staging (corestation-staging namespace)

ServiceURL
Main Sitestaging.corestation.io
APIstaging-api.corestation.io
Applicationstaging-app.corestation.io
Admin Panelstaging-admin.corestation.io

Architecture

CoreStation follows the same multi-environment pattern as STIQ:

corestation.io
      │
      v
Cloudflare Tunnel ──> Traefik ──> corestation namespace
                                  ├── app (frontend)
                                  ├── api (backend)
                                  ├── admin (admin panel)
                                  └── database

Deployment

CoreStation has Kustomize-based deployment manifests:

/home/lucas/fire-department-saas/deploy/k8s/
├── base/           # Base manifests
├── overlays/
│   ├── dev/        # Development overrides
│   └── prod/       # Production overrides

Apply with:

# Development
kubectl apply -k /home/lucas/fire-department-saas/deploy/k8s/overlays/dev/

# Production
kubectl apply -k /home/lucas/fire-department-saas/deploy/k8s/overlays/prod/

Quick Commands

# Check pods across all environments
for ns in corestation corestation-dev corestation-staging; do
  echo "=== $ns ===" && kubectl get pods -n $ns
done

# View logs
kubectl logs -n corestation -l app=api --tail=100 -f

# Restart deployment
kubectl rollout restart deployment/api -n corestation

IDP

IDP is an identity provider platform hosted on MEGATRON with production and development environments.

Overview

PropertyValue
Primary Domainidp.pro
TypeIdentity Provider Platform
Namespacesidp (prod), idp-dev (dev)
EnvironmentsProduction, Development
Source Code/home/lucas/idp/
IaCHelm charts at /home/lucas/idp/infra/charts/

URLs

Production (idp namespace)

ServiceURL
Main Siteidp.pro
APIapi.idp.pro
Applicationapp.idp.pro

Development (idp-dev namespace)

ServiceURL
Main Sitedev.idp.pro
APIdev-api.idp.pro
Applicationdev-app.idp.pro

Helm Charts

IDP has a comprehensive set of Helm charts at /home/lucas/idp/infra/charts/:

ChartPurpose
core-platformMain IDP application stack
argocdGitOps continuous delivery
external-dnsAutomatic DNS record management
cnpgCloudNativePG PostgreSQL operator
weaviateVector database for semantic search
grafanaIDP-specific monitoring dashboards

Quick Commands

kubectl get pods -n idp
kubectl get pods -n idp-dev
kubectl get svc -n idp
helm list -n idp

TODO: expand with architecture diagram, deployment procedures, and database details.

Kelsey Farm Equipment

Kelsey Farm Equipment is an e-commerce platform for farm and irrigation equipment.

Overview

PropertyValue
Primary Domainkelseyfarmequipment.com
TypeE-commerce
Namespaceskelsey, kelsey-dev
EnvironmentsProduction, Development
Source Code/home/lucas/irrigation-parts/
IaCHelm at /home/lucas/irrigation-parts/deploy/helm/, Kustomize at /home/lucas/irrigation-parts/deploy/k8s/

URLs

ServiceProductionDevelopment
Main Sitekelseyfarmequipment.comdev.kelseyfarmequipment.com
WWWwww.kelseyfarmequipment.com-
APIapi.kelseyfarmequipment.com-

Deployment

Kelsey has both Helm and Kustomize deployment options:

Kustomize Overlays

/home/lucas/irrigation-parts/deploy/k8s/
├── base/
├── overlays/
│   ├── demo/
│   ├── dev/
│   ├── qa/
│   └── prod/
# Deploy to dev
kubectl apply -k /home/lucas/irrigation-parts/deploy/k8s/overlays/dev/

# Deploy to prod
kubectl apply -k /home/lucas/irrigation-parts/deploy/k8s/overlays/prod/

Quick Commands

kubectl get pods -n kelsey
kubectl get svc -n kelsey

TODO: expand with architecture diagram, product catalog details, and payment integration.

Bibliotheca

Bibliotheca is a Docker-based book management system running outside of Kubernetes. It provides book discovery, download, categorization, text-to-speech conversion, and full-text search.

Overview

PropertyValue
PlatformDocker Compose (not K3s)
Accesslocalhost:8080 (qBittorrent UI), localhost:8088 (nginx)
Location/home/lucas/bibliotheca/
GPUYes (TTS container uses NVIDIA GPU)

Container Inventory

ContainerImageStatusPortsPurpose
bibliotheca-webcustomRunning (2+ weeks)-Web UI for book management
bibliotheca-torrentlinuxserver/qbittorrentRunning (37h)8080BitTorrent download client
bibliotheca-vpnqmcgaw/gluetunRunning (37h, healthy)6881VPN tunnel for torrent traffic
bibliotheca-ttscustom (NVIDIA GPU)Running (2+ weeks)-GPU-accelerated text-to-speech
bibliotheca-nginxnginxRunning (2+ weeks)8088Reverse proxy for services
bibliotheca-discoverycustomRunning (2+ weeks)-Book discovery and metadata
bibliotheca-categorizercustomRESTARTING-Book categorization (broken)

Known Issue: bibliotheca-categorizer is continuously restarting. See Current Issues.

Architecture

┌──────────────────────────────────────────────────────┐
│                   Bibliotheca Stack                    │
│                  (Docker Compose)                      │
│                                                      │
│  ┌──────────────┐     ┌────────────────────────────┐ │
│  │  nginx :8088 │────>│  bibliotheca-web           │ │
│  │  (reverse    │     │  Book management UI        │ │
│  │   proxy)     │     └────────────────────────────┘ │
│  └──────────────┘                                    │
│                                                      │
│  ┌──────────────────────────────────────────────────┐│
│  │  bibliotheca-discovery                           ││
│  │  Finds books, fetches metadata                   ││
│  └───────────────────────┬──────────────────────────┘│
│                          │                           │
│                          v                           │
│  ┌──────────────────────────────────────────────────┐│
│  │  bibliotheca-vpn (Gluetun)                       ││
│  │  ┌────────────────────────────────────────────┐  ││
│  │  │  bibliotheca-torrent (qBittorrent) :8080   │  ││
│  │  │  Downloads via VPN tunnel                   │  ││
│  │  └────────────────────────────────────────────┘  ││
│  └──────────────────────────────────────────────────┘│
│                                                      │
│  ┌──────────────────┐  ┌──────────────────────────┐  │
│  │ bibliotheca-tts  │  │ bibliotheca-categorizer  │  │
│  │ Text-to-Speech   │  │ Book categorization      │  │
│  │ (NVIDIA GPU)     │  │ STATUS: RESTARTING       │  │
│  └──────────────────┘  └──────────────────────────┘  │
│                                                      │
│  External: Meilisearch :7700 (full-text search)      │
└──────────────────────────────────────────────────────┘

Network Topology

The torrent container runs inside the Gluetun VPN container's network namespace, ensuring all download traffic is routed through the VPN:

Internet <──> Gluetun VPN <──> qBittorrent
                  │
                  └── Port 6881 (torrent)
                  └── Port 8080 (qBittorrent web UI)

Services

qBittorrent (Torrent Client)

  • Web UI: http://localhost:8080
  • Image: linuxserver/qbittorrent
  • Runs inside Gluetun VPN network for privacy
  • Port 6881 for BitTorrent protocol

Gluetun (VPN)

  • Image: qmcgaw/gluetun
  • Health-checked container
  • Provides VPN network namespace for qBittorrent
  • Status: Healthy

Text-to-Speech (TTS)

  • Custom image with NVIDIA GPU support
  • Converts ebooks to audio format
  • Uses RTX 3090 for accelerated inference
  • Running for 2+ weeks
  • Port: 7700
  • Image: getmeili/meilisearch
  • Full-text search engine for book metadata and content
  • Running for 4 weeks

Discovery

  • Custom service for finding and fetching book metadata
  • Running for 2+ weeks

Categorizer

  • Automatically categorizes books by genre/topic
  • Currently broken -- continuously restarting

Management

# Check container status
docker ps --filter "name=bibliotheca"

# View logs for the failing categorizer
docker logs bibliotheca-categorizer --tail=50

# Restart the entire stack
cd /home/lucas/bibliotheca/ && docker compose restart

# Restart a specific container
docker restart bibliotheca-torrent

# Access qBittorrent UI
# Open http://localhost:8080 in browser

# Check Gluetun VPN health
docker inspect bibliotheca-vpn | jq '.[0].State.Health'

Aegis VPN

Aegis is a VPN service hosted on MEGATRON with multi-cloud infrastructure managed by Terraform.

Overview

PropertyValue
Primary Domainaegis.m3gatr0n.com
TypeVPN Service
Namespacesaegis (prod), aegis-dev (dev)
EnvironmentsProduction, Development
Source Code/home/lucas/vpn/
IaCTerraform at /home/lucas/vpn/infrastructure/terraform/, Helm at /home/lucas/vpn/charts/aegis/, Kustomize at /home/lucas/vpn/k8s/

URLs

ServiceProductionDevelopment
Mainaegis.m3gatr0n.comdev-aegis.m3gatr0n.com
APIapi.aegis.m3gatr0n.com-
VPNvpn.m3gatr0n.com-

Multi-Cloud Infrastructure

Aegis VPN has Terraform configurations for deploying VPN endpoints across multiple cloud providers:

ProviderLocation
AWS/home/lucas/vpn/infrastructure/terraform/aws/
Azure/home/lucas/vpn/infrastructure/terraform/azure/
GCP/home/lucas/vpn/infrastructure/terraform/gcp/
DigitalOcean/home/lucas/vpn/infrastructure/terraform/do/
Hetzner/home/lucas/vpn/infrastructure/terraform/hetzner/
Vultr/home/lucas/vpn/infrastructure/terraform/vultr/
Oracle Cloud/home/lucas/vpn/infrastructure/terraform/oracle/

Kustomize Overlays

/home/lucas/vpn/k8s/
├── base/
├── overlays/
│   ├── megatron/
│   ├── dev/
│   └── prod/

Quick Commands

kubectl get pods -n aegis
kubectl get pods -n aegis-dev

TODO: expand with VPN architecture, client configuration, and cloud deployment procedures.

Other Applications

Additional applications and services not covered by individual pages.

Coolify

PropertyValue
TypePaaS Platform
PlatformDocker (not K3s)
URLlocalhost:8000
Imageghcr.io/coollabsio/coolify
StatusRunning (2 months)
DatabaseMariaDB 11 (port 3307)
CacheRedis 7 Alpine (port 6380)

Coolify is a self-hosted PaaS (Platform as a Service) for deploying applications. It runs as a Docker container alongside its MariaDB database and Redis cache.

Forgejo (Git)

PropertyValue
Domaingit.m3gatr0n.com
SSH Port2223
PlatformK3s (likely) or Docker

Self-hosted Git forge for source code management.

# Git clone via SSH
git clone ssh://git@megatron:2223/user/repo.git

Meilisearch

PropertyValue
Port7700
PlatformDocker
Imagegetmeili/meilisearch
StatusRunning (4 weeks)

Full-text search engine used by the Bibliotheca stack for book search functionality.

SonarQube

PropertyValue
Namespacesonarqube
PlatformK3s
PurposeCode quality analysis

TODO: expand with SonarQube configuration, project setup, and quality gate definitions.

MinIO / S3

PropertyValue
Domainss3.m3gatr0n.com, minio.m3gatr0n.com
PurposeS3-compatible object storage

TODO: expand with bucket configuration and access credentials management.

Authentik (Auth)

Authentik is the SSO/OIDC identity provider for the MEGATRON cluster, providing centralized authentication for all services.

Overview

PropertyValue
Domainauth.m3gatr0n.com
Namespaceauthentik
TypeOIDC/SAML/LDAP identity provider
ComponentsServer, Worker, Redis, PostgreSQL

Components

PodPurposeStatus
authentik-serverMain Authentik application serverRunning
authentik-workerBackground task processorRunning (12 restarts)

Access

  • Admin UI: https://auth.m3gatr0n.com/if/admin/
  • User Portal: https://auth.m3gatr0n.com/

Capabilities

  • OIDC/OAuth2 provider for application SSO
  • SAML 2.0 for enterprise integrations
  • LDAP outpost for legacy applications
  • Flows and stages for customizable authentication
  • MFA support (TOTP, WebAuthn, SMS)
kubectl get pods -n authentik
kubectl logs -n authentik -l app.kubernetes.io/name=authentik-server --tail=50

TODO: expand with OIDC client configurations, connected applications, and flow details.

HashiCorp Vault

Vault provides centralized secrets management for the MEGATRON cluster.

Overview

PropertyValue
Namespacevault
AccessInternal (ClusterIP) on port 8200
Uptime3h51m at last audit (recently restarted)
StatusRunning

Key Concerns

  • Vault was recently restarted (only 3h51m uptime at audit). After a restart, Vault needs to be unsealed before it can serve secrets.
  • Verify seal status: kubectl exec -n vault vault-0 -- vault status

Quick Commands

kubectl get pods -n vault
kubectl exec -n vault vault-0 -- vault status
kubectl exec -n vault vault-0 -- vault secrets list

TODO: expand with secret engine configuration, policies, Kubernetes auth method, and backup procedures.

Harbor (Registry)

Harbor is a container image registry hosted on the MEGATRON cluster.

Overview

PropertyValue
Domainregistry.m3gatr0n.com
Namespaceregistry
TLS StatusNOT READY (20 days)
ComponentsCore, database, Redis, Trivy (vulnerability scanning)

Known Issue

The harbor-tls certificate has been NOT READY for 20 days due to the HTTP-01 ACME challenge failure behind the Cloudflare tunnel. See TLS Certificates and Certificate Renewal.

Usage

# Login (may fail due to TLS issue)
docker login registry.m3gatr0n.com

# Push an image
docker tag myapp:latest registry.m3gatr0n.com/project/myapp:latest
docker push registry.m3gatr0n.com/project/myapp:latest

# Check pods
kubectl get pods -n registry

TODO: expand with project configuration, robot accounts, replication rules, and vulnerability scanning setup.

Devtron (CI/CD)

Devtron is a CI/CD and GitOps platform running on the MEGATRON cluster.

Overview

PropertyValue
Domainplatform.m3gatr0n.com
Namespacedevtroncd
TLS StatusNOT READY (20 days)
ComponentsDevtron server, ArgoCD, NATS, PostgreSQL, Git Sensor, Dashboard

Known Issue

The devtron-tls certificate has been NOT READY for 20 days. See TLS Certificates.

Components

ComponentPurpose
devtronMain Devtron application
argocd-dex-serverOIDC provider for ArgoCD
dashboardDevtron web UI
git-sensorGit repository monitoring
kubelinkKubernetes cluster connector
kubewatchKubernetes event watcher
devtron-natsMessage bus (NATS)
postgresqlDatabase
kubectl get pods -n devtroncd

TODO: expand with pipeline configurations, connected repositories, and deployment workflows.

Prometheus & Grafana

The monitoring stack provides metrics collection, visualization, and alerting for the MEGATRON cluster.

Overview

ComponentDomainPortNamespace
Prometheusprometheus.m3gatr0n.com9090monitoring
Grafanagrafana.m3gatr0n.com3000monitoring
AlertManageralertmanager.m3gatr0n.com9093monitoring

Prometheus

Prometheus scrapes metrics from Kubernetes pods, nodes, and services. Key metrics include:

  • Node CPU, memory, disk, network
  • Pod resource usage
  • K3s API server latency
  • Application-specific metrics

Grafana

Grafana provides dashboards for visualizing Prometheus metrics. Access at https://grafana.m3gatr0n.com.

AlertManager

AlertManager routes alerts from Prometheus to notification channels.

Known Issue: AlertManager is consuming 203% CPU (24K+ hours runtime). See Current Issues.

kubectl get pods -n monitoring
kubectl top pods -n monitoring

TODO: expand with dashboard inventory, alert rules, notification channels, and retention configuration.

Loki (Logs)

Loki is a log aggregation system in the monitoring namespace, designed for efficient log querying with Grafana.

Overview

PropertyValue
Namespacemonitoring
AccessInternal (ClusterIP) on port 3100
IntegrationGrafana (LogQL queries)

How It Works

Loki collects logs from all pods via Promtail (or Grafana Agent) and indexes them by labels rather than full-text. Logs can be queried through Grafana using LogQL.

kubectl get pods -n monitoring -l app=loki

TODO: expand with retention policies, storage backend, LogQL query examples, and Promtail/Agent configuration.

AlertManager

AlertManager handles alert routing, deduplication, and notification from Prometheus.

Overview

PropertyValue
Domainalertmanager.m3gatr0n.com
Namespacemonitoring
Port9093
Status203% CPU (known issue)

Known Issue

AlertManager is consuming 203% CPU with 24,000+ accumulated CPU hours. This indicates a memory leak, alert routing loop, or excessive alert volume. See Current Issues.

Immediate remediation:

kubectl rollout restart statefulset/alertmanager -n monitoring

Quick Commands

kubectl get pods -n monitoring -l app.kubernetes.io/name=alertmanager
kubectl top pod -n monitoring -l app.kubernetes.io/name=alertmanager
kubectl logs -n monitoring -l app.kubernetes.io/name=alertmanager --tail=100

TODO: expand with alert routing configuration, receiver setup, silence management, and integration with Slack (#ultrathink-agents channel).

Longhorn (Storage)

Longhorn provides distributed block storage for the K3s cluster, replicating data across all three nodes for redundancy.

Overview

PropertyValue
Namespacelonghorn-system
TypeDistributed block storage
ReplicationAcross megatron, thing1, thing2
StorageClasslonghorn

Features

  • Automatic replication across nodes
  • Snapshot and backup support
  • Volume expansion
  • Web UI for management
  • CSI driver for Kubernetes PV provisioning

Quick Commands

kubectl get pods -n longhorn-system
kubectl get volumes.longhorn.io -n longhorn-system
kubectl get replicas.longhorn.io -n longhorn-system

TODO: expand with volume inventory, backup configuration, snapshot policies, and disaster recovery procedures.

Linkerd (Mesh)

Linkerd is a lightweight service mesh providing mutual TLS, traffic metrics, and reliability features for the K3s cluster.

Overview

PropertyValue
Namespacelinkerd
Age11 hours (recently deployed)
TypeService mesh

Features

  • Automatic mutual TLS (mTLS) between meshed pods
  • Per-route metrics and latency tracking
  • Traffic splitting for canary deployments
  • Retries and timeouts

Status

Linkerd was recently deployed/redeployed (11 hours old at audit time). Monitor for stability issues.

kubectl get pods -n linkerd
# If linkerd CLI is installed:
linkerd check
linkerd stat deployment -A

TODO: expand with injection status per namespace, traffic policies, and dashboard access.

MLflow

MLflow provides experiment tracking for ULTRATHINK research projects on the MEGATRON cluster.

Overview

PropertyValue
Namespaceai-ml
AccessInternal (ClusterIP)
PurposeML experiment tracking, model registry, artifact storage

Usage with ULTRATHINK

Each research project logs experiments to MLflow:

import mlflow

mlflow.set_tracking_uri("http://mlflow.ai-ml.svc.cluster.local:5000")
mlflow.set_experiment("rosa-vit")

with mlflow.start_run():
    mlflow.log_param("learning_rate", 0.001)
    mlflow.log_metric("accuracy", 0.95)
    mlflow.log_artifact("model.pt")
kubectl get pods -n ai-ml -l app=mlflow

TODO: expand with experiment inventory, model registry contents, and artifact storage configuration.

Ollama

Ollama provides local LLM inference on the MEGATRON cluster, using GPU acceleration for fast generation.

Overview

PropertyValue
Namespacesai-ml, glamhub
Port11434
GPURTX 3090 (GPU 0, ~2.7 GB VRAM at idle)

Deployments

Ollama runs in two namespaces:

NamespacePurposeNotes
ai-mlGeneral LLM inference for researchCluster-wide access
glamhubContent generation for GlamHubN8N workflow integration

Usage

# From within the cluster
curl http://ollama.ai-ml.svc.cluster.local:11434/api/generate \
  -d '{"model": "llama3", "prompt": "Hello"}'

# List loaded models
curl http://ollama.ai-ml.svc.cluster.local:11434/api/tags
kubectl get pods -n ai-ml -l app=ollama

TODO: expand with model inventory, VRAM requirements per model, and performance benchmarks.

JupyterHub

JupyterHub provides multi-user Jupyter notebook server for interactive research on the MEGATRON cluster.

Overview

PropertyValue
Namespacejupyterhub
AccessInternal (ClusterIP)
PurposeInteractive notebooks for ULTRATHINK research

Features

  • Multi-user notebook environment
  • GPU access for research notebooks
  • Persistent storage per user
  • Support for Python, R, and Julia kernels
kubectl get pods -n jupyterhub

TODO: expand with user management, GPU allocation, storage configuration, and custom image details.

OpenFaaS

OpenFaaS provides serverless function execution on the K3s cluster.

Overview

PropertyValue
Namespaceopenfaas
TypeServerless / FaaS platform

Features

  • Deploy functions as containers
  • Auto-scaling based on demand
  • Multiple language templates
  • REST API for invocation
kubectl get pods -n openfaas
# If faas-cli installed:
faas-cli list

TODO: expand with deployed functions, scaling configuration, and integration points.

Argo Workflows

Argo Workflows provides Kubernetes-native workflow orchestration for data pipelines and ML workflows.

Overview

PropertyValue
Namespaceargo
TypeWorkflow orchestration engine
ComponentsWorkflow controller, server

Use Cases

  • ML training pipelines
  • Data processing workflows
  • CI/CD pipeline steps
  • Batch job orchestration
kubectl get pods -n argo
# If argo CLI installed:
argo list -n argo

TODO: expand with workflow templates, cron workflows, artifact configuration, and integration with MLflow.

cert-manager

cert-manager automates TLS certificate provisioning and renewal in the K3s cluster.

Overview

PropertyValue
Namespacecert-manager
ComponentsController, Webhook, CA Injector
Issuerletsencrypt-prod (HTTP-01, BROKEN)

Known Issue

The HTTP-01 ACME challenge solver does not work behind the Cloudflare tunnel. This is the root cause of multiple NOT READY certificates. See TLS Certificates and Certificate Renewal for the DNS-01 migration plan.

Components

PodRestartsPurpose
cert-manager24Main controller, watches Certificate resources
cert-manager-cainjector28Injects CA bundles into webhooks
cert-manager-webhook22Validates and mutates Certificate resources

The high restart counts (22-28) are accumulated over 37 days of uptime.

Issuers

NameTypeSolverStatus
letsencrypt-prodClusterIssuerHTTP-01Broken behind tunnel
letsencrypt-stagingClusterIssuerHTTP-01FALSE/Error

Quick Commands

kubectl get pods -n cert-manager
kubectl get clusterissuer
kubectl get certificates -A
kubectl get challenges -A
kubectl logs -n cert-manager deployment/cert-manager --tail=100

TODO: expand with full issuer YAML, wildcard certificate setup, and DNS-01 configuration after migration.

Coolify

Coolify is a self-hosted PaaS (Platform as a Service) running as a Docker container on MEGATRON.

Overview

PropertyValue
PlatformDocker (not K3s)
URLlocalhost:8000
Imageghcr.io/coollabsio/coolify
StatusRunning (2 months)
DatabaseMariaDB 11 (port 3307)
CacheRedis 7 Alpine (port 6380)

Containers

ContainerImagePortStatus
coolifyghcr.io/coollabsio/coolify8000Running
mariadbmariadb:113307Running
redisredis:7-alpine6380Running

Access

Coolify is available at http://localhost:8000 from MEGATRON.

docker ps --filter "name=coolify"
docker logs coolify --tail=50

TODO: expand with deployed applications, team configuration, and Git integration.

Docker Containers Overview

In addition to the K3s Kubernetes cluster, MEGATRON runs several workloads directly on Docker. These are services that either predate the K3s setup, require direct hardware access (GPU), or are managed by external tools (Coolify).

Docker vs K3s

AspectDocker ContainersK3s Pods
Managementdocker CLI, Docker Composekubectl, Helm, Kustomize
NetworkingDocker bridge, port mappingK3s CNI (Flannel), ClusterIP/NodePort
StorageDocker volumes, bind mountsPVCs, Longhorn, local-path
GPU Access--gpus flag via NVIDIA runtimeGPU Operator, device plugin
Service DiscoveryManual / Docker DNSCoreDNS, K8s services

Container Groups

Bibliotheca Stack (7 containers)

Book management system with torrent client, VPN, TTS, and search. See Bibliotheca.

Coolify Stack (3 containers)

Self-hosted PaaS platform with MariaDB and Redis. See Coolify.

Meilisearch (1 container)

Full-text search engine used by Bibliotheca.

Quick Commands

# List all containers
docker ps -a

# List running containers with resource usage
docker stats --no-stream

# Check for problems
docker ps -a --filter "status=restarting"
docker ps -a --filter "status=exited"

# View Docker disk usage
docker system df

Container Inventory

Auto-generated: 2026-03-24 14:19:43 CDT

Running Containers

NameImageStatusPortsCreated
bibliotheca-post-downloadbibliotheca-post-downloadUp 38 hours2026-03-23 00:40:05 -0500 CDT
bibliotheca-torrentqbittorrent:latestUp 38 hours2026-03-23 00:24:56 -0500 CDT
bibliotheca-vpngluetunUp 38 hours (healthy)0.0.0.0:6881->6881/tcp, :::6881->6881/tcp, 8000/tcp, 8388/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:6881->6881/udp, :::8080->8080/tcp, :::6881->6881/udp, 8888/tcp, 8388/udp2026-03-23 00:24:56 -0500 CDT
bibliotheca-webbibliotheca-webUp 2 weeks0.0.0.0:3000->3000/tcp, :::3000->3000/tcp2026-02-26 17:59:10 -0600 CST
bibliotheca-discoverybibliotheca-discoveryUp 2 weeks2026-02-26 00:10:16 -0600 CST
bibliotheca-deduplicatorbibliotheca-deduplicatorUp 2 weeks2026-02-25 22:46:40 -0600 CST
bibliotheca-cover-scraperbibliotheca-cover-scraperUp 2 weeks2026-02-25 02:16:51 -0600 CST
bibliotheca-ttsbibliotheca-ttsUp 2 weeks2026-02-25 01:54:22 -0600 CST
bibliotheca-nginx04da2b0513cdUp 2 weeks0.0.0.0:8088->80/tcp, :::8088->80/tcp2026-02-25 01:44:17 -0600 CST
bibliotheca-book-searcherbibliotheca-book-searcherUp 2 weeks2026-02-25 01:37:13 -0600 CST
bibliotheca-categorizerbibliotheca-categorizerRestarting (0) 11 seconds ago2026-02-25 01:37:13 -0600 CST
bibliotheca-converterbibliotheca-converterUp 2 weeks2026-02-23 02:37:36 -0600 CST
bibliotheca-forgejoforgejo:9Up 2 weeks0.0.0.0:2223->22/tcp, :::2223->22/tcp, 0.0.0.0:3003->3000/tcp, :::3003->3000/tcp2026-02-23 02:37:36 -0600 CST
bibliotheca-dbmariadb:11Up 2 weeks (healthy)0.0.0.0:3307->3306/tcp, :::3307->3306/tcp2026-02-21 02:21:29 -0600 CST
bibliotheca-redisredis:7-alpineUp 2 weeks (healthy)0.0.0.0:6380->6379/tcp, :::6380->6379/tcp2026-02-21 02:21:29 -0600 CST
bibliotheca-searchmeilisearch:v1.6Up 2 weeks (healthy)0.0.0.0:7700->7700/tcp, :::7700->7700/tcp2026-02-21 02:21:29 -0600 CST
coolifycoolify:latestUp 2 weeks (healthy)8443/tcp, 9000/tcp, 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp2026-01-11 00:02:48 -0600 CST
coolify-realtimecoolify-realtime:1.0.10Up 2 weeks (healthy)0.0.0.0:6001-6002->6001-6002/tcp, :::6001-6002->6001-6002/tcp2026-01-11 00:02:47 -0600 CST
coolify-dbpostgres:15-alpineUp 2 weeks (healthy)5432/tcp2026-01-11 00:02:47 -0600 CST
coolify-redisredis:7-alpineUp 2 weeks (healthy)6379/tcp2026-01-11 00:02:47 -0600 CST
registryregistry:2Up 2 weeks0.0.0.0:5000->5000/tcp, :::5000->5000/tcp2025-12-26 13:45:24 -0600 CST

Stopped/Failed Containers

NameImageStatusCreated
bold_ramanujan0d36c4f63ab8Exited (1) 8 days ago2026-03-15 15:29:02 -0500 CDT
nifty_bassi1b323cd59d13Exited (1) 9 days ago2026-03-15 14:33:21 -0500 CDT
jovial_pasteure6ba6afac1ebExited (1) 9 days ago2026-03-15 12:01:47 -0500 CDT
determined_brahmaguptae6ba6afac1ebExited (1) 9 days ago2026-03-15 11:36:01 -0500 CDT
clever_murdocke6ba6afac1ebExited (1) 9 days ago2026-03-15 11:35:16 -0500 CDT
confident_eulere6ba6afac1ebExited (1) 9 days ago2026-03-15 11:34:51 -0500 CDT
interesting_khoranae6ba6afac1ebExited (1) 9 days ago2026-03-15 11:34:02 -0500 CDT
modest_brahmaguptaa01de93112bfExited (2) 2 weeks ago2026-03-03 21:29:52 -0600 CST
sleepy_lalande8be9aa337c0fExited (1) 2 weeks ago2026-03-03 21:19:15 -0600 CST
wizardly_beaver44a441a4a738Exited (1) 2 weeks ago2026-03-03 20:52:30 -0600 CST
romantic_booth8be9aa337c0fExited (1) 2 weeks ago2026-03-03 20:48:41 -0600 CST
elated_mahavira6a346f8027b4Exited (2) 2 weeks ago2026-03-03 18:57:02 -0600 CST
vigorous_lederbergb42214b42b6fExited (2) 2 weeks ago2026-03-03 18:31:29 -0600 CST
nervous_shirley7238a16adb50Exited (2) 3 weeks ago2026-03-03 13:35:43 -0600 CST
confident_payne19007f18fa3dExited (2) 3 weeks ago2026-03-03 00:12:59 -0600 CST
serene_sinoussi5e003a2074e8Exited (2) 3 weeks ago2026-03-02 23:52:31 -0600 CST
cranky_sinoussi8467a0851c46Exited (2) 3 weeks ago2026-03-02 23:52:06 -0600 CST
goofy_mendeleeve13443bb3d94Exited (2) 3 weeks ago2026-03-02 22:43:42 -0600 CST
pedantic_brattain87008d800559Exited (2) 3 weeks ago2026-03-02 22:43:17 -0600 CST
practical_eulerb1b75ed3fbe3Exited (2) 3 weeks ago2026-03-02 22:24:09 -0600 CST
quirky_margulis50f6b0e73078Exited (2) 3 weeks ago2026-03-02 22:23:42 -0600 CST
xenodochial_yalow6cc7ba33c25eExited (1) 3 weeks ago2026-03-01 11:18:25 -0600 CST
bibliotheca-worker5ef3e2ba0154Exited (1) 13 hours ago2026-02-26 00:09:21 -0600 CST
bibliotheca-cover-cachebibliotheca-cover-cacheExited (0) 13 hours ago2026-02-26 00:09:21 -0600 CST
bibliotheca-epub-coversbibliotheca-epub-coversExited (0) 13 hours ago2026-02-25 23:42:34 -0600 CST
bibliotheca-enricherbibliotheca-enricherExited (137) 3 weeks ago2026-02-25 01:33:06 -0600 CST
bibliotheca-coversbibliotheca-cover-downloaderExited (137) 3 weeks ago2026-02-25 01:33:06 -0600 CST
bibliotheca-indexera74599bec841Exited (0) 4 weeks ago2026-02-21 11:37:37 -0600 CST
ecstatic_moore9dd4f170174fExited (1) 2 months ago2025-12-25 19:04:47 -0600 CST
pedantic_benzd8d8e4f1d64dExited (1) 2 months ago2025-12-25 18:59:12 -0600 CST
dazzling_albattanid8d8e4f1d64dExited (1) 2 months ago2025-12-25 18:57:20 -0600 CST
frosty_mirzakhanib3c88ff210fbExited (1) 2 months ago2025-12-25 18:55:02 -0600 CST
mystifying_ramanujan5f7dad7f926aExited (1) 2 months ago2025-12-25 18:52:42 -0600 CST

Docker Networks

NETWORK ID     NAME                  DRIVER    SCOPE
27f8a63320e1   bibliotheca_default   bridge    local
6bfbd9cb7abd   bridge                bridge    local
b661cb5621cd   coolify               bridge    local
5f611afa1878   host                  host      local
0c7471e13bbb   none                  null      local

Docker Volumes

DRIVER    VOLUME NAME
local     7a5fe936b9a7dea50b570ed2d98e3aeb059d4a37e48a7f78ce6ecf7a2c003721
local     171145ba1b89149e3b254bb9480fb38a7de1135d9ee6c08689bd1c8542233b2c
local     bibliotheca_converter_cache
local     bibliotheca_db_data
local     bibliotheca_forgejo_data
local     bibliotheca_gluetun_data
local     bibliotheca_redis_data
local     bibliotheca_search_data
local     bibliotheca_torrent_config
local     coolify-db
local     coolify-redis

Network Architecture

MEGATRON uses a layered networking architecture combining Cloudflare tunnels for public ingress, Tailscale for private mesh networking, and Traefik for Kubernetes-level routing.

Architecture Overview

┌─────────────────────────────────────────────────────────────────┐
│                        INTERNET                                  │
└──────────────────────────┬──────────────────────────────────────┘
                           │
                           v
┌─────────────────────────────────────────────────────────────────┐
│                   CLOUDFLARE (DNS + WAF)                         │
│                                                                  │
│  Domains: stiq.us, corestation.io, idp.pro,                     │
│           kelseyfarmequipment.com, m3gatr0n.com                  │
│                                                                  │
│  Tunnel: 6d8885c4-97d9-43fd-8426-78a00c2834f1                   │
│  Routes: 49 hostname-based rules                                 │
│  Pattern: hostname -> https://localhost:32672 (noTLSVerify)      │
└──────────────────────────┬──────────────────────────────────────┘
                           │
                           v
┌─────────────────────────────────────────────────────────────────┐
│                   MEGATRON (Host)                                 │
│                                                                  │
│  cloudflared ──────> localhost:32672                              │
│                           │                                      │
│                           v                                      │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │              Traefik Ingress Controller                     │  │
│  │              (kube-system, NodePort :32672)                 │  │
│  │                                                            │  │
│  │  Host-based routing:                                       │  │
│  │  *.stiq.us ──────────────> stiq / stiq-dev / stiq-staging  │  │
│  │  *.corestation.io ───────> corestation / *-dev / *-staging │  │
│  │  *.idp.pro ──────────────> idp / idp-dev                   │  │
│  │  *.m3gatr0n.com ─────────> glamhub, auth, monitoring, etc  │  │
│  │  kelseyfarmequipment.com > kelsey                          │  │
│  └────────────────────────────────────────────────────────────┘  │
│                           │                                      │
│                           v                                      │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │              K3s Pod Network (ClusterIP services)           │  │
│  │              Linkerd Service Mesh (mTLS)                    │  │
│  └────────────────────────────────────────────────────────────┘  │
│                                                                  │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │              Tailscale Mesh (WireGuard)                     │  │
│  │  megatron: 100.70.25.47                                    │  │
│  │  mac-studio: 100.87.201.64                                 │  │
│  │  macbook-m4: 100.91.253.88                                 │  │
│  │  lambda: 100.108.49.109                                    │  │
│  └────────────────────────────────────────────────────────────┘  │
│                                                                  │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │              Docker Bridge Network                          │  │
│  │  Bibliotheca containers, Coolify                            │  │
│  │  localhost:8080 (qBittorrent), :8088 (nginx), :8000        │  │
│  └────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘

Port Map

External Ports (Internet-facing via Cloudflare)

All public traffic enters through the Cloudflare tunnel -- no ports are directly exposed to the internet.

Host Ports

PortServiceProtocolAccess
22SSH (normal)TCPLAN / Tailscale
2222SSH (rescue, high priority)TCPLAN / Tailscale
2223Forgejo SSH (Git)TCPLAN / Tailscale
6443K3s API serverTCPLAN / Tailscale
8000CoolifyTCPlocalhost
8080qBittorrent (Bibliotheca)TCPlocalhost
8088Bibliotheca nginxTCPlocalhost
7700MeilisearchTCPlocalhost
11434OllamaTCPClusterIP / localhost
32672Traefik NodePort (HTTPS)TCPlocalhost (cloudflared)
3307MariaDB (Coolify)TCPlocalhost
6380Redis (Coolify)TCPlocalhost

Kubernetes Service Ports (ClusterIP, internal only)

ServicePortNamespace
Traefik80, 443kube-system
CoreDNS53kube-system
Prometheus9090monitoring
Grafana3000monitoring
Loki3100monitoring
AlertManager9093monitoring
Vault8200vault
Harbor443registry

Network Layers

Layer 1: Cloudflare (Public Ingress)

All public traffic flows through Cloudflare, which provides DNS, DDoS protection, WAF, and the tunnel endpoint. See Cloudflare Tunnels.

Layer 2: Traefik (Kubernetes Ingress)

Traefik receives tunnel traffic on NodePort 32672 and routes based on hostname to the appropriate Kubernetes service. See Traefik Ingress.

Layer 3: Linkerd (Service Mesh)

Linkerd provides mutual TLS between pods, traffic metrics, and reliability features. See Linkerd.

Layer 4: Tailscale (Private Mesh)

Tailscale connects MEGATRON to other machines (Mac Studio, MacBook, Lambda) via WireGuard-based mesh VPN. See Tailscale.

Layer 5: Docker Bridge (Container Networking)

Non-K3s containers (Bibliotheca, Coolify) use Docker bridge networking with port mappings to localhost.

DNS Flow

User browser
    │
    v
DNS query: app.stiq.us
    │
    v
Cloudflare DNS ──> resolves to Cloudflare edge
    │
    v
Cloudflare tunnel routes to MEGATRON
    │
    v
cloudflared ──> https://localhost:32672
    │
    v
Traefik matches Host header ──> routes to K3s service
    │
    v
K3s service ──> Pod (via kube-proxy/iptables)

Key Networking Issues

  1. cert-manager HTTP-01 broken -- Cannot complete ACME challenges behind Cloudflare tunnel. Must migrate to DNS-01 solver.
  2. Harbor TLS NOT READY (20 days) -- Certificate pending due to HTTP-01 failure.
  3. Devtron TLS NOT READY (20 days) -- Same root cause.
  4. Monitoring wildcard cert NOT READY -- Same root cause.

See TLS Certificates for full details.

Cloudflare Tunnels

Auto-generated: 2026-03-24 14:19:43 CDT

Tunnel Configuration

  • Tunnel ID: 6d8885c4-97d9-43fd-8426-78a00c2834f1
  • Config: /etc/cloudflared/config.yml
  • Credentials: /etc/cloudflared/6d8885c4-97d9-43fd-8426-78a00c2834f1.json
  • Service: cloudflared.service (systemd)
  • Target: https://localhost:32672 (Traefik NodePort)
  • Management: mgt route CLI at /home/lucas/paas/bin/

Traffic Flow

Internet → Cloudflare Edge → cloudflared tunnel → https://localhost:32672 → Traefik → k8s Service

Route Table

#HostnameTargetDomain Group
1dev-aegis.m3gatr0n.comlocalhost:32672m3gatr0n.com
2aegis.m3gatr0n.comlocalhost:32672m3gatr0n.com
3api.aegis.m3gatr0n.comlocalhost:32672m3gatr0n.com
4vpn.m3gatr0n.comlocalhost:32672m3gatr0n.com
5alertmanager.m3gatr0n.comlocalhost:32672m3gatr0n.com
6auth.m3gatr0n.comlocalhost:32672m3gatr0n.com
7dev.corestation.iolocalhost:32672corestation.io
8dev-api.corestation.iolocalhost:32672corestation.io
9corestation.iolocalhost:32672corestation.io
10api.corestation.iolocalhost:32672corestation.io
11app.corestation.iolocalhost:32672corestation.io
12admin.corestation.iolocalhost:32672corestation.io
13staging.corestation.iolocalhost:32672corestation.io
14staging-api.corestation.iolocalhost:32672corestation.io
15grafana.m3gatr0n.comlocalhost:32672m3gatr0n.com
16dev.idp.prolocalhost:32672idp.pro
17idp.prolocalhost:32672idp.pro
18api.idp.prolocalhost:32672idp.pro
19app.idp.prolocalhost:32672idp.pro
20dev.kelseyfarmequipment.comlocalhost:32672kelseyfarmequipment.com
21kelseyfarmequipment.comlocalhost:32672kelseyfarmequipment.com
22www.kelseyfarmequipment.comlocalhost:32672kelseyfarmequipment.com
23api.kelseyfarmequipment.comlocalhost:32672kelseyfarmequipment.com
24s3.m3gatr0n.comlocalhost:32672m3gatr0n.com
25minio.m3gatr0n.comlocalhost:32672m3gatr0n.com
26platform.m3gatr0n.comlocalhost:32672m3gatr0n.com
27prometheus.m3gatr0n.comlocalhost:32672m3gatr0n.com
28registry.m3gatr0n.comlocalhost:32672m3gatr0n.com
29dev.stiq.uslocalhost:32672stiq.us
30dev-api.stiq.uslocalhost:32672stiq.us
31dev-app.stiq.uslocalhost:32672stiq.us
32dev-admin.stiq.uslocalhost:32672stiq.us
33grafana.stiq.uslocalhost:32672stiq.us
34stiq.uslocalhost:32672stiq.us
35api.stiq.uslocalhost:32672stiq.us
36app.stiq.uslocalhost:32672stiq.us
37admin.stiq.uslocalhost:32672stiq.us
38staging.stiq.uslocalhost:32672stiq.us
39staging-api.stiq.uslocalhost:32672stiq.us
40staging-app.stiq.uslocalhost:32672stiq.us
41staging-admin.stiq.uslocalhost:32672stiq.us
42glamhub.m3gatr0n.comlocalhost:32672m3gatr0n.com
43admin-glamhub.m3gatr0n.comlocalhost:32672m3gatr0n.com
44cms-glamhub.m3gatr0n.comlocalhost:32672m3gatr0n.com
45n8n-glamhub.m3gatr0n.comlocalhost:32672m3gatr0n.com
46docs.m3gatr0n.comlocalhost:32672m3gatr0n.com
47wiki.m3gatr0n.comlocalhost:32672m3gatr0n.com
48git.m3gatr0n.comlocalhost:32672m3gatr0n.com

Routes by Domain

m3gatr0n.com

  • dev-aegis.m3gatr0n.com
  • aegis.m3gatr0n.com
  • api.aegis.m3gatr0n.com
  • vpn.m3gatr0n.com
  • alertmanager.m3gatr0n.com
  • auth.m3gatr0n.com
  • grafana.m3gatr0n.com
  • s3.m3gatr0n.com
  • minio.m3gatr0n.com
  • platform.m3gatr0n.com
  • prometheus.m3gatr0n.com
  • registry.m3gatr0n.com
  • glamhub.m3gatr0n.com
  • admin-glamhub.m3gatr0n.com
  • cms-glamhub.m3gatr0n.com
  • n8n-glamhub.m3gatr0n.com
  • docs.m3gatr0n.com
  • wiki.m3gatr0n.com
  • git.m3gatr0n.com

stiq.us

  • dev.stiq.us
  • dev-api.stiq.us
  • dev-app.stiq.us
  • dev-admin.stiq.us
  • grafana.stiq.us
  • api.stiq.us
  • app.stiq.us
  • admin.stiq.us
  • staging.stiq.us
  • staging-api.stiq.us
  • staging-app.stiq.us
  • staging-admin.stiq.us

corestation.io

  • dev.corestation.io
  • dev-api.corestation.io
  • api.corestation.io
  • app.corestation.io
  • admin.corestation.io
  • staging.corestation.io
  • staging-api.corestation.io

idp.pro

  • dev.idp.pro
  • api.idp.pro
  • app.idp.pro

kelseyfarmequipment.com

  • dev.kelseyfarmequipment.com
  • www.kelseyfarmequipment.com
  • api.kelseyfarmequipment.com

Catch-All Rule

Unmatched requests return HTTP 404.

Tailscale

Tailscale provides a WireGuard-based mesh VPN connecting MEGATRON to other machines in the network. It enables secure, direct SSH access and inter-machine communication without exposing ports to the internet.

Tailscale Mesh

MachineHostnameTailscale IPRoleHardware
MEGATRONmegatron100.70.25.47Primary server, K3s control planeThreadripper 3990X, 251GB, 2x RTX 3090
Mac Studiolucass-mac-studio100.87.201.64Inference, visualization, large modelsM2 Ultra, 512GB unified, 7.3TB
MacBook M4macbook-pro-m4100.91.253.88Development, quick testsM4 Max, 64GB
Lambda Laptoptensorbook100.108.49.109Ablations, single-GPU experiments1x RTX GPU, 64GB

Network Diagram

                    ┌─────────────────────┐
                    │     Tailscale       │
                    │   Coordination      │
                    │     Server          │
                    └─────────┬───────────┘
                              │ (control plane only,
                              │  data flows peer-to-peer)
         ┌────────────────────┼────────────────────┐
         │                    │                    │
         v                    v                    v
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│    MEGATRON     │ │   Mac Studio    │ │  MacBook M4     │
│  100.70.25.47   │ │ 100.87.201.64   │ │ 100.91.253.88   │
│                 │ │                 │ │                 │
│  K3s cluster    │<────────────────>│  Development    │
│  GPU training   │ │  Inference      │ │  Quick tests    │
│  Prod hosting   │ │  Visualization  │ │                 │
└────────┬────────┘ │  Large models   │ └─────────────────┘
         │          └─────────────────┘
         │
         v
┌─────────────────┐
│  Lambda Laptop  │
│ 100.108.49.109  │
│                 │
│  Ablations      │
│  Single-GPU     │
└─────────────────┘

SSH via Tailscale

SSH config entries for Tailscale-based access (from ~/.ssh/config):

SSH AliasTargetIPNotes
mac-studioMac Studio M2 Ultra100.87.201.64Also available as mac-studio-local (10.0.0.71 LAN)
macbook-m4MacBook M4 Max100.91.253.88
tensorbookLambda Laptop100.108.49.109
megatron-rescueMEGATRON rescue SSHlocalhost:2222High-priority access
# SSH to Mac Studio via Tailscale
ssh mac-studio

# SSH to MacBook
ssh macbook-m4

# SSH to Lambda
ssh tensorbook

Use Cases

Research Workload Distribution

MachineUse For
MEGATRONFull training runs, distributed (multi-GPU) experiments
Mac StudioInference, visualization, loading large models (512GB memory)
MacBook M4Development, quick iteration, code editing
LambdaSingle-GPU ablations, smaller experiments

Data Transfer

# Copy dataset from MEGATRON to Mac Studio
scp -r /mnt/shared/datasets/cifar10 mac-studio:~/datasets/

# Rsync checkpoints
rsync -avz /mnt/shared/checkpoints/rosa/ mac-studio:~/checkpoints/rosa/

# Copy results back
scp mac-studio:~/results/inference.json /mnt/shared/results/

Tailscale Management

# Check Tailscale status
tailscale status

# Check connection to a specific peer
tailscale ping mac-studio

# View Tailscale IP
tailscale ip

# Check network diagnostics
tailscale netcheck

# Enable/disable Tailscale
sudo tailscale up
sudo tailscale down

Tailscale on K3s

Tailscale runs as a system service (tailscaled.service) and provides an overlay network independent of the K3s cluster network. Pods within K3s do not use Tailscale directly -- Tailscale is used for machine-to-machine communication and SSH access.

Traefik Ingress

Traefik is the default ingress controller for K3s, handling all HTTP/HTTPS traffic routing to Kubernetes services.

Overview

PropertyValue
Namespacekube-system
VersionBundled with K3s v1.33.6
NodePort32672 (HTTPS)
TypeIngress controller

How Traffic Reaches Traefik

cloudflared (Cloudflare tunnel)
    |
    v
https://localhost:32672 (noTLSVerify)
    |
    v
Traefik (kube-system)
    |
    v
IngressRoute rules match Host header
    |
    v
Backend K8s Service -> Pod

Routing

Traefik uses IngressRoute CRDs (Traefik's native routing) for hostname-based routing. Each application defines its own IngressRoute in its namespace.

# List all IngressRoutes
kubectl get ingressroute -A

# Describe a specific route
kubectl describe ingressroute <name> -n <namespace>

# Check Traefik pods
kubectl get pods -n kube-system -l app.kubernetes.io/name=traefik

# Traefik dashboard (if enabled)
kubectl port-forward -n kube-system svc/traefik-dashboard 9000:9000

TODO: expand with middleware configuration, rate limiting, TLS configuration, and dashboard access.

DNS & Domains

All external domains are managed through Cloudflare DNS, with traffic routed through the Cloudflare tunnel.

Domain Inventory

DomainRegistrarDNS ProviderPurpose
m3gatr0n.com-CloudflareInfrastructure services
stiq.us-CloudflareSTIQ SaaS platform
corestation.io-CloudflareCoreStation fire dept SaaS
idp.pro-CloudflareIDP identity platform
kelseyfarmequipment.com-CloudflareKelsey e-commerce

Subdomain Usage

m3gatr0n.com (Infrastructure)

SubdomainService
authAuthentik SSO
aegisAegis VPN
api.aegisAegis API
dev-aegisAegis dev
vpnVPN endpoint
glamhubGlamHub frontend
admin-glamhubGlamHub Directus
cms-glamhubGlamHub CMS API
n8n-glamhubGlamHub N8N
registryHarbor container registry
platformDevtron CI/CD
grafanaGrafana dashboards
prometheusPrometheus metrics
alertmanagerAlertManager UI
s3MinIO S3 API
minioMinIO console
docsDocumentation
wikiWiki.js
gitForgejo

Internal DNS

Kubernetes internal DNS is handled by CoreDNS in the kube-system (or dns) namespace. Services are reachable at:

<service>.<namespace>.svc.cluster.local

TODO: expand with DNS record details, TTL settings, and external-dns configuration.

TLS Certificates

TLS certificates are managed by cert-manager in the Kubernetes cluster. There are currently several certificates in a broken state due to the HTTP-01 challenge solver being incompatible with the Cloudflare tunnel architecture.

Certificate Inventory

CertificateNamespaceIssuerStatusAgeNotes
kuber-cadefaultSelf-signedReady-Internal CA
traefik-dashboard-tlskube-systemletsencrypt-prodReady-Traefik admin
wildcard-sslipdefaultletsencrypt-prodReady-sslip.io wildcard
harbor-tlsregistryletsencrypt-prodNOT READY20 daysHTTP-01 failure
devtron-tlsdevtroncdletsencrypt-prodNOT READY20 daysHTTP-01 failure
wildcard-sslip-tlsmonitoringletsencrypt-prodNOT READY-HTTP-01 failure

Issuers

IssuerTypeStatusNotes
letsencrypt-prodClusterIssuer, ACME HTTP-01ActiveBROKEN behind tunnel
letsencrypt-stagingClusterIssuer, ACME HTTP-01FALSEStaging issuer in error state

The HTTP-01 Problem

The current cert-manager configuration uses HTTP-01 ACME challenges. This solver requires Let's Encrypt to make an HTTP request to http://<domain>/.well-known/acme-challenge/<token> to verify domain ownership.

This does not work behind a Cloudflare tunnel because:

Let's Encrypt ──> Cloudflare ──> tunnel ──> Traefik ──> cert-manager solver pod
                       │
                       └── Cloudflare may cache, redirect to HTTPS,
                           or otherwise interfere with the challenge

The Cloudflare tunnel and its "Always Use HTTPS" setting redirects HTTP challenges to HTTPS, causing validation to fail.

Required Fix: DNS-01 Solver

The solution is to migrate from HTTP-01 to DNS-01 challenge solver. DNS-01 verifies domain ownership by creating a TXT record in DNS, which works regardless of tunnel configuration.

Migration Steps

  1. Create a Cloudflare API token with DNS edit permissions
  2. Store the token as a Kubernetes secret
  3. Update the ClusterIssuer to use DNS-01 with Cloudflare
  4. Re-request failed certificates

See Certificate Renewal Runbook for the full procedure.

Target Configuration

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-prod-key
    solvers:
    - dns01:
        cloudflare:
          apiTokenSecretRef:
            name: cloudflare-api-token
            key: api-token

Affected Services

The following services have broken TLS due to the HTTP-01 issue:

ServiceCertificateImpact
Harborharbor-tlsRegistry unreachable via HTTPS from external
Devtrondevtron-tlsCI/CD dashboard TLS broken
Monitoringwildcard-sslip-tlsMonitoring dashboards may show cert warnings

Working Certificates

These certificates were issued before the problem manifested or use a different mechanism:

CertificateWhy It Works
kuber-caSelf-signed, no ACME needed
traefik-dashboard-tlsIssued when HTTP-01 was working, auto-renewed before expiry
wildcard-sslipsslip.io domain may resolve differently

Quick Commands

# List all certificates
kubectl get certificates -A

# Check certificate details
kubectl describe certificate harbor-tls -n registry

# Check cert-manager logs
kubectl logs -n cert-manager -l app=cert-manager --tail=100

# Check issuer status
kubectl get clusterissuer

# Force certificate re-request (delete and recreate)
kubectl delete certificate harbor-tls -n registry
# Then re-apply the Certificate resource

# Check ACME challenge status
kubectl get challenges -A
kubectl describe challenge -A

IaC Overview

MEGATRON's infrastructure is managed through a combination of Infrastructure as Code tools: Terraform for cloud resources, Helm for Kubernetes package management, Kustomize for environment-specific overlays, and Docker Compose for non-K3s workloads.

Tool Inventory

ToolPurposeLocations
TerraformCloud provider infrastructure (AWS, Azure, GCP, DO, Hetzner, Vultr, Oracle)/home/lucas/vpn/infrastructure/terraform/
HelmKubernetes application packaging and deploymentMultiple chart directories
KustomizeEnvironment-specific K8s manifest overlaysMultiple overlay directories
Docker ComposeMulti-container local workloads/home/lucas/ultrathink-infra/, /home/lucas/bibliotheca/, etc.

Coverage Map

┌─────────────────────────────────────────────────────────┐
│                   IaC Coverage                           │
│                                                         │
│  ┌──────────────────────┐  ┌─────────────────────────┐  │
│  │  TERRAFORM            │  │  HELM                    │  │
│  │                      │  │                         │  │
│  │  Aegis VPN infra:    │  │  IDP platform:           │  │
│  │  - AWS               │  │  - core-platform        │  │
│  │  - Azure             │  │  - argocd               │  │
│  │  - GCP               │  │  - external-dns         │  │
│  │  - DigitalOcean      │  │  - cnpg                 │  │
│  │  - Hetzner           │  │  - weaviate             │  │
│  │  - Vultr             │  │  - grafana              │  │
│  │  - Oracle            │  │                         │  │
│  └──────────────────────┘  │  Aegis VPN:             │  │
│                            │  - aegis chart          │  │
│  ┌──────────────────────┐  │                         │  │
│  │  KUSTOMIZE            │  │  Kelsey Equipment:      │  │
│  │                      │  │  - irrigation-parts     │  │
│  │  CoreStation:        │  └─────────────────────────┘  │
│  │  - dev overlay       │                               │
│  │  - prod overlay      │  ┌─────────────────────────┐  │
│  │                      │  │  DOCKER COMPOSE          │  │
│  │  Aegis VPN:          │  │                         │  │
│  │  - base              │  │  ULTRATHINK infra:      │  │
│  │  - megatron overlay  │  │  - JupyterLab           │  │
│  │  - dev overlay       │  │  - MLflow               │  │
│  │  - prod overlay      │  │  - TensorBoard          │  │
│  │                      │  │                         │  │
│  │  Kelsey Equipment:   │  │  Bibliotheca stack      │  │
│  │  - demo              │  │  Gene editing env       │  │
│  │  - dev               │  └─────────────────────────┘  │
│  │  - qa                │                               │
│  │  - prod              │                               │
│  └──────────────────────┘                               │
└─────────────────────────────────────────────────────────┘

Coverage Gaps

Several deployed services lack IaC definitions and were likely deployed via manual kubectl apply or UI-based tools:

ServiceCurrent StateRecommended IaC
AuthentikManual / unknownHelm chart
VaultManual / unknownHelm chart
HarborManual / unknownHelm chart
Monitoring stackManual / unknownHelm (kube-prometheus-stack)
LonghornManual / unknownHelm chart
LinkerdManual / unknownHelm chart
STIQUnknownKustomize or Helm
GlamHubUnknownKustomize or Helm

Terraform

Terraform manages cloud infrastructure for the Aegis VPN service, provisioning VPN endpoints across seven cloud providers.

Location

/home/lucas/vpn/infrastructure/terraform/

Provider Inventory

ProviderDirectoryPurpose
AWSterraform/aws/VPN endpoints on Amazon Web Services
Azureterraform/azure/VPN endpoints on Microsoft Azure
GCPterraform/gcp/VPN endpoints on Google Cloud Platform
DigitalOceanterraform/do/VPN endpoints on DigitalOcean
Hetznerterraform/hetzner/VPN endpoints on Hetzner Cloud
Vultrterraform/vultr/VPN endpoints on Vultr
Oracle Cloudterraform/oracle/VPN endpoints on Oracle Cloud

Usage

cd /home/lucas/vpn/infrastructure/terraform/<provider>/

# Initialize
terraform init

# Plan changes
terraform plan

# Apply changes
terraform apply

# Destroy resources
terraform destroy

TODO: expand with state backend configuration, variable definitions, module structure, and cost estimates per provider.

Helm Charts

Helm charts are used for deploying complex Kubernetes applications with templated manifests and configurable values.

Chart Inventory

IDP Platform Charts

Location: /home/lucas/idp/infra/charts/

ChartPurposeKey Components
core-platformIDP application stackAPI, frontend, workers
argocdGitOps CD for IDPArgoCD server, repo server, controller
external-dnsAutomatic DNS record managementSyncs K8s ingress to DNS provider
cnpgCloudNativePG (PostgreSQL operator)Database clusters, backups, replication
weaviateVector databaseVector search engine for IDP
grafanaMonitoring dashboardsGrafana with IDP-specific dashboards

Aegis VPN Chart

Location: /home/lucas/vpn/charts/aegis/

ChartPurposeKey Components
aegisVPN service deploymentVPN server, API, management UI

Kelsey Farm Equipment Chart

Location: /home/lucas/irrigation-parts/deploy/helm/

ChartPurposeKey Components
irrigation-partsE-commerce applicationFrontend, API, database

Usage

# Install a chart
helm install <release-name> <chart-path> -n <namespace> -f values.yaml

# Upgrade a release
helm upgrade <release-name> <chart-path> -n <namespace> -f values.yaml

# List releases
helm list -A

# Check release status
helm status <release-name> -n <namespace>

# View rendered templates (dry run)
helm template <release-name> <chart-path> -f values.yaml

# Rollback to previous revision
helm rollback <release-name> <revision> -n <namespace>

Values Files

Each chart uses values files for environment-specific configuration:

charts/core-platform/
├── Chart.yaml
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   └── ...
├── values.yaml              # Default values
├── values-dev.yaml          # Development overrides
├── values-staging.yaml      # Staging overrides
└── values-prod.yaml         # Production overrides

Deploy with environment-specific values:

# Development
helm upgrade --install idp-dev ./charts/core-platform \
  -n idp-dev -f values.yaml -f values-dev.yaml

# Production
helm upgrade --install idp ./charts/core-platform \
  -n idp -f values.yaml -f values-prod.yaml

Third-Party Helm Charts

In addition to custom charts, several third-party Helm charts are likely in use for infrastructure services (installed via helm install or ArgoCD):

ChartRepositoryNamespaceNotes
authentikgoauthentik/authentikauthentikSSO provider
vaulthashicorp/vaultvaultSecrets management
harborgoharbor/harborregistryContainer registry
longhornlonghornio/longhornlonghorn-systemDistributed storage
linkerdlinkerd/linkerd2linkerdService mesh
cert-managerjetstack/cert-managercert-managerTLS automation
prometheus-stackprometheus-community/kube-prometheus-stackmonitoringFull observability

Note: Verify actual installations with helm list -A. The above are inferred from deployed services.

Kustomize

Kustomize provides environment-specific Kubernetes manifest overlays without modifying base resources.

Projects Using Kustomize

CoreStation (Fire Department SaaS)

/home/lucas/fire-department-saas/deploy/k8s/
├── base/           # Base manifests (deployments, services, configmaps)
├── overlays/
│   ├── dev/        # Development environment overrides
│   └── prod/       # Production environment overrides
# Deploy to dev
kubectl apply -k /home/lucas/fire-department-saas/deploy/k8s/overlays/dev/

# Deploy to prod
kubectl apply -k /home/lucas/fire-department-saas/deploy/k8s/overlays/prod/

Aegis VPN

/home/lucas/vpn/k8s/
├── base/           # Base VPN manifests
├── overlays/
│   ├── megatron/   # MEGATRON-specific config
│   ├── dev/        # Development overrides
│   └── prod/       # Production overrides

Kelsey Farm Equipment

/home/lucas/irrigation-parts/deploy/k8s/
├── base/
├── overlays/
│   ├── demo/       # Demo environment
│   ├── dev/        # Development
│   ├── qa/         # QA testing
│   └── prod/       # Production

Usage

# Preview rendered manifests
kubectl kustomize overlays/dev/

# Apply an overlay
kubectl apply -k overlays/dev/

# Diff against live state
kubectl diff -k overlays/prod/

TODO: expand with common patches, strategic merge patches, and shared component references.

Docker Compose Files

Docker Compose is used for multi-container workloads that run outside the K3s cluster.

Compose Files

ULTRATHINK Research Infrastructure

Location: /home/lucas/ultrathink-infra/docker-compose.yml

ServicePurpose
JupyterLabInteractive notebook environment
MLflowExperiment tracking server
TensorBoardTraining visualization

Bibliotheca (Book Management)

Location: /home/lucas/bibliotheca/

Full book management stack with 15+ containers. See Bibliotheca and Container Inventory.

Gene Editing Environment

Location: /home/lucas/gene-editing/docker-compose.yml

Development environment for gene editing research tools.

Usage

# Start a stack
cd /path/to/project && docker compose up -d

# View running services
docker compose ps

# View logs
docker compose logs -f

# Stop a stack
docker compose down

# Rebuild and restart
docker compose up -d --build

TODO: expand with environment variable configuration, volume mounts, and network settings per compose file.

SSH Configuration

MEGATRON provides multiple SSH access methods for different use cases: normal SSH, rescue SSH for emergencies, and Forgejo SSH for Git operations.

SSH Daemons

PortServicePurposePriority
22sshdNormal SSH accessNormal
2222sshd-rescueEmergency high-priority SSHNice -20, OOM protected
2223Forgejo SSHGit SSH operationsNormal

SSH Host Configuration

The following entries are configured in ~/.ssh/config:

Host AliasMachineIP / HostPortNotes
mac-studioMac Studio M2 Ultra100.87.201.64 (Tailscale)22Primary Mac Studio access
mac-studio-localMac Studio M2 Ultra10.0.0.71 (LAN)22LAN-only access
macbook-m4MacBook M4 Max100.91.253.88 (Tailscale)22Development machine
tensorbookLambda Laptop100.108.49.109 (Tailscale)22GPU experiments
megatron-rescueMEGATRONlocalhost2222Emergency access

Connecting to MEGATRON

From Local Network

# Normal SSH
ssh lucas@megatron

# Or by IP
ssh [email protected]

Via Tailscale (from any machine in the mesh)

ssh [email protected]

Rescue SSH (Emergency)

# From local
ssh -p 2222 lucas@localhost

# Using SSH config alias
ssh megatron-rescue

# From Mac Studio
ssh -p 2222 [email protected]

To Other Machines

# Mac Studio
ssh mac-studio

# MacBook M4
ssh macbook-m4

# Lambda Laptop
ssh tensorbook

Rescue SSH Details

The rescue SSH daemon provides guaranteed access even when the system is under extreme load:

PropertyValue
Port2222
Config/etc/ssh/sshd_config_rescue
Servicesshd-rescue.service
Nice-20 (highest priority)
OOMProtected (OOMScoreAdjust=-1000)
I/ORealtime scheduling

This is critical for recovery scenarios where the main SSH daemon is unresponsive due to:

  • High CPU load (e.g., runaway processes)
  • Memory exhaustion (OOM conditions)
  • Disk I/O saturation
  • Kubernetes pod storms

See Rescue SSH for full details.

Forgejo SSH (Port 2223)

Port 2223 is used by Forgejo (self-hosted Git) for SSH-based Git operations:

# Clone a repo via Forgejo SSH
git clone ssh://git@megatron:2223/user/repo.git

SSH Key Management

# List authorized keys
cat ~/.ssh/authorized_keys

# Add a new key
echo "ssh-ed25519 AAAA... user@machine" >> ~/.ssh/authorized_keys

# Test connection
ssh -T git@megatron -p 2223

Kubernetes Access via SSH

After SSH-ing to MEGATRON, kubectl is available for cluster management:

# SSH to MEGATRON, then use kubectl
ssh [email protected]
kubectl get nodes
kubectl get pods -A

For remote kubectl access without SSH, see Kubeconfig.

Security Notes

  • Password authentication should be disabled; use key-based auth only
  • Root login should be disabled
  • The rescue SSH daemon uses the same authentication as the primary daemon
  • Forgejo SSH runs as a separate user/process for Git operations
  • Tailscale provides an encrypted tunnel; SSH over Tailscale is double-encrypted

Rescue SSH (Port 2222)

The rescue SSH daemon provides guaranteed emergency access to MEGATRON even under extreme system load, OOM conditions, or process storms.

Configuration

PropertyValue
Port2222
Config File/etc/ssh/sshd_config_rescue
Servicesshd-rescue.service (systemd)
Nice-20 (highest CPU priority)
OOM Score-1000 (OOM kill protected)
I/O SchedulingRealtime

When to Use

Use rescue SSH when:

  • Normal SSH (port 22) is unresponsive
  • System is under extreme CPU load
  • OOM killer is active
  • K3s pod storms are consuming resources
  • You need guaranteed access for emergency maintenance

Connecting

# From local machine
ssh -p 2222 lucas@megatron

# Using SSH config alias
ssh megatron-rescue

# From Mac Studio via Tailscale
ssh -p 2222 [email protected]

Service Management

# Check rescue SSH status
sudo systemctl status sshd-rescue

# Restart rescue SSH
sudo systemctl restart sshd-rescue

# View rescue SSH config
cat /etc/ssh/sshd_config_rescue

How It Works

The rescue SSH daemon runs as a separate sshd process with elevated scheduling priority:

  1. Nice -20 ensures it gets CPU time before any normal process
  2. OOMScoreAdjust=-1000 prevents the OOM killer from targeting it
  3. Realtime I/O scheduling ensures disk access even under I/O saturation
  4. Separate port (2222) avoids contention with the primary sshd on port 22

Tailscale Machines

All machines in the Tailscale mesh network. See also Tailscale Networking.

Machine Inventory

MachineHostnameTailscale IPHardwareRole
MEGATRONmegatron100.70.25.47Threadripper 3990X, 251GB, 2x RTX 3090Primary server
Mac Studiolucass-mac-studio100.87.201.64M2 Ultra, 512GB unified, 7.3TBInference, visualization
MacBook M4macbook-pro-m4100.91.253.88M4 Max, 64GBDevelopment
Lambda Laptoptensorbook100.108.49.109RTX GPU, 64GBGPU experiments

Connectivity Check

tailscale status
tailscale ping mac-studio
tailscale ping macbook-m4
tailscale ping tensorbook

Kubeconfig

Kubeconfig provides remote kubectl access to the K3s cluster without SSH-ing to MEGATRON.

Default Location

On MEGATRON, the kubeconfig is automatically available:

# K3s stores it at:
/etc/rancher/k3s/k3s.yaml

# Usually symlinked or copied to:
~/.kube/config

Remote Access

To use kubectl from another machine (e.g., MacBook M4):

  1. Copy the kubeconfig from MEGATRON:
scp megatron:/etc/rancher/k3s/k3s.yaml ~/.kube/megatron-config
  1. Update the server address to the Tailscale IP:
sed -i 's/127.0.0.1/100.70.25.47/' ~/.kube/megatron-config
  1. Use it:
export KUBECONFIG=~/.kube/megatron-config
kubectl get nodes

K3s API Server

PropertyValue
Port6443
Address100.70.25.47:6443 (via Tailscale)
AuthClient certificate (from kubeconfig)

TODO: expand with multi-context setup, RBAC configuration, and service account tokens.

Research Overview (ULTRATHINK)

MEGATRON hosts the ULTRATHINK research system -- a large-scale collection of spiking neural network (SNN) and efficient attention research papers, each with its own codebase, experiments, and dedicated Claude Code agent.

Summary

MetricValue
Total Projects129+
Waves8
Storage234 GB (~/Papers/)
Projects with CLAUDE.md112
Projects with Code16
Compute2x RTX 3090 (48 GB VRAM total)
Agent SystemClaude Code with per-project specialist agents
Experiment TrackingMLflow
NotebooksJupyterHub

Project Waves

WavePapersDirectory RangeTheme
Core6paper/, paper3/, paper4/, paper6/, paper7/, paper8/Original SNN research
Extended (paper10-25)16paper10-25ROSA extensions and variants
Wave 210paper26-35Extended SNN architectures
Wave 310paper36-45Advanced SNN applications
Wave 415paper46-60Real-time audio/signal processing
Wave 520paper61-80Thorpe TB trillion-neuron architecture
Wave 615paper81-95Differentiable tree machines + SNN
Wave 715paper96-110DeepSeek R2/RNN + SNN integration
Wave 820paper111-130Domain-specific applications

Core Projects (Original)

ProjectDirectoryPurposeStatus
ROSA ViTPapers/paper/Rank-Order Spiking Attention for vision transformersReviewed
GrandmotherPapers/paper3/Invertible Rank-Order AutoencoderReviewed, has code
SpikeGPTPapers/paper4/O(N) Attention via Spike Timing for languageReviewed
Memory EnginePapers/paper6/Hebbian Memory for Continual LearningReviewed
ImaginationPapers/paper7/SNN-based Video GenerationReviewed
Audio EnginePapers/paper8/SNN Audio ProcessingReviewed

Wave 2: Extended Architectures (paper26-35)

ProjectDirectoryPurposeHas Code
SpikeMoEPapers/paper26/Mixture of Experts with Spike-Gated RoutingYes
NeuroMambaPapers/paper27/State Space Models with Spiking DynamicsYes
TempoBERTPapers/paper28/Temporal Coding for Language UnderstandingNo
SpikeFlowPapers/paper29/Normalizing Flows with Neuromorphic PrimitivesNo
ROSA-3DPapers/paper30/Rank-Order Attention for Point CloudsNo
SpikeDreamerPapers/paper31/World Models with Spiking InferenceNo
NeuroRetrievalPapers/paper32/Spike-Based Dense RetrievalNo
EventNeRFPapers/paper33/Neural Radiance Fields from Event CamerasYes
SpikeCodecPapers/paper34/Neuromorphic Video CompressionNo
NeuroNavPapers/paper35/Spiking Networks for Robot NavigationYes

Wave 3: Advanced Applications (paper36-45)

ProjectDirectoryPurposeHas Code
SpikeSSLPapers/paper36/Self-Supervised Learning via Spike TimingNo
NeuroGANPapers/paper37/Spiking Generative Adversarial NetworksYes
SpikeDiffPapers/paper38/Diffusion Models with Neuromorphic DynamicsNo
TempoGraphPapers/paper39/Temporal Graph Networks with Spike CommunicationYes
SpikeRAGPapers/paper40/Retrieval-Augmented Generation with Spike MemoryYes
NeuroSATPapers/paper41/Boolean Satisfiability via Spiking NetworksYes
SpikeCLIPPapers/paper42/Contrastive Vision-Language with Spike AlignmentYes
TempoRLPapers/paper43/Reinforcement Learning with Spike-Time RewardsNo
NeuroCastPapers/paper44/Time Series Forecasting with Spiking ReservoirsNo
SpikeKANPapers/paper45/Kolmogorov-Arnold Networks with Spike FunctionsYes

Later Waves (4-8)

WaveThemeCountKey Projects
Wave 4Real-time Audio/Signal15SpikeAudio-RT, NeuroVoice, SpikeDSP, SpikeSpeech
Wave 5Thorpe TB Architecture20ThorpeBrain-Core, SparseSpike-Trillion, NofM-Encoding
Wave 6Differentiable Tree Machines15SpikeTree-Core, TreeSpike-Parse, NeuroTree-Logic
Wave 7DeepSeek/RNN Integration15DeepSpike-R2, SpikeRNN-Hybrid, NeuroSeek-Reason
Wave 8Domain Applications20SpikeFluid-3D, NeuroCyber-Detect, SpikeWeather

See individual wave pages for full project listings:

Agent Architecture

Each project has a dedicated Claude Code agent (Sonnet-class) coordinated by a master orchestrator (Opus-class):

orchestrator-agent (Opus)
    |
    +-- rosa-agent (paper/)
    +-- grandmother-agent (paper3/)
    +-- spikegpt-agent (paper4/)
    +-- memory-agent (paper6/)
    +-- imagination-agent (paper7/)
    +-- audio-agent (paper8/)
    |
    +-- spikemoe-agent (paper26/)
    +-- neuromamba-agent (paper27/)
    +-- ... (one agent per paper26-45)
    |
    +-- audio-snn-agent (Wave 4 coordinator, paper46-60)
    +-- thorpe-tb-agent (Wave 5 coordinator, paper61-80)
    +-- tree-snn-agent (Wave 6 coordinator, paper81-95)
    +-- deepseek-snn-agent (Wave 7 coordinator, paper96-110)
    +-- domain-snn-agent (Wave 8 coordinator, paper111-130)

See Agent Architecture for details.

Computing Resources for Research

MachineRoleGPURAM
MEGATRONFull training, distributed experiments2x RTX 3090 (48 GB)251 GiB
Lambda LaptopAblations, single-GPU experiments1x RTX GPU64 GB
Mac StudioInference, visualization, large modelsM2 Ultra (MPS)512 GB
MacBook M4Development, quick testsM4 Max (MPS)64 GB

Review System

Each project undergoes systematic review with scoring across four dimensions:

DimensionWeightDescription
Concept & Design25%Research hypothesis, novelty, related work
Implementation30%Code quality, tests, documentation
Data & Experiments25%Dataset setup, experiment configs
Results & Analysis20%Metrics, visualizations, paper readiness

Review artifacts per project: SUMMARY.md, CLAUDE.md, GAPS.md, PROPOSALS.md

Quick Commands

# Check all project status
for dir in paper paper3 paper4 paper6 paper7 paper8 paper{26..45}; do
  echo "=== $dir ===" && head -5 /home/lucas/Papers/$dir/REVIEW.md 2>/dev/null
done

# Run orchestrator
python /home/lucas/ultrathink_orchestrator.py status
python /home/lucas/ultrathink_orchestrator.py launch
python /home/lucas/ultrathink_orchestrator.py collect

# Run reviews
python /home/lucas/Papers/ultrathink_review_orchestrator.py status
python /home/lucas/Papers/ultrathink_review_orchestrator.py launch

# GPU status for training
nvidia-smi --query-gpu=index,memory.used,utilization.gpu --format=csv

Core Projects

The original ULTRATHINK research projects, focused on foundational spiking neural network and rank-order coding techniques.

Project Summary

ProjectDirectoryPurposeAgentHas Code
ROSA ViTPapers/paper/Rank-Order Spiking Attention for vision transformersrosa-agentNo
GrandmotherPapers/paper3/Invertible Rank-Order Autoencodergrandmother-agentYes
SpikeGPTPapers/paper4/O(N) Attention via Spike Timing for languagespikegpt-agentNo
Memory EnginePapers/paper6/Hebbian Memory for Continual Learningmemory-agentNo
ImaginationPapers/paper7/SNN-based Video Generationimagination-agentNo
Audio EnginePapers/paper8/SNN Audio Processingaudio-agentNo

ROSA ViT (paper/)

Rank-Order Spiking Attention applied to Vision Transformers. The core technique encodes input features as spike timing patterns (rank-order coding) and computes attention using temporal coincidence detection rather than dot-product similarity.

Grandmother (paper3/)

An invertible autoencoder using rank-order coding, inspired by the "grandmother cell" hypothesis in neuroscience. Features working code implementation.

SpikeGPT (paper4/)

Adapts the GPT architecture to use spike-timing-based attention, achieving O(N) complexity instead of O(N^2) by leveraging temporal sparsity in spike trains.

Memory Engine (paper6/)

Implements Hebbian learning rules for continual learning in spiking networks, enabling memory consolidation without catastrophic forgetting.

Imagination (paper7/)

SNN-based generative model for video, producing temporally coherent frame sequences through spike-based dynamics.

Audio Engine (paper8/)

Applies spiking neural networks to audio processing tasks, leveraging the natural temporal structure of audio signals.

Wave 2: Extended (paper26-35)

Extended SNN architectures exploring new model families (MoE, SSM, BERT, Normalizing Flows, Point Clouds, World Models, Retrieval, NeRF, Codecs, Navigation).

Projects

ProjectDirectoryPurposeAgentHas Code
SpikeMoEPapers/paper26/Mixture of Experts with Spike-Gated Routingspikemoe-agentYes
NeuroMambaPapers/paper27/State Space Models with Spiking Dynamicsneuromamba-agentYes
TempoBERTPapers/paper28/Temporal Coding for Language Understandingtempobert-agentNo
SpikeFlowPapers/paper29/Normalizing Flows with Neuromorphic Primitivesspikeflow-agentNo
ROSA-3DPapers/paper30/Rank-Order Attention for Point Cloudsrosa3d-agentNo
SpikeDreamerPapers/paper31/World Models with Spiking Inferencespikedreamer-agentNo
NeuroRetrievalPapers/paper32/Spike-Based Dense Retrievalneuroretrieval-agentNo
EventNeRFPapers/paper33/Neural Radiance Fields from Event Cameraseventnerf-agentYes
SpikeCodecPapers/paper34/Neuromorphic Video Compressionspikecodec-agentNo
NeuroNavPapers/paper35/Spiking Networks for Robot Navigationneuronav-agentYes

All 10 projects are in "Reviewed" status with CLAUDE.md agent context files.

Wave 3: paper36-45

Advanced SNN applications including self-supervised learning, GANs, diffusion models, graph networks, RAG, SAT solving, vision-language alignment, RL, forecasting, and KANs.

Projects

ProjectDirectoryPurposeAgentHas Code
SpikeSSLPapers/paper36/Self-Supervised Learning via Spike Timingspikessl-agentNo
NeuroGANPapers/paper37/Spiking Generative Adversarial Networksneurogan-agentYes
SpikeDiffPapers/paper38/Diffusion Models with Neuromorphic Dynamicsspikediff-agentNo
TempoGraphPapers/paper39/Temporal Graph Networks with Spike Communicationtempograph-agentYes
SpikeRAGPapers/paper40/Retrieval-Augmented Generation with Spike Memoryspikerag-agentYes
NeuroSATPapers/paper41/Boolean Satisfiability via Spiking Networksneurosat-agentYes
SpikeCLIPPapers/paper42/Contrastive Vision-Language with Spike Alignmentspikeclip-agentYes
TempoRLPapers/paper43/Reinforcement Learning with Spike-Time Rewardstemporl-agentNo
NeuroCastPapers/paper44/Time Series Forecasting with Spiking Reservoirsneurocast-agentNo
SpikeKANPapers/paper45/Kolmogorov-Arnold Networks with Spike Functionsspikekan-agentYes

All 10 projects are in "Reviewed" status with CLAUDE.md agent context files.

Wave 4: Audio/Signal (paper46-60)

Real-time audio and signal processing with spiking neural networks. Coordinated by the audio-snn-agent.

Projects

ProjectDirectoryPurpose
SpikeAudio-RTPapers/paper46/Real-time audio processing with SNNs
NeuroVoicePapers/paper47/Voice synthesis and processing
SpikeDSPPapers/paper48/Digital signal processing primitives
AudioSpike-StreamPapers/paper49/Streaming audio with spike encoding
NeuroBeamformPapers/paper50/Beamforming with spiking networks
SpikeCodec-AudioPapers/paper51/Audio compression via neuromorphic coding
RealSpike-MusicPapers/paper52/Real-time music processing
NeuroSonarPapers/paper53/Sonar signal processing
SpikeSpeechPapers/paper54/Speech recognition with SNNs
AudioEvent-SNNPapers/paper55/Audio event detection
NeuroEQPapers/paper56/Neural equalization
SpikeReverbPapers/paper57/Reverb modeling with spikes
NeuroMixerPapers/paper58/Neural audio mixing
SpikeSynthPapers/paper59/Spiking audio synthesis
AudioAnomaly-SNNPapers/paper60/Audio anomaly detection

All 15 projects are in "Reviewed" status with CLAUDE.md agent context files.

Wave 5: Thorpe TB (paper61-80)

Trillion-neuron spiking neural network architecture inspired by Simon Thorpe's work. Coordinated by the thorpe-tb-agent.

Projects

ProjectDirectoryPurpose
ThorpeBrain-CorePapers/paper61/Core trillion-neuron SNN architecture
SparseSpike-TrillionPapers/paper62/Sparse spike communication at trillion scale
NofM-EncodingPapers/paper63/N-of-M spike encoding scheme
EmergentSNNPapers/paper64/Emergent behavior in large SNNs
TB-TextUnderstandPapers/paper65/Text understanding at TB scale
TB-VisionPapers/paper66/Vision processing at TB scale
TB-VideoStreamPapers/paper67/Video streaming processing
TB-AudioTemporalPapers/paper68/Audio temporal processing
SparseHebbianPapers/paper69/Sparse Hebbian learning rules
TB-DistributedTrainPapers/paper70/Distributed training for TB models
TB-CompressionPapers/paper71/Model compression for TB architecture
TB-MemoryPapers/paper72/Memory systems for TB models
TB-PredictionPapers/paper73/Predictive processing in TB
TB-ContinualPapers/paper74/Continual learning at TB scale
SparseAttention-TBPapers/paper75/Sparse attention mechanisms
TB-HardwarePapers/paper76/Hardware design for TB deployment
TB-PlasticityPapers/paper77/Synaptic plasticity rules
TB-MultiModalPapers/paper78/Multi-modal processing
TB-ReasoningPapers/paper79/Reasoning capabilities
TB-BenchmarkPapers/paper80/Benchmarking TB architecture

All 20 projects are in "Reviewed" status with CLAUDE.md agent context files.

Wave 6: Tree Machines (paper81-95)

Integration of differentiable tree machines with spiking neural networks for structured computation. Coordinated by the tree-snn-agent.

Projects

ProjectDirectoryPurpose
SpikeTree-CorePapers/paper81/Core tree-SNN integration
TreeSpike-ParsePapers/paper82/Parsing with tree-structured SNNs
NeuroTree-LogicPapers/paper83/Logical reasoning via tree SNNs
TreeSNN-ComposePapers/paper84/Compositional computation
DiffTree-ArithPapers/paper85/Arithmetic with differentiable trees
SpikeTree-NLUPapers/paper86/Natural language understanding
TreeSpike-MathPapers/paper87/Mathematical reasoning
NeuroTree-PlanPapers/paper88/Planning with tree structures
TreeSNN-CodePapers/paper89/Code generation and understanding
SpikeTree-QAPapers/paper90/Question answering
TreeSpike-EntailPapers/paper91/Textual entailment
NeuroTree-GraphPapers/paper92/Graph reasoning
TreeSNN-SymbolicPapers/paper93/Symbolic reasoning
SpikeTree-RecursivePapers/paper94/Recursive computation
TreeSpike-AbstractPapers/paper95/Abstract reasoning

All 15 projects are in "Reviewed" status with CLAUDE.md agent context files.

Wave 7: DeepSeek/RNN (paper96-110)

Integration of DeepSeek R2 and RNN architectures with spiking neural networks. Coordinated by the deepseek-snn-agent.

Projects

ProjectDirectoryPurpose
DeepSpike-R2Papers/paper96/DeepSeek R2 with SNN components
SpikeRNN-HybridPapers/paper97/Hybrid RNN-SNN models
NeuroSeek-ReasonPapers/paper98/Reasoning via SNN-enhanced DeepSeek
SpikeOCR-LatentPapers/paper99/Latent OCR with spike encoding
DeepSpike-ContextPapers/paper100/Long-context processing
RNN-SNN-BridgePapers/paper101/Bridging RNN and SNN paradigms
NeuroSeek-VisionPapers/paper102/Visual understanding
SpikeLatent-CompressPapers/paper103/Latent space compression
DeepSpike-LongPapers/paper104/Long-sequence processing
RNN-TB-ScalePapers/paper105/Scaling RNN-SNN to TB
NeuroSeek-MultiPapers/paper106/Multi-modal integration
SpikeRNN-MemoryPapers/paper107/Memory mechanisms
DeepSpike-EfficientPapers/paper108/Efficiency optimization
RNN-SNN-TrainPapers/paper109/Training methodology
NeuroSeek-DeployPapers/paper110/Deployment strategies

All 15 projects are in "Reviewed" status with CLAUDE.md agent context files.

Wave 8: Domain Apps (paper111-130)

Domain-specific applications of spiking neural networks across physical sciences, security, vision, time series, and sensing. Coordinated by the domain-snn-agent.

Projects by Category

Physical Sciences

ProjectDirectoryPurpose
SpikeFluid-3DPapers/paper111/Fluid dynamics simulation
NeuroMaterialPapers/paper112/Material science modeling
SpikeConcretePapers/paper113/Concrete analysis
NeuroAgri-GenomicsPapers/paper114/Agricultural genomics
SpikeSeed-PatentPapers/paper115/Patent analysis for seeds

Security

ProjectDirectoryPurpose
NeuroCyber-DetectPapers/paper116/Cybersecurity threat detection
SpikeSecure-NetPapers/paper117/Network security
NeuroMalwarePapers/paper118/Malware detection

Vision

ProjectDirectoryPurpose
SpikeText-DetectPapers/paper119/Text detection in images
NeuroOCR-EdgePapers/paper120/Edge-deployed OCR

Time Series

ProjectDirectoryPurpose
SpikeWeatherPapers/paper121/Weather forecasting
NeuroTrafficPapers/paper122/Traffic prediction
SpikeFinancePapers/paper123/Financial time series
NeuroHealth-SignalPapers/paper124/Health signal monitoring
SpikeSeismicPapers/paper125/Seismic event detection

Sensing

ProjectDirectoryPurpose
NeuroRadarPapers/paper126/Radar signal processing
SpikeLidarPapers/paper127/LiDAR point cloud processing
NeuroSatellitePapers/paper128/Satellite image analysis
SpikeRobot-ControlPapers/paper129/Robot control systems
NeuroEnergyPapers/paper130/Energy system optimization

All 20 projects are in "Reviewed" status with CLAUDE.md agent context files.

Agent Architecture

The ULTRATHINK research system uses a hierarchical Claude Code agent architecture with specialized agents per project and wave coordinators.

Agent Hierarchy

orchestrator-agent (Opus) ─── Master coordinator
    |
    |── Core Agents (Sonnet)
    |   |── rosa-agent ──────────── Papers/paper/
    |   |── grandmother-agent ───── Papers/paper3/
    |   |── spikegpt-agent ──────── Papers/paper4/
    |   |── memory-agent ────────── Papers/paper6/
    |   |── imagination-agent ───── Papers/paper7/
    |   └── audio-agent ─────────── Papers/paper8/
    |
    |── Wave 2 Agents (paper26-35, one per project)
    |   |── spikemoe-agent, neuromamba-agent, tempobert-agent, ...
    |
    |── Wave 3 Agents (paper36-45, one per project)
    |   |── spikessl-agent, neurogan-agent, spikediff-agent, ...
    |
    |── Wave Coordinators
    |   |── audio-snn-agent ────── Wave 4 (paper46-60)
    |   |── thorpe-tb-agent ────── Wave 5 (paper61-80)
    |   |── tree-snn-agent ─────── Wave 6 (paper81-95)
    |   |── deepseek-snn-agent ─── Wave 7 (paper96-110)
    |   └── domain-snn-agent ───── Wave 8 (paper111-130)

Model Tiers

TaskModelUse
Strategic planningOpusArchitecture, cross-project coordination
ImplementationSonnetCode writing, experiments, per-project work
Quick checksHaikuSyntax validation, simple queries
VerificationCodex/GeminiExternal consensus via multi-llm-verify

Agent Configuration

Agents are defined in ~/.claude/agents/. Each agent has:

  • Project-specific context and instructions
  • Access to the project's directory
  • Knowledge of the review framework

Multi-LLM Verification

For significant changes (>50 lines), the multi-llm-verify skill runs consensus checks across Claude, Codex, and Gemini. Results are logged to ~/.claude/verification-logs/.

Shared Infrastructure

Infrastructure shared across all ULTRATHINK research projects.

Shared Storage

/mnt/shared/
├── datasets/         # Shared datasets (ImageNet, CIFAR, etc.)
├── checkpoints/      # Model checkpoints per project
├── pretrained/       # Pretrained models (TORCH_HOME)
├── logs/             # TensorBoard, MLflow logs
└── results/          # Experiment results

Environment Variables

export {PROJECT}_DATA=/mnt/shared/datasets
export {PROJECT}_CHECKPOINTS=/mnt/shared/checkpoints/{project}
export {PROJECT}_LOGS=/mnt/shared/logs/{project}
export TORCH_HOME=/mnt/shared/pretrained

Services

ServicePurposeAccess
MLflowExperiment trackingai-ml namespace
JupyterHubInteractive notebooksjupyterhub namespace
TensorBoardTraining visualizationDocker Compose
OllamaLLM inferenceai-ml namespace

Compute Resources

MachineUse For
MEGATRON (2x RTX 3090)Full training, distributed experiments
Lambda Laptop (1x RTX)Ablations, single-GPU experiments
Mac Studio (M2 Ultra)Inference, visualization, large model loading
MacBook M4 (M4 Max)Development, quick tests

Review Orchestrator

python /home/lucas/Papers/ultrathink_review_orchestrator.py status
python /home/lucas/Papers/ultrathink_review_orchestrator.py launch
python /home/lucas/Papers/ultrathink_review_orchestrator.py aggregate
python /home/lucas/Papers/ultrathink_review_orchestrator.py report

TODO: expand with dataset inventory, checkpoint management, and resource scheduling.

Current Issues

Known issues on MEGATRON, combining auto-detected issues and audit findings.

Partially auto-generated: 2026-03-24

Issue Summary

#SeverityIssueImpact
1CRITICALVNC server restart loop (617K+ attempts, no auth)Security risk, resource waste
2CRITICALAlertManager at 203% CPU (24K+ hours runtime)Monitoring degraded, CPU waste
3HIGHTLS certificates NOT READY (4 certs)HTTPS broken for Harbor, Devtron, docs, monitoring
4HIGHcert-manager HTTP-01 broken behind Cloudflare tunnelNo new certificates can be issued
5MEDIUMSMB share 90% full (79T/88T)Risk of storage exhaustion
6MEDIUMNFS mounts down (/mnt/cloudy, host unreachable)Stale mounts, potential process hangs
7MEDIUM21/31 GB swap in usePotential performance degradation
8MEDIUMFailed systemd services (DEGRADED state)Cosmetic, no functional impact
9MEDIUMmegatron-docs pod CrashLoopBackOffDocs site unavailable
10LOWbibliotheca-categorizer restartingBook categorization broken
11LOWLet's Encrypt staging issuer FALSEStaging cert testing broken

Issue 1: VNC Server Restart Loop (CRITICAL)

Description: The VNC server is in an infinite restart loop with 617,000+ restart attempts. It appears to have no authentication configured, making it a security vulnerability if accessible on any network interface.

Impact:

  • Security risk: Unauthenticated remote desktop access
  • Resource waste: Continuous process spawning
  • Log spam: Filling system logs with restart attempts

Suggested Fix:

# Immediately disable the VNC service
sudo systemctl stop 'vncserver@*.service'
sudo systemctl disable 'vncserver@*.service'

# Find and kill any running VNC processes
ps aux | grep -i vnc
sudo kill <pid>

# Verify no VNC ports are listening
ss -tlnp | grep 590

# If VNC is needed, reconfigure WITH authentication before re-enabling

Issue 2: AlertManager at 203% CPU (CRITICAL)

Description: AlertManager has accumulated 24,000+ hours of CPU time and is consuming 203% CPU (2+ cores). This suggests a memory leak, alert routing loop, or excessive alert volume.

Impact:

  • Wasting 2+ CPU cores continuously
  • Monitoring and alerting may be unreliable
  • Could contribute to overall system load

Suggested Fix:

# Check AlertManager pod
kubectl get pods -n monitoring -l app.kubernetes.io/name=alertmanager

# Check resource usage
kubectl top pod -n monitoring

# Restart AlertManager
kubectl rollout restart statefulset/alertmanager -n monitoring

# If issue persists, check for alert routing loops
kubectl get configmap -n monitoring -o yaml | grep -A 20 alertmanager

Issue 3: TLS Certificates NOT READY (HIGH)

Four certificates are in NOT READY state:

NamespaceCertificateReadyAge
devtroncddevtron-tlsFalse20d
docsmegatron-docs-tlsFalse6m
monitoringwildcard-sslip-tlsFalse87d
registryharbor-tlsFalse20d

Root Cause: ClusterIssuer uses HTTP-01 ACME challenges which cannot complete behind the Cloudflare tunnel.

Fix: Migrate to DNS-01 solver. See Certificate Renewal.


Issue 4: cert-manager HTTP-01 Broken Behind Tunnel (HIGH)

Description: The letsencrypt-prod ClusterIssuer uses HTTP-01 challenges. Cloudflare's "Always Use HTTPS" redirects the challenge request, causing ACME validation to fail.

Impact:

  • No new certificates can be issued
  • Existing certificates will fail to auto-renew at expiry
  • All four NOT READY certs stem from this root cause

Suggested Fix: Switch to DNS-01 solver with Cloudflare API token. Detailed steps in Certificate Renewal.


Issue 5: SMB Share 90% Full (MEDIUM)

Description: The network SMB share at //10.0.0.41/Main (mounted as /mnt/sunny) is 90% full (79T/88T), with ~8.2T remaining.

Impact: Risk of share filling completely, causing write failures for any workloads using the share.

Suggested Fix:

# Audit large files
du -sh /mnt/sunny/*/ | sort -rh | head -20

# Find old, large files
find /mnt/sunny -atime +180 -size +1G -ls 2>/dev/null | head -30

# Consider archiving or expanding the NAS

Issue 6: NFS Mounts Down (MEDIUM)

Description: NFS mounts at /mnt/cloudy and /mnt/cloudy-rw are unreachable -- the NFS host is down.

Impact: Stale NFS mounts can cause process hangs when accessed (e.g., ls, df, or du commands may block indefinitely).

Suggested Fix:

# Lazy unmount to prevent hangs
sudo umount -l /mnt/cloudy
sudo umount -l /mnt/cloudy-rw

# If NFS is no longer needed, comment out in /etc/fstab
# Otherwise, restore the NFS host and remount

Issue 7: High Swap Usage (MEDIUM)

Description: Swap is at 62-68% (approximately 20-21 GiB of 31 GiB used), despite ~206 GiB of RAM being available. This is a result of 37 days of uptime.

Suggested Fix:

# Reclaim swap during a maintenance window
sudo swapoff -a && sudo swapon -a

# Monitor afterwards
free -h

Issue 8: Failed Systemd Services (MEDIUM)

motd-news.service  loaded failed failed Message of the Day
wol-enable.service loaded failed failed Enable Wake-on-LAN on all Ethernet interfaces

Impact: None functional. Causes systemctl status to report DEGRADED.

Fix:

sudo systemctl reset-failed motd-news.service
sudo systemctl reset-failed wol-enable.service

Issue 9: megatron-docs Pod CrashLoopBackOff (MEDIUM)

NamespacePodStatusRestarts
docsmegatron-docs-5dd4d46dbf-x6gbjCrashLoopBackOff5

Impact: Documentation site is unavailable.

Suggested Fix:

# Check logs for root cause
kubectl logs -n docs megatron-docs-5dd4d46dbf-x6gbj --previous

# Check events
kubectl describe pod -n docs megatron-docs-5dd4d46dbf-x6gbj

# Fix the issue and restart
kubectl rollout restart deployment/megatron-docs -n docs

Issue 10: bibliotheca-categorizer Restarting (LOW)

bibliotheca-categorizer   Restarting (exit 0)

Impact: Book categorization functionality is broken.

Suggested Fix:

docker logs bibliotheca-categorizer --tail=100
docker inspect bibliotheca-categorizer --format='{{.State.ExitCode}}'
# Fix underlying issue, then: docker restart bibliotheca-categorizer

Issue 11: Let's Encrypt Staging Issuer FALSE (LOW)

Impact: Cannot test certificate issuance with the staging CA. Will be resolved as part of the DNS-01 migration.

Degraded Services

Services currently in a degraded, failed, or problematic state on MEGATRON.

Systemd Failed Services

ServiceUnitStateImpactResolution
MOTD Newsmotd-news.serviceFailedNonesudo systemctl reset-failed motd-news.service
Wake-on-LANwol-enable.serviceFailedNonesudo systemctl mask wol-enable.service

These services cause the system to report State: degraded in systemctl status, but have no functional impact.

# Check system state
systemctl status

# List failed units
systemctl --failed

# Reset all failed units
sudo systemctl reset-failed

Kubernetes Certificate Issues

CertificateNamespaceStateDurationRoot Cause
harbor-tlsregistryNOT READY20 daysHTTP-01 solver broken behind CF tunnel
devtron-tlsdevtroncdNOT READY20 daysHTTP-01 solver broken behind CF tunnel
wildcard-sslip-tlsmonitoringNOT READYUnknownHTTP-01 solver broken behind CF tunnel

Resolution: Migrate cert-manager to DNS-01 solver. See Certificate Renewal.

# Check all certificate states
kubectl get certificates -A

# Check pending challenges
kubectl get challenges -A

# View cert-manager logs for errors
kubectl logs -n cert-manager deployment/cert-manager --tail=200

Kubernetes Pod Issues

AlertManager (203% CPU)

PropertyValue
Namespacemonitoring
Issue203% CPU consumption
CPU Hours24,000+ accumulated
Likely CauseMemory leak or alert routing loop
# Check AlertManager status
kubectl get pods -n monitoring -l app.kubernetes.io/name=alertmanager

# Check resource consumption
kubectl top pod -n monitoring

# Restart
kubectl rollout restart statefulset/alertmanager -n monitoring

Linkerd (Recently Deployed)

PropertyValue
Namespacelinkerd
StatusRunning
Age11 hours
ConcernVery recently deployed; monitor for stability

Linkerd was deployed/redeployed very recently. Watch for:

  • Proxy injection issues
  • mTLS handshake failures
  • Increased latency
# Check Linkerd health
kubectl get pods -n linkerd
linkerd check  # if CLI installed

Vault (Low Uptime)

PropertyValue
Namespacevault
Uptime3h51m at audit time
ConcernRecently restarted; may need unsealing
# Check Vault status
kubectl get pods -n vault
kubectl exec -n vault vault-0 -- vault status

Docker Container Issues

bibliotheca-categorizer (Restart Loop)

PropertyValue
Containerbibliotheca-categorizer
Imagecustom
StatusRESTARTING (continuous)
ImpactBook categorization broken
# Check restart count
docker inspect bibliotheca-categorizer --format='{{.RestartCount}}'

# Check last exit code
docker inspect bibliotheca-categorizer --format='{{.State.ExitCode}}'

# View recent logs
docker logs bibliotheca-categorizer --tail=50

# Stop the restart loop temporarily
docker update --restart=no bibliotheca-categorizer

VNC Server (Restart Loop, No Auth)

PropertyValue
ServiceVNC server
StatusRestart loop (617K+ attempts)
AuthNONE (security risk)
ImpactResource waste, security vulnerability

This is the most urgent degraded service due to the security implications. See Current Issues for remediation steps.

# Find and stop VNC processes
ps aux | grep -i vnc
sudo systemctl stop 'vncserver@*'
sudo systemctl disable 'vncserver@*'

# Verify no VNC ports are listening
ss -tlnp | grep -E '590[0-9]'

Service Health Dashboard

Service                 Status          Action Needed
─────────────────────────────────────────────────────
systemd overall         DEGRADED        Reset failed units
motd-news.service       FAILED          Reset or disable
wol-enable.service      FAILED          Mask service
AlertManager            203% CPU        Restart pod
harbor-tls              NOT READY       DNS-01 migration
devtron-tls             NOT READY       DNS-01 migration
monitoring certs        NOT READY       DNS-01 migration
Vault                   LOW UPTIME      Monitor stability
Linkerd                 NEW DEPLOY      Monitor stability
bibliotheca-categorizer RESTARTING      Debug and fix
VNC server              RESTART LOOP    Kill immediately
NFS mounts              HOST DOWN       Lazy unmount

Daily Health Check

Step-by-step procedure for verifying MEGATRON system health. Run these checks daily or after any maintenance event.

Quick Check (5 minutes)

Run this for a rapid overview:

# 1. System basics
echo "=== UPTIME ===" && uptime
echo "=== MEMORY ===" && free -h
echo "=== DISK ===" && df -h / | tail -1
echo "=== GPU ===" && nvidia-smi --query-gpu=index,memory.used,temperature.gpu,power.draw --format=csv,noheader

# 2. Kubernetes nodes
echo "=== K3s NODES ===" && kubectl get nodes

# 3. Problem pods
echo "=== NON-RUNNING PODS ===" && kubectl get pods -A --field-selector=status.phase!=Running,status.phase!=Succeeded

# 4. Certificate issues
echo "=== CERT STATUS ===" && kubectl get certificates -A | grep -v "True"

# 5. Docker containers
echo "=== DOCKER ISSUES ===" && docker ps -a --filter "status=restarting" --filter "status=exited"

Full Health Check Procedure

Step 1: System Resources

# Check load averages and uptime
uptime

# Expected: load < 40 (for 128 threads), uptime consistent

Check memory:

free -h
MetricHealthyWarningCritical
RAM Used< 80% (< 200 GiB)80-90%> 90%
Swap Used< 50% (< 15 GiB)50-80%> 80%

Check disk:

df -h /
df -h /path/to/smb/mount  # if mounted
MountHealthyWarningCritical
Root (/)< 75%75-85%> 85%
SMB share< 85%85-95%> 95%

Step 2: GPU Status

nvidia-smi
MetricHealthyWarningCritical
Temperature< 75C75-85C> 85C
VRAMAs expected for workloadUnexpected allocationOOM errors
Power< 300W each> 300W sustainedThrottling

Check for stuck GPU processes:

nvidia-smi --query-compute-apps=pid,name,used_memory --format=csv

Step 3: Kubernetes Nodes

kubectl get nodes -o wide

All three nodes (megatron, thing1, thing2) should show Ready. If any show NotReady:

kubectl describe node <node-name>
# Check for disk pressure, memory pressure, PID pressure, or network issues

Step 4: Kubernetes Pods

# All non-running pods (excluding completed jobs)
kubectl get pods -A --field-selector=status.phase!=Running,status.phase!=Succeeded

# Pods with restarts
kubectl get pods -A -o wide | awk '$5 > 5 {print}'

# Recently crashed pods
kubectl get events -A --sort-by='.lastTimestamp' | grep -E "BackOff|Failed|Error|OOM" | tail -20

Step 5: TLS Certificates

kubectl get certificates -A

All certificates should show True in the READY column. If any show False:

kubectl describe certificate <name> -n <namespace>
kubectl get challenges -A  # Check for pending ACME challenges

Step 6: Key Services

Authentik (SSO):

kubectl get pods -n authentik
# Verify: auth.m3gatr0n.com responds
curl -s -o /dev/null -w "%{http_code}" https://auth.m3gatr0n.com/

Vault (Secrets):

kubectl get pods -n vault
kubectl exec -n vault vault-0 -- vault status 2>/dev/null | grep "Sealed"
# Should show: Sealed false

Monitoring:

kubectl get pods -n monitoring
# Check AlertManager CPU
kubectl top pod -n monitoring -l app.kubernetes.io/name=alertmanager

Cloudflare Tunnel:

systemctl status cloudflared
# Verify: external domain responds
curl -s -o /dev/null -w "%{http_code}" https://stiq.us/

Step 7: Docker Containers

# Check for problems
docker ps -a --format "table {{.Names}}\t{{.Status}}" | grep -E "Restarting|Exited"

# Check Bibliotheca stack
docker ps --filter "name=bibliotheca" --format "table {{.Names}}\t{{.Status}}"

Step 8: Network Mounts

# Check SMB mount
mount | grep cifs
ls /path/to/smb/mount > /dev/null 2>&1 && echo "SMB: OK" || echo "SMB: FAILED"

# Check NFS (expect failure currently)
mount | grep nfs
ls /mnt/cloudy > /dev/null 2>&1 && echo "NFS: OK" || echo "NFS: DOWN"

Step 9: Tailscale

tailscale status

Verify all four machines are connected:

  • megatron (100.70.25.47)
  • lucass-mac-studio (100.87.201.64)
  • macbook-pro-m4 (100.91.253.88)
  • tensorbook (100.108.49.109)

Health Check Summary Template

Date: YYYY-MM-DD
Operator: ___________

System Resources:
  [ ] Load average < 40
  [ ] RAM usage < 80%
  [ ] Swap usage < 50%
  [ ] Root disk < 75%
  [ ] SMB share < 85%

GPU:
  [ ] Both GPUs detected
  [ ] Temperatures < 75C
  [ ] No stuck processes

Kubernetes:
  [ ] All 3 nodes Ready
  [ ] No CrashLoopBackOff pods
  [ ] All certificates Ready (or known exceptions)

Services:
  [ ] Authentik responding
  [ ] Vault unsealed
  [ ] AlertManager CPU normal
  [ ] Cloudflare tunnel active
  [ ] Tailscale mesh connected

Docker:
  [ ] No unexpected container restarts

Network:
  [ ] SMB mount accessible
  [ ] NFS status: [expected down / restored]

Known Issues Unchanged:
  [ ] VNC (disabled / still running)
  [ ] AlertManager CPU (restarted / still high)
  [ ] Harbor TLS (fixed / still pending)

Notes:
___________________________________________

Restart a Service

Procedures for restarting services on MEGATRON, covering K3s pods, systemd services, and Docker containers.

Kubernetes Pod / Deployment

# Restart a deployment (graceful rolling restart)
kubectl rollout restart deployment/<name> -n <namespace>

# Restart a statefulset
kubectl rollout restart statefulset/<name> -n <namespace>

# Delete a pod (it will be recreated by its controller)
kubectl delete pod <pod-name> -n <namespace>

# Force delete a stuck pod
kubectl delete pod <pod-name> -n <namespace> --grace-period=0 --force

# Check rollout status
kubectl rollout status deployment/<name> -n <namespace>

Systemd Service

# Restart a service
sudo systemctl restart <service-name>

# Stop and start
sudo systemctl stop <service-name>
sudo systemctl start <service-name>

# Check status
sudo systemctl status <service-name>

# View logs
journalctl -u <service-name> --since "5 minutes ago"

Key services:

  • k3s.service -- K3s server (WARNING: restarts entire control plane)
  • sshd.service -- SSH daemon
  • sshd-rescue.service -- Rescue SSH
  • cloudflared.service -- Cloudflare tunnel
  • tailscaled.service -- Tailscale VPN
  • docker.service -- Docker daemon

Docker Container

# Restart a container
docker restart <container-name>

# Stop and start
docker stop <container-name>
docker start <container-name>

# Restart entire compose stack
cd /path/to/project && docker compose restart

# Rebuild and restart
docker compose up -d --build <service-name>

Cautions

  • k3s.service: Restarting K3s disrupts all pods. Only restart during planned maintenance.
  • docker.service: Restarting Docker stops all non-K3s containers.
  • cloudflared.service: Restarting interrupts all external traffic for a few seconds.

Certificate Renewal

This runbook covers fixing the broken TLS certificate issuance and migrating from HTTP-01 to DNS-01 ACME challenge solver.

Background

The current letsencrypt-prod ClusterIssuer uses HTTP-01 challenges, which fail behind the Cloudflare tunnel because Cloudflare redirects HTTP to HTTPS. The fix is to switch to DNS-01 challenges using the Cloudflare DNS API.

Prerequisites

  • Access to the Cloudflare dashboard for the relevant domains
  • kubectl access to the cluster
  • Cloudflare API token with DNS edit permissions

Step 1: Create Cloudflare API Token

  1. Log in to Cloudflare dashboard: https://dash.cloudflare.com
  2. Go to My Profile > API Tokens > Create Token
  3. Use the Edit zone DNS template or create custom:
    • Permissions: Zone > DNS > Edit
    • Zone Resources: Include > Specific zone > (select each domain: m3gatr0n.com, stiq.us, corestation.io, idp.pro, kelseyfarmequipment.com)
    • Or: Include > All zones (simpler but broader)
  4. Create and copy the token

Step 2: Create Kubernetes Secret

kubectl create secret generic cloudflare-api-token \
  --namespace cert-manager \
  --from-literal=api-token=<YOUR_CLOUDFLARE_API_TOKEN>

Verify:

kubectl get secret cloudflare-api-token -n cert-manager

Step 3: Update ClusterIssuer (Staging First)

Test with the staging issuer first:

# letsencrypt-staging-dns01.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-staging-key
    solvers:
    - dns01:
        cloudflare:
          apiTokenSecretRef:
            name: cloudflare-api-token
            key: api-token

Apply:

kubectl apply -f letsencrypt-staging-dns01.yaml

Verify the issuer becomes ready:

kubectl get clusterissuer letsencrypt-staging
kubectl describe clusterissuer letsencrypt-staging

Step 4: Test with a Staging Certificate

# test-cert.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: test-dns01-cert
  namespace: default
spec:
  secretName: test-dns01-tls
  issuerRef:
    name: letsencrypt-staging
    kind: ClusterIssuer
  dnsNames:
  - test.m3gatr0n.com
kubectl apply -f test-cert.yaml

# Watch the certificate progress
kubectl get certificate test-dns01-cert -w
kubectl get challenges -A

# Should become Ready within 1-2 minutes

If successful, clean up the test cert:

kubectl delete -f test-cert.yaml

Step 5: Update Production ClusterIssuer

# letsencrypt-prod-dns01.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-prod-key
    solvers:
    - dns01:
        cloudflare:
          apiTokenSecretRef:
            name: cloudflare-api-token
            key: api-token

Apply:

kubectl apply -f letsencrypt-prod-dns01.yaml

Verify:

kubectl get clusterissuer letsencrypt-prod
kubectl describe clusterissuer letsencrypt-prod
# Status should show Ready: True

Step 6: Re-Request Failed Certificates

Delete the failed certificates so cert-manager re-creates them with the new solver:

# Harbor
kubectl delete certificate harbor-tls -n registry
# The Certificate resource should be re-created by the Harbor Helm chart
# or you may need to re-apply the Certificate manifest

# Devtron
kubectl delete certificate devtron-tls -n devtroncd

# Monitoring
kubectl delete certificate wildcard-sslip-tls -n monitoring

If the Certificate resources are not automatically recreated (not managed by Helm/operator), recreate them:

# harbor-tls.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: harbor-tls
  namespace: registry
spec:
  secretName: harbor-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
  - registry.m3gatr0n.com
kubectl apply -f harbor-tls.yaml

Step 7: Verify All Certificates

# Check all certificates
kubectl get certificates -A

# All should show READY = True
# Wait up to 5 minutes for DNS propagation and ACME validation

Expected output:

NAMESPACE       NAME                  READY   SECRET                AGE
default         kuber-ca              True    kuber-ca              ...
default         wildcard-sslip        True    wildcard-sslip-tls    ...
kube-system     traefik-dashboard-tls True    traefik-dashboard-tls ...
registry        harbor-tls            True    harbor-tls            ...
devtroncd       devtron-tls           True    devtron-tls           ...
monitoring      wildcard-sslip-tls    True    wildcard-sslip-tls    ...

Troubleshooting

Challenge stuck in pending

# Check challenge details
kubectl get challenges -A
kubectl describe challenge <name> -n <namespace>

# Common issues:
# - API token lacks permission for the zone
# - DNS propagation delay (wait 2-5 minutes)
# - Rate limiting (check cert-manager logs)

cert-manager logs

kubectl logs -n cert-manager deployment/cert-manager --tail=200 -f

DNS record not created

# Verify Cloudflare API token works
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Content-Type: application/json"

Rate limiting

Let's Encrypt has rate limits:

  • 50 certificates per registered domain per week
  • 5 duplicate certificates per week
  • Use the staging issuer for testing to avoid hitting limits

Ongoing Maintenance

After migration, certificates will auto-renew via DNS-01. No manual intervention needed unless:

  • The Cloudflare API token expires or is revoked
  • A new domain is added (token needs zone access)
  • cert-manager is upgraded or reinstalled (re-apply ClusterIssuer)

Disk Cleanup

Procedures for freeing disk space on MEGATRON when root or network storage is running low.

Quick Assessment

# Root filesystem usage
df -h /

# Largest directories under /home
du -sh /home/lucas/*/ 2>/dev/null | sort -rh | head -20

# Docker disk usage
docker system df

# K3s / containerd images
crictl images | sort -k3 -h

# Stale containers
docker ps -a --filter "status=exited" --format "table {{.Names}}\t{{.Size}}\t{{.Status}}"

Cleanup Targets

Docker (typical savings: 5-50 GB)

# Remove stopped containers
docker container prune

# Remove unused images
docker image prune -a

# Remove unused volumes (CAUTION: verify no needed data)
docker volume prune

# Full cleanup
docker system prune -a --volumes

Conda Environments (~/miniconda3/ = 44 GB)

# List environments
conda env list

# Remove unused environments
conda env remove -n <env-name>

# Clean package cache
conda clean --all

Research Data (~/Papers/ = 234 GB)

# Find large checkpoint files
find ~/Papers/ -name "*.pt" -o -name "*.pth" -o -name "*.ckpt" | xargs du -sh | sort -rh | head -20

# Find large log directories
find ~/Papers/ -name "logs" -type d | xargs du -sh | sort -rh | head -10

System Logs

# Check journal size
journalctl --disk-usage

# Vacuum old logs (keep 1 week)
sudo journalctl --vacuum-time=7d

SMB Share Cleanup (90% full)

# Largest directories
du -sh /mnt/sunny/*/ 2>/dev/null | sort -rh | head -20

# Files not accessed in 6+ months
find /mnt/sunny -atime +180 -size +1G -ls 2>/dev/null | head -30

TODO: expand with automated cleanup scripts and monitoring thresholds.

Node Recovery

Procedures for recovering K3s cluster nodes that are NotReady, unreachable, or require re-joining.

Diagnosing Node Issues

# Check node status
kubectl get nodes -o wide

# Describe the problematic node
kubectl describe node <node-name>

# Check events
kubectl get events --field-selector involvedObject.name=<node-name> --sort-by='.lastTimestamp'

Common Scenarios

Node Shows NotReady

  1. SSH to the node and check the K3s agent:
ssh <node> 'systemctl status k3s-agent'
ssh <node> 'journalctl -u k3s-agent --since "10 minutes ago"'
  1. Restart the agent:
ssh <node> 'sudo systemctl restart k3s-agent'

Node Unreachable

  1. Check network connectivity:
ping <node-ip>
ssh <node> 'echo reachable'
  1. If the node is physically down, drain it:
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data --timeout=60s

Re-joining a Node

# On the worker node, get the join token from megatron:
K3S_TOKEN=$(ssh megatron 'sudo cat /var/lib/rancher/k3s/server/node-token')

# Install/rejoin K3s agent
curl -sfL https://get.k3s.io | K3S_URL=https://megatron:6443 K3S_TOKEN=$K3S_TOKEN sh -

Post-Recovery

# Verify node is Ready
kubectl get nodes

# Uncordon if drained
kubectl uncordon <node-name>

# Check Longhorn replica health
kubectl get volumes.longhorn.io -n longhorn-system

TODO: expand with automated recovery scripts and monitoring alerts for node health.

Backup & Restore

Procedures for backing up and restoring critical data on MEGATRON.

What to Back Up

DataLocationPriorityMethod
K3s etcd/var/lib/rancher/k3s/server/db/CriticalK3s snapshot
Application databasesK3s PVCsCriticalpg_dump / Volume snapshots
Research data~/Papers/ (234 GB)Highrsync to NAS/Mac Studio
Cloudflare tunnel config/etc/cloudflared/HighFile copy
SSH keys~/.ssh/HighEncrypted backup
Helm valuesVariousMediumGit
Docker volumes/var/lib/docker/volumes/MediumVolume export

K3s Etcd Snapshot

# Create snapshot
k3s etcd-snapshot save --name manual-backup-$(date +%Y%m%d)

# List snapshots
k3s etcd-snapshot list

# Restore from snapshot
k3s server --cluster-reset --cluster-reset-restore-path=/path/to/snapshot

Database Backups

# PostgreSQL (example for data namespace)
kubectl exec -n data postgres-postgresql-0 -- pg_dumpall -U postgres > backup.sql

# MariaDB (Docker, Coolify)
docker exec bibliotheca-db mysqldump -u root -p --all-databases > mariadb-backup.sql

Research Data Sync

# Sync to Mac Studio
rsync -avz --progress ~/Papers/ mac-studio:~/Papers-backup/

# Sync to SMB share
rsync -avz ~/Papers/ /mnt/sunny/backups/papers/

TODO: expand with automated backup schedules, retention policies, Longhorn snapshot configuration, and disaster recovery testing procedures.

Add Cloudflare Route

This runbook covers adding a new hostname route to the Cloudflare tunnel so that a new subdomain or application is publicly accessible.

Prerequisites

  • Access to the mgt CLI tool (located at /home/lucas/paas/bin/)
  • The Kubernetes service for the application must already be deployed
  • A Traefik IngressRoute must be configured for the hostname

Overview

When you add a new route, the following chain is established:

New hostname (e.g., newapp.m3gatr0n.com)
    │
    v
Cloudflare DNS (CNAME to tunnel)
    │
    v
Cloudflare Tunnel (6d8885c4-...)
    │
    v
cloudflared -> https://localhost:32672
    │
    v
Traefik IngressRoute (matches Host header)
    │
    v
K8s Service -> Pod

Step 1: Deploy the Application

Ensure the application is running in K8s with a Service:

# Verify the service exists
kubectl get svc -n <namespace> <service-name>

# Verify pods are running
kubectl get pods -n <namespace> -l app=<app-name>

Step 2: Create Traefik IngressRoute

Create an IngressRoute so Traefik knows how to route traffic for the new hostname:

# ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: newapp-route
  namespace: <namespace>
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`newapp.m3gatr0n.com`)
      kind: Rule
      services:
        - name: <service-name>
          port: <service-port>
  tls:
    certResolver: letsencrypt-prod
    # Or reference a specific secret:
    # secretName: newapp-tls

Apply:

kubectl apply -f ingressroute.yaml

Step 3: Add Cloudflare Tunnel Route

Use the mgt CLI to add the route:

mgt route add newapp.m3gatr0n.com

This command:

  1. Adds the hostname to the cloudflared tunnel configuration
  2. Creates the DNS CNAME record in Cloudflare pointing to the tunnel
  3. Reloads the tunnel configuration

Manual Alternative

If mgt is unavailable, edit the configuration directly:

# Edit the tunnel config
sudo vim /etc/cloudflared/config.yml

Add the new hostname entry under ingress:

ingress:
  # ... existing routes ...
  - hostname: newapp.m3gatr0n.com
    service: https://localhost:32672
    originRequest:
      noTLSVerify: true
  # The catch-all rule must remain last
  - service: http_status:404

Then restart cloudflared:

sudo systemctl restart cloudflared

And create the DNS record in Cloudflare:

# Using cloudflared CLI
cloudflared tunnel route dns 6d8885c4-97d9-43fd-8426-78a00c2834f1 newapp.m3gatr0n.com

Step 4: Create TLS Certificate (if needed)

If using cert-manager (with the DNS-01 solver):

# certificate.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: newapp-tls
  namespace: <namespace>
spec:
  secretName: newapp-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
  - newapp.m3gatr0n.com
kubectl apply -f certificate.yaml

# Wait for certificate
kubectl get certificate newapp-tls -n <namespace> -w

Note: Since Cloudflare handles public TLS, the internal certificate is optional. The noTLSVerify flag in the tunnel config means cloudflared accepts any certificate from Traefik.

Step 5: Verify

# Check DNS resolution
dig newapp.m3gatr0n.com

# Test HTTPS access
curl -v https://newapp.m3gatr0n.com/

# Check Traefik routing
kubectl get ingressroute -n <namespace> newapp-route

# Verify in tunnel route list
mgt route list | grep newapp

Checklist

[ ] Application deployed and Service created
[ ] Traefik IngressRoute applied
[ ] Cloudflare tunnel route added (mgt route add)
[ ] DNS record created (automatic with mgt)
[ ] TLS certificate issued (if using cert-manager)
[ ] HTTPS access verified from external network
[ ] Route appears in mgt route list

Removing a Route

# Remove the tunnel route
mgt route remove newapp.m3gatr0n.com

# Remove the IngressRoute
kubectl delete ingressroute newapp-route -n <namespace>

# Remove the certificate (optional)
kubectl delete certificate newapp-tls -n <namespace>

Deploy New Application

Step-by-step guide for deploying a new application on the MEGATRON K3s cluster with external access via Cloudflare tunnel.

Prerequisites

  • Application container image (in Harbor or public registry)
  • Domain/subdomain chosen
  • Namespace determined

Steps

1. Create Namespace

kubectl create namespace <app-name>

2. Deploy Application

Create deployment, service, and any required ConfigMaps/Secrets:

kubectl apply -f deployment.yaml -n <app-name>
kubectl apply -f service.yaml -n <app-name>

3. Create IngressRoute

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: <app-name>-route
  namespace: <app-name>
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`<app-name>.m3gatr0n.com`)
      kind: Rule
      services:
        - name: <service-name>
          port: <port>

4. Add Cloudflare Tunnel Route

mgt route add <app-name>.m3gatr0n.com

5. Create TLS Certificate (optional)

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: <app-name>-tls
  namespace: <app-name>
spec:
  secretName: <app-name>-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
    - <app-name>.m3gatr0n.com

6. Verify

curl -v https://<app-name>.m3gatr0n.com/
kubectl get pods -n <app-name>
kubectl get ingressroute -n <app-name>

See Add Cloudflare Route for detailed tunnel configuration.

TODO: expand with Helm-based deployment option, secret management via Vault, and CI/CD pipeline integration via Devtron.

Disaster Recovery

Procedures for recovering MEGATRON from major failures.

Severity Levels

LevelScenarioRecovery Time
1Single pod crashMinutes (auto-restart)
2Node failure (worker)10-30 minutes (drain + rejoin)
3Control plane failure30-60 minutes (K3s restart or etcd restore)
4Full system failureHours (OS reinstall + K3s restore)
5Hardware failureDays (replacement + full restore)

Emergency Access

If normal SSH is unresponsive:

# Rescue SSH (high priority, OOM protected)
ssh -p 2222 [email protected]

# Or via SSH config
ssh megatron-rescue

Level 3: Control Plane Recovery

# 1. SSH via rescue port
ssh megatron-rescue

# 2. Check K3s status
sudo systemctl status k3s

# 3. Restart K3s
sudo systemctl restart k3s

# 4. Wait for nodes to rejoin
kubectl get nodes -w

# 5. If etcd is corrupted, restore from snapshot
k3s server --cluster-reset --cluster-reset-restore-path=/var/lib/rancher/k3s/server/db/snapshots/<snapshot>

Level 4: Full System Recovery

  1. Reinstall Ubuntu 20.04 LTS
  2. Restore SSH keys from backup
  3. Install K3s: curl -sfL https://get.k3s.io | sh -
  4. Restore etcd from snapshot
  5. Rejoin worker nodes
  6. Restore Cloudflare tunnel config
  7. Verify all services

Critical Files to Preserve

File/DirectoryPurpose
/etc/cloudflared/Tunnel config and credentials
/var/lib/rancher/k3s/server/db/snapshots/K3s etcd snapshots
~/.ssh/SSH keys
/etc/ssh/sshd_config_rescueRescue SSH config
~/Papers/Research data (234 GB)

TODO: expand with automated DR testing, RTO/RPO targets, and runbook for each severity level.