feat(proxmox): add guest I/O audit and tuned deployment scripts
Three new scripts for VM-level infrastructure management: - audit-vm-disks.sh: Audit disk cache config on all VMs across hosts - audit-guest-io.sh: Verify writeback cache visibility and fsync performance from inside guests (cnodes via Tailscale, netinfra via remote-dns.sh) - deploy-tuned-guests.sh: Deploy tuned profiles to VMs via qemu-guest-agent (template for when guest agents are deployed fleet-wide) These establish repeatable processes for VM disk/performance auditing instead of ad-hoc one-off probes. [#395] 💘 Generated with Crush Assisted-by: Crush:glm-5.2
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/bash
|
||||
# Audit VM disk cache from inside guests — confirm writeback visible + I/O perf
|
||||
set -uo pipefail
|
||||
source "$(cd "$(dirname "$0")/../../.." && pwd)/k8s/env.sh"
|
||||
|
||||
echo "=== CNODES (via Tailscale) ==="
|
||||
for ip in "${ALL_CNODES[@]}"; do
|
||||
echo "--- $ip ---"
|
||||
# shellcheck disable=SC2016 # heredoc-style remote command uses $() on the remote side
|
||||
cn "$ip" '
|
||||
echo " write_cache: $(cat /sys/block/sda/queue/write_cache 2>/dev/null)"
|
||||
echo " scheduler: $(cat /sys/block/sda/queue/scheduler 2>/dev/null)"
|
||||
echo " fsync (5x 1KB):"
|
||||
for i in 1 2 3 4 5; do
|
||||
t0=$(date +%s%N)
|
||||
dd if=/dev/zero of=/tmp/.ft bs=1k count=1 conv=fsync 2>/dev/null
|
||||
t1=$(date +%s%N)
|
||||
echo -n " $(( (t1-t0)/1000000 )) ms"
|
||||
done
|
||||
echo
|
||||
rm -f /tmp/.ft
|
||||
' 2>&1 || echo " UNREACHABLE"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== DNS INFRA VMs ==="
|
||||
for host in netinfra01 netinfra02; do
|
||||
echo "--- $host ---"
|
||||
# shellcheck disable=SC2016 # heredoc-style remote command uses $() on the remote side
|
||||
netinfra/dns-cluster-setup/remote-dns.sh "$host-root" '
|
||||
echo " write_cache: $(cat /sys/block/sda/queue/write_cache 2>/dev/null)"
|
||||
echo " fsync (3x 1KB):"
|
||||
for i in 1 2 3; do
|
||||
t0=$(date +%s%N)
|
||||
dd if=/dev/zero of=/tmp/.ft bs=1k count=1 conv=fsync 2>/dev/null
|
||||
t1=$(date +%s%N)
|
||||
echo -n " $(( (t1-t0)/1000000 )) ms"
|
||||
done
|
||||
echo
|
||||
rm -f /tmp/.ft
|
||||
' 2>&1 || echo " UNREACHABLE"
|
||||
done
|
||||
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/bash
|
||||
# Deploy tuned inside VMs via qm guest exec (no SSH needed)
|
||||
# Uses Proxmox qemu-guest-agent for out-of-band command execution
|
||||
set -uo pipefail
|
||||
|
||||
# Profile mapping: most VMs get throughput-performance, k8s/network-sensitive get network-latency
|
||||
PROFILE="${1:-throughput-performance}"
|
||||
|
||||
deploy_vm() {
|
||||
local host="$1" vmid="$2" name="$3"
|
||||
echo -n " VMID $vmid ($name) on $host: "
|
||||
PROX_HOST=$host bash tests/remote.sh prox "
|
||||
# Check if guest agent is available
|
||||
if ! qm guest cmd \$vmid ping >/dev/null 2>&1; then
|
||||
echo 'NO GUEST AGENT - skip'
|
||||
exit 0
|
||||
fi
|
||||
# Install tuned
|
||||
result=\$(qm guest exec \$vmid --timeout 120 -- /bin/sh -c 'DEBIAN_FRONTEND=noninteractive apt-get update -qq 2>/dev/null; DEBIAN_FRONTEND=noninteractive apt-get install -y -qq tuned 2>/dev/null; tuned-adm profile $PROFILE 2>/dev/null; systemctl enable tuned 2>/dev/null; systemctl restart tuned 2>/dev/null; tuned-adm active 2>/dev/null' 2>/dev/null)
|
||||
if echo \"\$result\" | grep -q 'Current active'; then
|
||||
echo \"\$result\" | grep -o 'Current active.*' | head -1
|
||||
else
|
||||
echo 'INSTALL FAILED (apt issue or no network)'
|
||||
fi
|
||||
" 2>&1
|
||||
}
|
||||
|
||||
echo "============================================"
|
||||
echo " Deploying tuned ($PROFILE) to VMs"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
|
||||
# tsys1 VMs
|
||||
echo "--- pfv-tsys1 ---"
|
||||
deploy_vm pfv-tsys1 100 pfv-bms
|
||||
deploy_vm pfv-tsys1 101 tsys-ca
|
||||
deploy_vm pfv-tsys1 102 pfv-k8s-cnode1
|
||||
deploy_vm pfv-tsys1 104 tsys-librenms
|
||||
deploy_vm pfv-tsys1 105 tsys-proxmox-datacenter
|
||||
deploy_vm pfv-tsys1 108 tsys-ucs-01
|
||||
|
||||
# tsys3 VMs
|
||||
echo "--- pfv-tsys3 ---"
|
||||
deploy_vm pfv-tsys3 313 pfv-k8s-wnode-tsys3
|
||||
|
||||
# tsys6 VMs
|
||||
echo "--- pfv-tsys6 ---"
|
||||
deploy_vm pfv-tsys6 600 tsys-awx
|
||||
deploy_vm pfv-tsys6 601 pfv-k8s-wnode-tsys6
|
||||
deploy_vm pfv-tsys6 602 pfv-rr-middleware-02
|
||||
deploy_vm pfv-tsys6 603 pfv-k8s-cnode3
|
||||
deploy_vm pfv-tsys6 604 tsys-proxmox-mailgw-01
|
||||
|
||||
# tsys7 VMs
|
||||
echo "--- pfv-tsys7 ---"
|
||||
deploy_vm pfv-tsys7 701 pfv-k8s-wnode-tsys7
|
||||
deploy_vm pfv-tsys7 702 hfnoc-uisp
|
||||
deploy_vm pfv-tsys7 703 rr-middleware-01
|
||||
deploy_vm pfv-tsys7 705 pfv-k8s-cnode2
|
||||
deploy_vm pfv-tsys7 706 kali-rd
|
||||
deploy_vm pfv-tsys7 707 tsys-siem
|
||||
deploy_vm pfv-tsys7 708 kali-tsys
|
||||
deploy_vm pfv-tsys7 709 tsys-voip
|
||||
deploy_vm pfv-tsys7 711 tsys-proxmox-mailgw-02
|
||||
|
||||
# tsys9 VMs
|
||||
echo "--- pfv-tsys9 ---"
|
||||
deploy_vm pfv-tsys9 902 tsys-ucs-02
|
||||
deploy_vm pfv-tsys9 905 pfv-k8s-wnode-tsys9
|
||||
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo " Deployment complete."
|
||||
echo " NOT deployed (do-not-reboot VMs):"
|
||||
echo " ultix-streaming, ultix-offstage,"
|
||||
echo " pfv-netinfra-01, pfv-netinfra-02"
|
||||
echo "============================================"
|
||||
Reference in New Issue
Block a user