Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aeb2e80ab1 | ||
|
|
21adb89d4e |
@@ -78,26 +78,28 @@ infrastructure, Proxmox cluster ops, and k8s control plane.
|
|||||||
|
|
||||||
| Issue | Impact | Status |
|
| Issue | Impact | Status |
|
||||||
|-------|--------|--------|
|
|-------|--------|--------|
|
||||||
|
| **UCS + netinfra HA pairs both on tsys4** | tsys4 failure = DNS/DHCP/NTP + LDAP/AD fully dark | **CRITICAL — needs PDM migration** |
|
||||||
|
| **2 of 3 k3s cnodes on tsys4** | tsys4 failure = etcd quorum lost | **CRITICAL — needs PDM migration** |
|
||||||
| Technitium AXFR uses port 53 (occupied by Pi-hole) | Zone transfer via rsync instead of native AXFR | Workaround in place |
|
| Technitium AXFR uses port 53 (occupied by Pi-hole) | Zone transfer via rsync instead of native AXFR | Workaround in place |
|
||||||
| `download.proxmox.com` unreachable from sandbox VM | 2 validation tests warn (environmental) | Not a code issue |
|
| `download.proxmox.com` unreachable from sandbox VM | 2 validation tests warn (environmental) | Not a code issue |
|
||||||
| tsys4/5 hardware pending | Perf tuning incomplete on 2 hosts | Waiting on physical install |
|
| tsys4/5 hardware pending | Perf tuning incomplete on 2 hosts | Waiting on physical install |
|
||||||
|
|
||||||
## Pending (next session priorities)
|
## Pending (next session priorities)
|
||||||
|
|
||||||
1. **PDU: rename outlets** in `/etc/powerman/powerman.conf` to match physical
|
1. **CRITICAL: Migrate HA pairs to separate storage** (PDM, 10 min):
|
||||||
devices (Friday onsite)
|
- netinfra-02 (VMID 904): D2 → S3 (tsys4 → tsys5)
|
||||||
2. **k8s workers:** Join wnodes to the k3s cluster (agents, not servers)
|
- ucs-02 (VMID 902): D5 → S2 (tsys4 → tsys5)
|
||||||
2. **k8s: confirm 3 decisions** for future Talos/ITAR cluster:
|
2. **CRITICAL: Fix k3s cnode quorum risk** (PDM, 5 min):
|
||||||
- Cnode count: 3 (recommended) vs 5
|
- Move cnode1 (VMID 906) or cnode2 (VMID 705) from tsys4 to tsys5 storage
|
||||||
- Cnode host spread: tsys9 + tsys1 + tsys3 (recommended, 3-host, local-lvm)
|
3. **k8s workers:** Join wnodes to the k3s cluster (agents, not servers)
|
||||||
- Tailscale pattern: subnet router on `tailscale-router` (recommended)
|
4. **PDU:** Rename outlets in powerman.conf to match physical devices (Friday)
|
||||||
3. Provisioning: add `tailscale up --accept-dns=false` after resolv.conf deploy
|
|
||||||
4. DNS: verify Pi-hole forwards knel.net to local Technitium on both nodes
|
|
||||||
5. Perf: complete tsys4/5 tuning after hardware install (Friday)
|
5. Perf: complete tsys4/5 tuning after hardware install (Friday)
|
||||||
6. tsys2: rebuild from Win10 to Proxmox (k8s-dedicated host)
|
6. tsys2: rebuild from Win10 to Proxmox (k8s-dedicated host)
|
||||||
7. **k8s deferred topics** (tracked for future sessions): ETL tooling
|
7. **k8s deferred topics:** ETL tooling, HPC scheduler, vcluster policy,
|
||||||
(GDAL/PostGIS/xarray/Dask → RWX vs RWO), HPC scheduler (Argo/Volcano),
|
solar-aware scale-out
|
||||||
per-tenant vcluster policy templates, solar-aware scale-out
|
|
||||||
|
> **See [`docs/proxmox/AUDIT-2026-07-28.md`](docs/proxmox/AUDIT-2026-07-28.md)
|
||||||
|
> for the full fresh audit with VM inventory and action items.**
|
||||||
|
|
||||||
## Infrastructure Summary
|
## Infrastructure Summary
|
||||||
|
|
||||||
|
|||||||
+21
-9
@@ -64,18 +64,30 @@ All ports listen on the Tailscale IP (`100.70.77.93`).
|
|||||||
|
|
||||||
### Connect to a console
|
### Connect to a console
|
||||||
|
|
||||||
|
**Primary method — conman client (with logging + multiplexing):**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Via conman (with logging + multiplexing):
|
# From any Tailscale-connected workstation:
|
||||||
conman -f pfv-core-sw01 # attach to console
|
conman -d pfv-tsys4:7890 -f pfv-core-sw01 # connect to console
|
||||||
conman -q # query status of all consoles
|
conman -d pfv-tsys4:7890 -q # list all consoles
|
||||||
|
|
||||||
# Via telnet (direct, no logging):
|
|
||||||
telnet 100.70.77.93 2001 # pfv-core-sw01
|
|
||||||
|
|
||||||
# From any Tailscale-connected device:
|
|
||||||
telnet pfv-tsys4 2001
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Escape sequence: `&.` to disconnect, `&?` for help.
|
||||||
|
|
||||||
|
**Direct telnet (emergency only — conflicts with conman):**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Direct telnet to ser2net works ONLY when conmand is stopped, because
|
||||||
|
# conmand maintains persistent connections to all 7 TCP ports. Use:
|
||||||
|
ssh pfv-tsys4 'systemctl stop conmand'
|
||||||
|
telnet pfv-tsys4 2001 # pfv-core-sw01
|
||||||
|
ssh pfv-tsys4 'systemctl start conmand' # restart when done
|
||||||
|
```
|
||||||
|
|
||||||
|
**Do NOT use telnet while conmand is running** — conmand will reconnect
|
||||||
|
and kick your telnet session immediately ("Connection closed by foreign host").
|
||||||
|
The correct workflow is conman client → conmand → ser2net → device.
|
||||||
|
|
||||||
### Re-deploy after changing mapping.txt
|
### Re-deploy after changing mapping.txt
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -193,6 +193,12 @@ if ! grep -qiE '^\s*server\s+logdir\s*=' "$CONMAN_CONF" 2>/dev/null; then
|
|||||||
echo " Added server logdir = \"$CONMAN_LOGDIR\" to $CONMAN_CONF"
|
echo " Added server logdir = \"$CONMAN_LOGDIR\" to $CONMAN_CONF"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Ensure loopback=off so conmand is reachable over Tailscale (not localhost-only)
|
||||||
|
if ! grep -qiE '^\s*server\s+loopback\s*=' "$CONMAN_CONF" 2>/dev/null; then
|
||||||
|
sed -i "/^server logdir/a server loopback=off" "$CONMAN_CONF"
|
||||||
|
echo " Added server loopback=off to $CONMAN_CONF (enables remote access)"
|
||||||
|
fi
|
||||||
|
|
||||||
# Remove any previous auto-generated block (between markers)
|
# Remove any previous auto-generated block (between markers)
|
||||||
# Then append the new block
|
# Then append the new block
|
||||||
MARKER_BEGIN="# BEGIN PFV CONSOLE DEFINITIONS (auto-generated — do not edit between markers)"
|
MARKER_BEGIN="# BEGIN PFV CONSOLE DEFINITIONS (auto-generated — do not edit between markers)"
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
#
|
||||||
|
# console/query-remote.sh — install conman client and connect to a console
|
||||||
|
# on pfv-tsys4 over Tailscale.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# bash console/query-remote.sh # list consoles
|
||||||
|
# bash console/query-remote.sh pfv-core-sw01 # connect to a console
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REMOTE_HOST="${REMOTE_HOST:-pfv-tsys4}"
|
||||||
|
REMOTE_PORT="${REMOTE_PORT:-7890}"
|
||||||
|
|
||||||
|
echo "============================================"
|
||||||
|
echo " Conman Remote Console Access"
|
||||||
|
echo " Server: ${REMOTE_HOST}:${REMOTE_PORT} (Tailscale)"
|
||||||
|
echo "============================================"
|
||||||
|
|
||||||
|
# --- 1. Install conman client if missing ---
|
||||||
|
if ! command -v conman >/dev/null 2>&1; then
|
||||||
|
echo ""
|
||||||
|
echo "--- Installing conman client ---"
|
||||||
|
if sudo -n true 2>/dev/null; then
|
||||||
|
sudo apt-get update -qq && sudo apt-get install -y -qq conman
|
||||||
|
else
|
||||||
|
echo " Passwordless sudo not available. Please run:"
|
||||||
|
echo " sudo apt-get update && sudo apt-get install -y conman"
|
||||||
|
echo " Then re-run this script."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " conman client already installed."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 2. Verify connectivity ---
|
||||||
|
echo ""
|
||||||
|
echo "--- Connectivity check ---"
|
||||||
|
if timeout 3 bash -c "echo > /dev/tcp/${REMOTE_HOST}/${REMOTE_PORT}" 2>/dev/null; then
|
||||||
|
echo " [OK] ${REMOTE_HOST}:${REMOTE_PORT} reachable"
|
||||||
|
else
|
||||||
|
echo " [FAIL] Cannot reach ${REMOTE_HOST}:${REMOTE_PORT}"
|
||||||
|
echo " Is Tailscale up? Is conmand running on ${REMOTE_HOST}?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 3. List or connect ---
|
||||||
|
CONSOLE="${1:-}"
|
||||||
|
if [ -z "$CONSOLE" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "--- Available consoles ---"
|
||||||
|
conman -d "${REMOTE_HOST}:${REMOTE_PORT}" -q
|
||||||
|
echo ""
|
||||||
|
echo "To connect: bash $0 <console-name>"
|
||||||
|
echo " e.g: bash $0 pfv-core-sw01"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "--- Connecting to: $CONSOLE ---"
|
||||||
|
echo " Escape sequence: &. (to disconnect)"
|
||||||
|
echo ""
|
||||||
|
conman -d "${REMOTE_HOST}:${REMOTE_PORT}" -f "$CONSOLE"
|
||||||
|
fi
|
||||||
@@ -23,6 +23,7 @@ Fleet operations, hardware, performance tuning, storage architecture.
|
|||||||
| Document | Description | Last Reviewed |
|
| Document | Description | Last Reviewed |
|
||||||
|----------|-------------|---------------|
|
|----------|-------------|---------------|
|
||||||
| [`proxmox/PROJECT.md`](proxmox/PROJECT.md) | Comprehensive fleet report: 7 hosts, VM inventory, storage, recommendations | 2026-07-27 |
|
| [`proxmox/PROJECT.md`](proxmox/PROJECT.md) | Comprehensive fleet report: 7 hosts, VM inventory, storage, recommendations | 2026-07-27 |
|
||||||
|
| [`proxmox/AUDIT-2026-07-28.md`](proxmox/AUDIT-2026-07-28.md) | Fresh fleet audit with current VM placements, storage redundancy analysis, pre-k8s action items | 2026-07-28 |
|
||||||
| [`proxmox/TODO.md`](proxmox/TODO.md) | Pending physical hardware work (tsys2/4/5 Friday plan) | 2026-07-27 |
|
| [`proxmox/TODO.md`](proxmox/TODO.md) | Pending physical hardware work (tsys2/4/5 Friday plan) | 2026-07-27 |
|
||||||
| [`proxmox/K8S.md`](proxmox/K8S.md) | Kubernetes storage/host analysis (predecessor to [`k8s/`](k8s/)) | 2026-07-27 |
|
| [`proxmox/K8S.md`](proxmox/K8S.md) | Kubernetes storage/host analysis (predecessor to [`k8s/`](k8s/)) | 2026-07-27 |
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,254 @@
|
|||||||
|
# Fresh Fleet Audit — 2026-07-28
|
||||||
|
|
||||||
|
> **Supersedes placement data in [`PROJECT.md`](PROJECT.md) §4-§8.**
|
||||||
|
> The tables in PROJECT.md reflect the 2026-07-27 audit; VMs have since been
|
||||||
|
> migrated via PDM. This file is the current ground truth.
|
||||||
|
|
||||||
|
**Audit time:** 2026-07-28 19:55 CDT
|
||||||
|
**Method:** `qm list` + `qm config` on all 7 reachable hosts
|
||||||
|
**Hosts audited:** pfv-tsys1, pfv-tsys3, pfv-tsys4, pfv-tsys5, pfv-tsys6, pfv-tsys7, pfv-tsys9
|
||||||
|
**Hosts offline:** pfv-tsys2 (Win10, pending rebuild), pfv-tsys8 (offline 5+ days)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Host Summary
|
||||||
|
|
||||||
|
| Host | CPU | Threads | RAM (GB) | Local Disk | Role | Tuning |
|
||||||
|
|------|-----|---------|----------|-----------|------|--------|
|
||||||
|
| pfv-tsys1 | i7-4770 Haswell | 8 | 31 | HDD 932 GB | Infrastructure | Done |
|
||||||
|
| pfv-tsys3 | Xeon E3-1535M v5 Skylake | 8 | 31 | **NVMe 477 GB** | Kubernetes | Done |
|
||||||
|
| pfv-tsys4 | Xeon E3-1246 v3 Haswell | 8 | **15** | 6 disks (HDD+SSD) | Storage (NFS+PBS) | Blocked (NIC+RAM) |
|
||||||
|
| pfv-tsys5 | Xeon E5620 Westmere | 8 | **94** | 6 disks (HDD+SSD) | Storage+Preprod | Blocked (cable) |
|
||||||
|
| pfv-tsys6 | 2x Xeon E5530 Nehalem | 16 | 127 | HDD (USB 2.0!) | Kubernetes | Done |
|
||||||
|
| pfv-tsys7 | 2x Xeon E5-2630 v2 Ivy Bridge | 24 | 191 | HDD (USB 2.0!) | Kubernetes | Done |
|
||||||
|
| pfv-tsys9 | i5-10500 Comet Lake | 12 | 24 | SSD 250 GB | Infrastructure | Done |
|
||||||
|
|
||||||
|
**Changes since last audit:**
|
||||||
|
- tsys4 RAM still 15 GB (Friday 64 GB upgrade pending)
|
||||||
|
- tsys5 RAM is 94 GB (was documented as 96 GB)
|
||||||
|
- tsys6 RAM is 127 GB (was documented as 128 GB)
|
||||||
|
- tsys7 RAM is 191 GB (was documented as 192 GB)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. VM Fleet Inventory (Running VMs Only)
|
||||||
|
|
||||||
|
### tsys1 — 11 running VMs (Infrastructure)
|
||||||
|
|
||||||
|
| VMID | Name | Cores×Sockets | RAM (MB) | Disk | Storage | NFS Server |
|
||||||
|
|------|------|--------------|----------|------|---------|-----------|
|
||||||
|
| 100 | pfv-bms (HomeAssistant) | 2×1 | 4096 | 32 GB | D2 | tsys4 |
|
||||||
|
| 101 | tsys-ca | 2×1 | 2048 | 32 GB | D2 | tsys4 |
|
||||||
|
| 103 | **pfv-netinfra-01** | 2×1 | 2048 | 32 GB | D5 | tsys4 |
|
||||||
|
| 104 | tsys-librenms | 2×1 | 2048 | 50 GB | D2 | tsys4 |
|
||||||
|
| 105 | tsys-proxmox-datacenter | 2×1 | 2048 | 32 GB | D2 | tsys4 |
|
||||||
|
| 106 | **pfv-k8s-cnode3** | 2×1 | 4096 | 32 GB | **S3** | **tsys5** |
|
||||||
|
| 108 | **tsys-ucs-01** | 2×2 | 8000 | 32 GB | D2 | tsys4 |
|
||||||
|
| 109 | tailscale-router | 2×1 | 2048 | 25 GB | D2 | tsys4 |
|
||||||
|
| 114 | kali-tsys | 2×1 | 2048 | 32 GB | D2 | tsys4 |
|
||||||
|
| 117 | tsys-secure-workbench | 2×1 | 4000 | 32 GB | D2 | tsys4 |
|
||||||
|
| 102 | pfv-k8s-wnode-tsys1 | 4×1 | 4096 | 32 GB | S2 | tsys5 — **STOPPED** |
|
||||||
|
|
||||||
|
### tsys3 — 1 running VM (Kubernetes)
|
||||||
|
|
||||||
|
| VMID | Name | Cores×Sockets | RAM (MB) | Disk | Storage | NFS Server |
|
||||||
|
|------|------|--------------|----------|------|---------|-----------|
|
||||||
|
| 313 | **pfv-k8s-wnode-tsys3** | 8×1 | 28000 | 32 GB | D5 | tsys4 |
|
||||||
|
|
||||||
|
### tsys4 — 1 running VM (Storage)
|
||||||
|
|
||||||
|
| VMID | Name | Cores×Sockets | RAM (MB) | Disk | Storage | NFS Server |
|
||||||
|
|------|------|--------------|----------|------|---------|-----------|
|
||||||
|
| 400 | pfv-proxmox-backup-server | 2×1 | 2048 | 32 GB | local-lvm | LOCAL |
|
||||||
|
|
||||||
|
### tsys5 — 16 running VMs (Storage + Preprod)
|
||||||
|
|
||||||
|
| VMID | Name | Cores×Sockets | RAM (MB) | Disk | Storage | NFS Server |
|
||||||
|
|------|------|--------------|----------|------|---------|-----------|
|
||||||
|
| 509 | **pfv-k8s-wnode-tsys5** | 2×4 | 32000 | 32 GB | D2 | tsys4 |
|
||||||
|
| 5101 | sectestbed-siem | 2×2 | 10000 | 132 GB | local-nonprod | LOCAL |
|
||||||
|
| 5105 | sectestbed-awx | 2×2 | 4096 | 288 GB | local-nonprod | LOCAL |
|
||||||
|
| 5106 | sectestbed-k8s-cnode | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 5107 | sectestbed-k8s-wnode | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 5108 | sectestbed-librenms | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 5109 | sectestbed-netinfra | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 5111 | ultix-streaming | 2×2 | 9000 | 288 GB | T5-SSD | tsys5 (SSD) |
|
||||||
|
| 5112 | ultix-offstage | 2×2 | 6000 | 288 GB | local-lvm | LOCAL |
|
||||||
|
| 6000 | sectestbed-sandbox | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 51010 | sectestbed-tctc | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 51011 | sectestbed-cloudron | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 51012 | sectestbed-hfnoc | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 51013 | sectestbed-rancherplatform | 2×2 | 4096 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 53100 | tsys-preprod-awx | 2×2 | 9000 | 160 GB | local-nonprod | LOCAL |
|
||||||
|
| 53101 | tsys-preprod-siem | 2×2 | 12000 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
| 53102 | tsys-preprod-rancherplatform | 2×2 | 8000 | 32 GB | local-nonprod | LOCAL |
|
||||||
|
|
||||||
|
### tsys6 — 3 running VMs (Kubernetes)
|
||||||
|
|
||||||
|
| VMID | Name | Cores×Sockets | RAM (MB) | Disk | Storage | NFS Server |
|
||||||
|
|------|------|--------------|----------|------|---------|-----------|
|
||||||
|
| 100 | **pfv-k8s-wnode-tsys6** | 2×2 | 32000 | 32 GB | D5 | tsys4 |
|
||||||
|
| 600 | tsys-awx | 2×2 | 12000 | 32 GB | D2 | tsys4 |
|
||||||
|
| 601 | pfv-k8s-cnode4 | 4×1 | 4096 | 32 GB | D2 | tsys4 |
|
||||||
|
|
||||||
|
### tsys7 — 6 running VMs (Kubernetes)
|
||||||
|
|
||||||
|
| VMID | Name | Cores×Sockets | RAM (MB) | Disk | Storage | NFS Server |
|
||||||
|
|------|------|--------------|----------|------|---------|-----------|
|
||||||
|
| 701 | **pfv-k8s-wnode-tsys7** | 4×1 | 32000 | 32 GB | D5 | tsys4 |
|
||||||
|
| 702 | hfnoc-uisp | 2×2 | 8000 | 100 GB | D2 | tsys4 |
|
||||||
|
| 703 | rr-middleware | 2×1 | 2048 | 32 GB | D2 | tsys4 |
|
||||||
|
| 704 | TCTC | 4×1 | 6000 | 32 GB | D2 | tsys4 |
|
||||||
|
| 705 | **pfv-k8s-cnode2** | 4×1 | 4096 | 32 GB | D2 | tsys4 |
|
||||||
|
| 706 | pfv-k8s-cnode5 | 4×1 | 4096 | 32 GB | **S2** | **tsys5** |
|
||||||
|
|
||||||
|
### tsys9 — 6 running VMs (Infrastructure)
|
||||||
|
|
||||||
|
| VMID | Name | Cores×Sockets | RAM (MB) | Disk | Storage | NFS Server |
|
||||||
|
|------|------|--------------|----------|------|---------|-----------|
|
||||||
|
| 901 | tsys-siem | 2×1 | 8000 | 132 GB | D2 | tsys4 |
|
||||||
|
| 902 | **tsys-ucs-02** | 2×2 | 8000 | 50 GB | D5 | tsys4 |
|
||||||
|
| 903 | kali-rd | 2×1 | 2048 | 32 GB | D5 | tsys4 |
|
||||||
|
| 904 | **pfv-netinfra-02** | 2×1 | 4000 | 32 GB | D2 | tsys4 |
|
||||||
|
| 905 | **pfv-k8s-wnode-tsys9** | 4×1 | 4096 | 32 GB | **S2** | **tsys5** |
|
||||||
|
| 906 | **pfv-k8s-cnode1** | 2×1 | 4096 | 32 GB | D5 | tsys4 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Kubernetes Node Placement
|
||||||
|
|
||||||
|
### 3.1 Active k3s cluster (cnode1/2/3 — deployed this session)
|
||||||
|
|
||||||
|
| Cnode | VMID | Host | Disk | NFS Server | Quorum risk |
|
||||||
|
|-------|------|------|------|-----------|-------------|
|
||||||
|
| cnode1 | **906** | tsys9 | D5 | **tsys4** | **HIGH** |
|
||||||
|
| cnode2 | **705** | tsys7 | D2 | **tsys4** | **HIGH** |
|
||||||
|
| cnode3 | 106 | tsys1 | S3 | tsys5 | OK |
|
||||||
|
|
||||||
|
**CRITICAL: 2 of 3 active cnodes on tsys4.** tsys4 failure = cnode1 + cnode2 die = 1 of 3 = **QUORUM LOST**.
|
||||||
|
|
||||||
|
**Fix needed:** Move cnode1 or cnode2 to tsys5 storage (S2 or S3). One migration via PDM "Storage Migrate" solves this.
|
||||||
|
|
||||||
|
### 3.2 Inactive cnodes (cnode4/5 — exist but not in k3s cluster)
|
||||||
|
|
||||||
|
| Cnode | VMID | Host | Disk | NFS Server |
|
||||||
|
|-------|------|------|------|-----------|
|
||||||
|
| cnode4 | 601 | tsys6 | D2 | tsys4 |
|
||||||
|
| cnode5 | 706 | tsys7 | S2 | tsys5 |
|
||||||
|
|
||||||
|
### 3.3 Worker nodes (wnodes)
|
||||||
|
|
||||||
|
| Wnode | VMID | Host | Disk | NFS Server | RAM | Status |
|
||||||
|
|-------|------|------|------|-----------|-----|--------|
|
||||||
|
| wnode-tsys1 | 102 | tsys1 | S2 | tsys5 | 4 GB | STOPPED |
|
||||||
|
| wnode-tsys3 | 313 | tsys3 | D5 | tsys4 | 28 GB | Running |
|
||||||
|
| wnode-tsys5 | 509 | tsys5 | D2 | tsys4 | 32 GB | Running |
|
||||||
|
| wnode-tsys6 | 100 | tsys6 | D5 | tsys4 | 32 GB | Running |
|
||||||
|
| wnode-tsys7 | 701 | tsys7 | D5 | tsys4 | 32 GB | Running |
|
||||||
|
| wnode-tsys9 | 905 | tsys9 | S2 | tsys5 | 4 GB | Running |
|
||||||
|
|
||||||
|
**Storage: 4 wnodes on tsys4, 2 on tsys5.** One wnode per host achieved.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Critical HA Pairs — Storage Redundancy
|
||||||
|
|
||||||
|
### 4.1 netinfra pair — FAILED (both on tsys4)
|
||||||
|
|
||||||
|
| Role | VMID | Host | Disk | NFS Server |
|
||||||
|
|------|------|------|------|-----------|
|
||||||
|
| netinfra-01 | 103 | tsys1 | D5 | **tsys4** |
|
||||||
|
| netinfra-02 | 904 | tsys9 | D2 | **tsys4** |
|
||||||
|
|
||||||
|
**tsys4 failure = DNS/DHCP/NTP goes fully dark.**
|
||||||
|
|
||||||
|
**Fix:** Migrate netinfra-02 (VMID 904) from D2 (tsys4) to S3 (tsys5) via PDM.
|
||||||
|
|
||||||
|
### 4.2 UCS pair — FAILED (both on tsys4)
|
||||||
|
|
||||||
|
| Role | VMID | Host | Disk | NFS Server |
|
||||||
|
|------|------|------|------|-----------|
|
||||||
|
| ucs-01 | 108 | tsys1 | D2 | **tsys4** |
|
||||||
|
| ucs-02 | 902 | tsys9 | D5 | **tsys4** |
|
||||||
|
|
||||||
|
**tsys4 failure = LDAP/AD goes fully dark.**
|
||||||
|
|
||||||
|
**Fix:** Migrate ucs-02 (VMID 902) from D5 (tsys4) to S2 (tsys5) via PDM.
|
||||||
|
|
||||||
|
### 4.3 Corrected placement (after migration)
|
||||||
|
|
||||||
|
| VM | Host | Disk | NFS Server | Failure survival |
|
||||||
|
|----|------|------|-----------|-----------------|
|
||||||
|
| netinfra-01 | tsys1 | D5 | tsys4 | tsys4 dies → netinfra-02 alive on tsys5 |
|
||||||
|
| netinfra-02 | tsys9 | **S3** | **tsys5** | tsys5 dies → netinfra-01 alive on tsys4 |
|
||||||
|
| ucs-01 | tsys1 | D2 | tsys4 | tsys4 dies → ucs-02 alive on tsys5 |
|
||||||
|
| ucs-02 | tsys9 | **S2** | **tsys5** | tsys5 dies → ucs-01 alive on tsys4 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Storage Concentration
|
||||||
|
|
||||||
|
| Storage target | # running VMs | % of fleet |
|
||||||
|
|---------------|--------------|------------|
|
||||||
|
| D2 (tsys4 WDC Red 3TB HDD) | 16 | 36% |
|
||||||
|
| D5 (tsys4 Hitachi 2TB HDD) | 10 | 23% |
|
||||||
|
| local-nonprod (tsys5 local HDD) | 12 | 27% |
|
||||||
|
| S2 (tsys5 Seagate 1TB HDD) | 3 | 7% |
|
||||||
|
| S3 (tsys5 Seagate 1TB HDD) | 1 | 2% |
|
||||||
|
| T5-SSD (tsys5 Samsung SSD) | 1 | 2% |
|
||||||
|
| local-lvm (various hosts) | 2 | 5% |
|
||||||
|
|
||||||
|
**26 of 44 running VMs (59%) store their disks on tsys4 NFS exports.**
|
||||||
|
(Was 68% in the previous audit — improving but still concentrated.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Pre-k8s Buildout Action Items
|
||||||
|
|
||||||
|
These must be done before or during k8s worker node bringup:
|
||||||
|
|
||||||
|
### 6.1 CRITICAL: Migrate HA pairs to separate storage (PDM, 10 min)
|
||||||
|
|
||||||
|
1. `netinfra-02` (VMID 904): D2 → S3 (tsys4 → tsys5)
|
||||||
|
2. `ucs-02` (VMID 902): D5 → S2 (tsys4 → tsys5)
|
||||||
|
|
||||||
|
These are PDM "Storage Migrate" operations — no VM rebuild needed.
|
||||||
|
|
||||||
|
### 6.2 CRITICAL: Fix active cnode quorum (PDM, 5 min)
|
||||||
|
|
||||||
|
Move one active cnode from tsys4 to tsys5 storage:
|
||||||
|
- Best candidate: cnode1 (VMID 906) D5 → S2 (tsys4 → tsys5)
|
||||||
|
- Result: cnode1 on tsys5, cnode2 on tsys4, cnode3 on tsys5
|
||||||
|
- tsys4 failure = cnode2 dies only = 2 of 3 = **quorum OK**
|
||||||
|
|
||||||
|
### 6.3 Join workers to k3s cluster
|
||||||
|
|
||||||
|
Current wnodes exist as VMs but are not joined to the k3s cluster. Need to:
|
||||||
|
1. Install k3s agent on each wnode (using join token from cnode1)
|
||||||
|
2. Configure `--node-ip=<tailscale-ip>` on each
|
||||||
|
3. Label/taint per workload role
|
||||||
|
|
||||||
|
### 6.4 Friday hardware work (still pending)
|
||||||
|
|
||||||
|
- tsys4: PCIe NIC + 64 GB RAM (currently 15 GB)
|
||||||
|
- tsys5: 2nd ethernet cable + NVMe + D3 SSD relocation
|
||||||
|
- tsys2: Rebuild from Win10 to Proxmox
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Changes Since Previous Audit (2026-07-27)
|
||||||
|
|
||||||
|
| What | Before | After |
|
||||||
|
|------|--------|-------|
|
||||||
|
| cnode1 VMID | 107 (tsys1, D5) | **906** (tsys9, D5) |
|
||||||
|
| cnode2 VMID | 603 (tsys6, D2) | **705** (tsys7, D2) |
|
||||||
|
| cnode3 storage | D2 (tsys4) | **S3** (tsys5) |
|
||||||
|
| cnode5 VMID | 602 (tsys6) | **706** (tsys7, S2 tsys5) |
|
||||||
|
| wnode-tsys1 | not listed | VMID 102 (S2 tsys5, stopped) |
|
||||||
|
| wnode-tsys3 RAM | 20 GB | **28 GB** |
|
||||||
|
| tsys-awx (600) | STOPPED | **Running** |
|
||||||
|
| DellOpenManageEnterprise (500) | not listed | VMID 500 (D7, stopped) |
|
||||||
|
| sectestbed-librenms (5108) | not listed | Running |
|
||||||
|
| k3s cluster | not deployed | **3-node HA live** (cnode1/2/3) |
|
||||||
|
| Console management | manual screen | **ser2net+conman on tsys4** |
|
||||||
|
| PDU management | manual | **powerman on tsys1** |
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
HOST="$1"
|
HOST="$1"
|
||||||
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
||||||
SCRIPT_DIR="/home/reachableceo/projects/perfopt/scripts"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts"
|
||||||
|
|
||||||
echo "=== Uploading fix script to $HOST ==="
|
echo "=== Uploading fix script to $HOST ==="
|
||||||
scp "${SSH_OPTS[@]}" "$SCRIPT_DIR/fix-bond-nfs.sh" "root@$HOST:/root/fix-bond-nfs.sh" >/dev/null 2>&1
|
scp "${SSH_OPTS[@]}" "$SCRIPT_DIR/fix-bond-nfs.sh" "root@$HOST:/root/fix-bond-nfs.sh" >/dev/null 2>&1
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
|
|
||||||
SCRIPT_DIR="/home/reachableceo/projects/perfopt"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
CHECK_SH="$SCRIPT_DIR/scripts/check.sh"
|
CHECK_SH="$SCRIPT_DIR/scripts/check.sh"
|
||||||
LOG_DIR="$SCRIPT_DIR/returned-logs"
|
LOG_DIR="$SCRIPT_DIR/returned-logs"
|
||||||
mkdir -p "$LOG_DIR"
|
mkdir -p "$LOG_DIR"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# Default mode is dry-run. Pass --apply to commit. Pass --no-nfs to skip NFS section.
|
# Default mode is dry-run. Pass --apply to commit. Pass --no-nfs to skip NFS section.
|
||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
|
|
||||||
SCRIPT="/home/reachableceo/projects/perfopt/scripts/apply-tunings.sh"
|
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/apply-tunings.sh"
|
||||||
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
||||||
MODE=""
|
MODE=""
|
||||||
EXTRA_FLAGS=""
|
EXTRA_FLAGS=""
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ if [ -z "$HOST" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
||||||
SCRIPT_DIR="/home/reachableceo/projects/perfopt/scripts"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts"
|
||||||
|
|
||||||
echo "==================================================================="
|
echo "==================================================================="
|
||||||
echo " finish-host.sh — $HOST (mode: $MODE)"
|
echo " finish-host.sh — $HOST (mode: $MODE)"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
|
|
||||||
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
||||||
LOG_DIR="/home/reachableceo/projects/perfopt/returned-logs/iperf"
|
LOG_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/returned-logs/iperf"
|
||||||
mkdir -p "$LOG_DIR"
|
mkdir -p "$LOG_DIR"
|
||||||
|
|
||||||
HOSTS=(pfv-tsys1 pfv-tsys3 pfv-tsys4 pfv-tsys5 pfv-tsys6 pfv-tsys7)
|
HOSTS=(pfv-tsys1 pfv-tsys3 pfv-tsys4 pfv-tsys5 pfv-tsys6 pfv-tsys7)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
|
|
||||||
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
||||||
LOG_DIR="/home/reachableceo/projects/perfopt/returned-logs/iperf"
|
LOG_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/returned-logs/iperf"
|
||||||
mkdir -p "$LOG_DIR"
|
mkdir -p "$LOG_DIR"
|
||||||
|
|
||||||
ALL_HOSTS=(pfv-tsys1 pfv-tsys3 pfv-tsys4 pfv-tsys5 pfv-tsys6 pfv-tsys7)
|
ALL_HOSTS=(pfv-tsys1 pfv-tsys3 pfv-tsys4 pfv-tsys5 pfv-tsys6 pfv-tsys7)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# iperf-tsys6-tsys7.sh - validate 2Gbps LACP between the two tuned hosts.
|
# iperf-tsys6-tsys7.sh - validate 2Gbps LACP between the two tuned hosts.
|
||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new)
|
||||||
LOG_DIR="/home/reachableceo/projects/perfopt/returned-logs/iperf"
|
LOG_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/returned-logs/iperf"
|
||||||
mkdir -p "$LOG_DIR"
|
mkdir -p "$LOG_DIR"
|
||||||
|
|
||||||
TSYS6="10.100.100.6"
|
TSYS6="10.100.100.6"
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ SSH=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 \
|
|||||||
SCP=(-o BatchMode=yes -o ConnectTimeout=8 -o StrictHostKeyChecking=accept-new)
|
SCP=(-o BatchMode=yes -o ConnectTimeout=8 -o StrictHostKeyChecking=accept-new)
|
||||||
|
|
||||||
RECV="pfv-tsys6"; SEND="pfv-tsys7"
|
RECV="pfv-tsys6"; SEND="pfv-tsys7"
|
||||||
LOCAL_LOG_DIR="/home/reachableceo/projects/perfopt/returned-logs/iperf"
|
LOCAL_LOG_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/returned-logs/iperf"
|
||||||
SCRIPT="lacp-retrans-cause.sh"
|
SCRIPT="lacp-retrans-cause.sh"
|
||||||
LOCAL_SCRIPT="/home/reachableceo/projects/perfopt/scripts/${SCRIPT}"
|
LOCAL_SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/scripts/${SCRIPT}"
|
||||||
REMOTE_SCRIPT="/root/${SCRIPT}"
|
REMOTE_SCRIPT="/root/${SCRIPT}"
|
||||||
mkdir -p "$LOCAL_LOG_DIR"
|
mkdir -p "$LOCAL_LOG_DIR"
|
||||||
|
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ SCP=(-o BatchMode=yes -o ConnectTimeout=8 -o StrictHostKeyChecking=accept-new)
|
|||||||
|
|
||||||
RECV="pfv-tsys6" # receiver (we care most about its RX split)
|
RECV="pfv-tsys6" # receiver (we care most about its RX split)
|
||||||
SEND="pfv-tsys7" # sender (control: its TX split)
|
SEND="pfv-tsys7" # sender (control: its TX split)
|
||||||
LOCAL_LOG_DIR="/home/reachableceo/projects/perfopt/returned-logs/iperf"
|
LOCAL_LOG_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/returned-logs/iperf"
|
||||||
SCRIPT="lacp-rx-distribution.sh"
|
SCRIPT="lacp-rx-distribution.sh"
|
||||||
LOCAL_SCRIPT="/home/reachableceo/projects/perfopt/scripts/${SCRIPT}"
|
LOCAL_SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/scripts/${SCRIPT}"
|
||||||
REMOTE_SCRIPT="/root/${SCRIPT}"
|
REMOTE_SCRIPT="/root/${SCRIPT}"
|
||||||
|
|
||||||
mkdir -p "$LOCAL_LOG_DIR"
|
mkdir -p "$LOCAL_LOG_DIR"
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ esac
|
|||||||
|
|
||||||
BAUD=9600
|
BAUD=9600
|
||||||
HOST=root@pfv-tsys4
|
HOST=root@pfv-tsys4
|
||||||
HERE=/home/reachableceo/projects/perfopt
|
HERE=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)
|
||||||
LOCAL_DRIVER=$HERE/scripts/sw-capture.py
|
LOCAL_DRIVER=$HERE/scripts/sw-capture.py
|
||||||
LOCAL_CMDS=$HERE/switches/$SWITCH.cmds
|
LOCAL_CMDS=$HERE/switches/$SWITCH.cmds
|
||||||
LOCAL_LOG=$HERE/returned-logs/$SWITCH.log
|
LOCAL_LOG=$HERE/returned-logs/$SWITCH.log
|
||||||
|
|||||||
Reference in New Issue
Block a user