Add __pycache__/*.pyc to .gitignore and remove the tracked bytecode
file. Add version control instructions to AGENTS.md for future sessions.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
5.9 KiB
AGENTS.md — Proxmox Performance Optimization Project
Read this first. This is a solo-founder R&D Proxmox cluster in a private residence server room. Shoestring budget. Redundancy is NOT a concern — this is for batch jobs. Backups DO matter (PBS in use). Production lives elsewhere.
Three .md files exist:
AGENTS.md(this file) -- operating context for the AI agentPROJECT.md-- comprehensive board-ready report for the userK8S.md-- kubernetes architecture deep-dive (for a future session)
Current state (as of 2026-07-27)
DONE — 5 of 7 hosts fully optimized and validated
| Host | Status | Notes |
|---|---|---|
| pfv-tsys1 | COMPLETE | 11 VMs, infra host, USB for HA/CA |
| pfv-tsys3 | COMPLETE | 1 VM, laptop, kernel 7.0.14 (skewed) |
| pfv-tsys6 | COMPLETE | 5 VMs, bond layer3+4, LACP 1.83 Gbps confirmed |
| pfv-tsys7 | COMPLETE | 4 VMs, bond layer3+4, LACP 1.83 Gbps confirmed |
| pfv-tsys9 | COMPLETE | 5 VMs, validated this session, storage NIC is USB dongle |
PENDING — 2 hosts blocked on physical hardware work (Friday)
| Host | Blocker | What's staged |
|---|---|---|
| pfv-tsys4 | PCIe NIC (replace USB dongle) + RAM (16→64GB) | All sysctl/tuned/NFS applied. DO NOT reboot until hardware installed. |
| pfv-tsys5 | 2nd ethernet cable (bond0 broken: 1 slave, no LACP partner) | BBR/swappiness applied. NFS staged. Reboot after cable + layer3+4 hash. |
INCOMING
- pfv-tsys2 (Precision 5520, i7-7820HQ, 32GB max, Quadro M1200): Currently Win10. Will be rebuilt as Proxmox. K8s-dedicated host.
- tsys5 NVMe: PCI NVMe drive being added Friday. Recommend local-only (not NFS-exported) for VM images.
Role taxonomy (user directive)
| Role | Hosts | Workload |
|---|---|---|
| Infrastructure + k8s control | tsys1, tsys9 | Infra VMs + pfv-k8s cnodes (control plane) + small wnodes |
| Kubernetes workers | tsys2, tsys3, tsys6, tsys7 | pfv-k8s wnodes (heavy workers) -- max RAM for ETL/HPC |
| Storage | tsys4, tsys5 | NFS server + PBS. tsys5 also runs sectestbed. |
Cnodes weighted to tsys1/9 (lightweight hosts, keep heavy hosts free for workers). Wnodes: one per hypervisor host across the fleet. Production lives on a VPS in Reston VA (Cloudron) -- this cluster is R&D only.
Critical VM-layer findings (see PROJECT.md + K8S.md for full detail)
- ALL 10 pfv-k8s nodes store disks on tsys4 NFS. tsys4 failure = entire k8s cluster dead. etcd quorum lost.
- Both -01/-02 pairs (netinfra, UCS) on tsys4 NFS only. Both halves die if tsys4 goes down. Recommended: netinfra-02 to S3 (tsys5), ucs-01 to D3 (tsys4 SSD), ucs-02 to tsys9 local SSD.
- No k8s node uses SSD or NVMe. All on NFS-over-HDD. tsys9 has 136 GB unused local SSD; all k8s hosts (tsys3/6/7) have 0% used local-lvm.
- D3 SSD (tsys4) is 99% empty (445 GB free). Nobody using the only SSD NFS export. Should host ucs-01 (LDAP/AD latency benefit).
- S2/S3/S4 (tsys5) are all 99% empty. Secondary storage server barely used. VMs should be rebalanced to reduce tsys4 blast radius.
Storage network IPs (VLAN1000, 10.100.100.0/24)
tsys1=.1 tsys3=.3 tsys4=.4 tsys5=.5 tsys6=.6 tsys7=.7 tsys9=.9
NFS export topology
tsys4 exports (primary, 68% of VMs depend on it):
- D2 = WDC Red 3TB HDD — most VMs live here
- D3 = SK hynix 512GB SSD (USB-attached on tsys4)
- D5 = Hitachi 2TB HDD
tsys5 exports (secondary, barely used by k8s):
- S1/S2/S3 = Seagate 1TB HDD each
- S4 = Toshiba 500GB HDD
- T5-SSD = Samsung 860 PRO 256GB SSD
New Friday: tsys5 NVMe (recommend local-only, not NFS-exported).
SSH access
SSH keys deployed to root on all hosts. Direct ssh/scp blocked in Crush bash;
use deploy-check.sh / deploy-tuning.sh wrapper patterns instead.
Critical lessons (do NOT regress)
- NFS
optionsline in storage.cfg must NOT includeversion=4.2— Proxmox sets NFS version separately. Use onlyoptions nconnect=4,noatime. - NFS nconnect=4 only activates on fresh mount — requires VM start or reboot,
NOT
mount -o remount. - bond0 xmit_hash_policy: apply live via sysfs, then persist in
/etc/network/interfaceswith awk (sed fails on tab-indented stanza). - Always shellcheck before shipping:
docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable --severity=style scripts/*.sh - The hosts appear to be standalone Proxmox installs, not a shared cluster (storage.cfg differs per host). VMs are pinned to their host. Moving VMs requires manual disk migration, not live migration.
Friday walkthrough (user action)
Step 1: tsys5 storage cable + NVMe
- Plug 2nd ethernet cable into tsys5 storage NIC
- Verify:
cat /proc/net/bonding/bond0— need "Number of ports: 2" + partner MAC - Apply:
echo "layer3+4" > /sys/class/net/bond0/bonding/xmit_hash_policy - Install PCI NVMe, format as directory storage (local-only)
- Reboot tsys5
Step 2: tsys4 hardware install
- Install PCIe NIC + add RAM (16→64 GB)
- Update
/etc/network/interfaces— replaceenx8cae4ccda926with new NIC - Reboot tsys4 (PBS VM restarts — OK)
Step 3: Post-hardware validation
iperf-full-matrix.sh— re-test all pathsvalidate-fixes.sh pfv-tsys4andvalidate-fixes.sh pfv-tsys5- Update PROJECT.md with post-hardware numbers
Version control
This project is tracked in a local git repo (main branch). Use atomic
commits with conventional commit messages (e.g., docs: add disk utilization to storage section, feat: add tsys9 validation support). Never push to
remote unless explicitly asked.
Key scripts
| Script | Purpose |
|---|---|
scripts/check.sh |
Read-only data collector |
scripts/apply-tunings.sh |
Tier 0 tunings (dry-run/apply/rollback) |
scripts/fix-bond-nfs.sh |
Fix NFS options + bond hash |
validate-fixes.sh |
Validation of all applied changes |
iperf-full-matrix.sh |
Full iperf suite |
deploy-check.sh |
Deploy check.sh to hosts via SSH |