Chapter 15 · Azure Diagnostics
Subchapter 15.14
troubleshooting/aks/aks-troubleshooting.mdMarkdown5 KBView on GitHub
Primary AKS troubleshooting guide for incidents routed from ../../SKILL.md.
kube-system, workload, ingress, DNS, or scaling issueskubectl cannot connect, nodes are NotReady, or pods are unhealthy| Scenario | Reference |
|---|---|
| broad cluster investigation | general-diagnostics.md |
| workload, crash, image pull, readiness, or pending pod issues | pod-failures.md |
| node health, scaling, pressure, upgrade, or zone issues | node-issues.md |
| service, ingress, DNS, or network policy issues | networking.md |
When gathering AKS diagnostic evidence, prefer mcp_azure_mcp_aks, then the smallest discovered AKS-MCP tool that fits the read, then supporting Azure tools such as mcp_azure_mcp_applens, mcp_azure_mcp_monitor, or mcp_azure_mcp_resourcehealth. Use raw az aks and kubectl only when the AKS-MCP surface cannot perform the needed check.
When standard diagnostics do not reveal root cause, use Inspektor Gadget for real-time, low-level node and pod observability (DNS traces, TCP traces, process snapshots, file access traces). See references/inspektor-gadget.md for the gadget catalog, command patterns, and symptom-to-gadget mapping.
If cluster identity is missing, stop and ask for it.
NotReady, pressure, CNI, kubelet, certificate, or VMSS driftkube-system: CoreDNS, metrics-server, konnectivity, ingress, CNI, CSI, or add-on failuresPending, CrashLoopBackOff, OOMKilled, PVC, quota, secret, readiness, or dependency issueskube-system, events, affected namespace, pod detail, logs.az aks and kubectl reads.kubectl blocked: separate auth problems from network reachability.emergingIssues, prefer critical findings, rank the most actionable signal first.When AKS-MCP cannot perform the baseline read, run the aks-baseline script. It executes the read-only cluster + Kubernetes baseline sweep (provisioning state, node pools, activity log, node readiness, unhealthy pods, kube-system health, warning events) and returns a single labeled digest:
# bash
./scripts/aks-baseline.sh -g <resource-group> -n <cluster-name> [--namespace <namespace>]# PowerShell
.\scripts\aks-baseline.ps1 -ResourceGroup <resource-group> -Cluster <cluster-name> [-Namespace <namespace>]Then deep-dive on a specific pod as the digest indicates:
kubectl describe pod <pod-name> -n <namespace>
kubectl logs <pod-name> -n <namespace> --previousKeep these read-only unless the user explicitly asks for remediation.
Return scope and impact, evidence, failure domain, root cause, confidence, next checks, remediation, and escalation.