Diagnostic Overview & Troubleshooting
Diagnostic guides and step-by-step runbooks for PiVirt hypervisor nodes, networking layers, and Talos Linux Kubernetes clusters. Each guide addresses a specific operational symptom with root cause analysis, diagnostic commands, and verified resolutions.
Quick Reference
Section titled “Quick Reference”| Symptom | Guide |
|---|---|
| VM running but no DHCP / IP address | VM Gets No DHCP / IP Address |
| QEMU fails with “Failed to get write lock” | QEMU Disk Write Lock |
| Talos reboots in kexec loop, never installs | Talos Kexec / Reboot Loop |
| Kubernetes node NotReady or missing | Node NotReady or Missing |
| Metadata server returns 404 / VM not found | Metadata Server 404 |
| OVS bridge missing TAP ports | OVS Bridge / TAP Port Issues |
General Diagnostic Commands
Section titled “General Diagnostic Commands”Cluster Health
Section titled “Cluster Health”# Check cluster statuspvcli cluster get prod-cluster -o yaml
# Check node statuspvcli cluster node list
# Check component healthpvcli cluster health
# View cluster eventspvcli cluster events --tail 50Component Logs
Section titled “Component Logs”# View pivirtd logsjournalctl -u pivirtd -f
# View agent logsjournalctl -u pivirt-agent -f
# View iscsiman logsjournalctl -u iscsiman -f
# View deployer logsjournalctl -u deployer -fDebug Logging
Section titled “Debug Logging”# Enable debug logging for pivirtdpivirtd --config /etc/pivirtd/config.yaml --log-level debug
# Enable debug logging for agentpivirt-agent --config /etc/pivirt-agent/config.yaml --log-level debugTalos Stack Troubleshooting Guides
Section titled “Talos Stack Troubleshooting Guides”These guides were created during the July 2026 Talos re-provisioning and cover the specific failure modes encountered:
Networking Issues
Section titled “Networking Issues”- VM Gets No DHCP / IP Address — Covers TAP not attached to OVS bridge, missing MAC in ipam.json, DHCP bound to wrong bridge
- OVS Bridge / TAP Port Issues — Covers missing TAP ports, duplicate ports, missing br-provision, OpenFlow misconfiguration
VM Lifecycle Issues
Section titled “VM Lifecycle Issues”- QEMU Disk Write Lock — Stale QEMU processes holding disk locks, corrupted disk images
- Talos Kexec / Reboot Loop — Missing KSPP kernel params, no network during install, stale NVRAM, wrong disk bus type
- Metadata Server 404 — Missing DNAT rule, VM IP not in metadata store, missing talos-config, metadata server not listening
Kubernetes Issues
Section titled “Kubernetes Issues”- Node NotReady or Missing — Stale kubeconfig tokens, old node objects, CNI not initialized, kubelet bootstrap timeout
Common Issues (General PiVirt)
Section titled “Common Issues (General PiVirt)”VM Won’t Start
Section titled “VM Won’t Start”Symptoms:
- VM status remains
PendingorCreating - Error message in
pvcli vm get <vm> -o yaml
Resolution:
# Check pivirtd logsjournalctl -u pivirtd -f
# Verify KVM is availablekvm-okls -la /dev/kvm
# Check storage poolpvcli storage pool list
# Check network bridgebrctl showNetwork Connectivity Issues
Section titled “Network Connectivity Issues”Symptoms:
- VM cannot reach network
- DHCP not assigning IP
Resolution:
# Check bridge configurationbrctl show virbr0ip link show virbr0
# Check VM network interfacepvcli vm get web-01 -o json | jq '.spec.nics'
# Check iptables/nftablesnft list ruleset | grep virbr0
# Restart networkingsystemctl restart networkingStorage Issues
Section titled “Storage Issues”Symptoms:
- Volume creation fails
- VM disk errors
Resolution:
# Check storage poolpvcli storage pool listpvcli storage pool get default -o yaml
# Check disk spacedf -h /var/lib/pivirtd
# Check LVM (if using LVM)lvsvgspvs
# Check iSCSI sessionsiscsiadm -m session -P3
# Check multipathmultipath -llPiTrust PKI / mTLS Certificate Issues
Section titled “PiTrust PKI / mTLS Certificate Issues”Symptoms:
- mTLS handshake failures
- “certificate expired” or “unknown authority” errors
Resolution:
# Verify certificate chainopenssl verify -CAfile /etc/pivirt/certs/ca-chain.pem /etc/pivirt/certs/agent-server.crt
# Check OCSP statusopenssl ocsp \ -issuer /etc/pivirt/certs/PiCA.pem \ -cert /etc/pivirt/certs/agent-server.crt \ -url http://pitrust.pivirt.internal:8080/ocsp \ -CAfile /etc/pivirt/certs/PiRootR1.pem
# In Kubernetes, check ManagedCertificate CRD statuskubectl get managedcertificate -n pivirt-systemkubectl describe managedcertificate pivirt-agent-tls -n pivirt-systemCluster Quorum Lost
Section titled “Cluster Quorum Lost”Symptoms:
- etcd cluster unhealthy
- Cannot create/update resources
Resolution:
# Check etcd statusetcdctl endpoint health --endpoints=https://etcd-0:2379,https://etcd-1:2379,https://etcd-2:2379
# Check etcd membersetcdctl member list --endpoints=https://etcd-0:2379
# Restore from backuppvcli cluster backup restore --name backup-2024-01-15Performance Issues
Section titled “Performance Issues”High CPU Usage
Section titled “High CPU Usage”# Check VM CPU usagepvcli vm get web-01 -o json | jq '.status.cpu'
# Check host CPU usagetophtop
# Check CPU pinningpgrep -af qemu-systemtaskset -pc <pid>
# Enable CPU pinning in VM spec# spec.cpu.pinning: trueHigh Memory Usage
Section titled “High Memory Usage”# Check VM memory usagepvcli vm get web-01 -o json | jq '.status.memory'
# Check host memory usagefree -h
# Enable hugepagesecho 1024 > /proc/sys/vm/nr_hugepages
# Enable memory ballooning# spec.memory.balloon: trueSlow Disk I/O
Section titled “Slow Disk I/O”# Check disk I/Oiostat -x 1
# Check storage pool typepvcli storage pool get default -o yaml
# Enable caching# spec.disks[].cache: "writeback"
# Use virtio-blk instead of virtio-scsi# spec.disks[].bus: "virtio"API Issues
Section titled “API Issues”Connection Refused
Section titled “Connection Refused”# Check endpointpvcli config view | grep endpoint
# Test connectivitync -zv pivirtd-prod.pilab.hu 9001
# Check TLSopenssl s_client -connect pivirtd-prod.pilab.hu:9001 -CAfile ~/.config/pvcli/ca.crtPermission Denied
Section titled “Permission Denied”# Verify cert/key matchopenssl x509 -noout -modulus -in ~/.config/pvcli/client.crt | openssl md5openssl rsa -noout -modulus -in ~/.config/pvcli/client.key | openssl md5
# Check certificate expiryopenssl x509 -in ~/.config/pvcli/client.crt -text -noout | grep "Not After"
# Check RBAC policycat /etc/pivirt-agent/rbac.yamlGetting Help
Section titled “Getting Help”Support Channels
Section titled “Support Channels”- GitHub Issues: pilab-dev/pivirt/issues
- Discord: PiLab Community
- Documentation: pivirt.pilab.hu
Collecting Diagnostics
Section titled “Collecting Diagnostics”# Collect cluster diagnosticspvcli cluster diagnostics --output /tmp/pivirt-diagnostics.tar.gz
# Collect component logspvcli cluster logs --component pivirtd --tail 1000 > /tmp/pivirtd.logpvcli cluster logs --component agent --tail 1000 > /tmp/agent.log
# Collect system informationpvcli cluster info --output /tmp/pivirt-info.json