Setting the file. One moment.
Pod Deep Dive · AKS Troubleshooting · microsoft/azure-skills · Skills Docs
ContentsBack to the top of the page scripts/pod-deep-dive.sh
scripts/ pod-deep-dive.sh
Shell · 119 lines · 4 KB
9
CLUSTER
=
"
${4
:-
${
AKS_CLUSTER_NAME
:-
}
}
"
10 CONTEXT = " ${5 :- ${ AKS_KUBE_CONTEXT :- } } "
11 ARTIFACTS = " ${6 :- ${ AKS_ARTIFACTS_DIR :- } } "
12 LOG_LINES = 50
13
14 [ -n " $NS " ] && [ -n " $POD " ] && [ -n " $RG " ] && [ -n " $CLUSTER " ] &&
15 [ -n " $CONTEXT " ] && [ -n " $ARTIFACTS " ] || {
16 echo "usage: pod-deep-dive.sh <namespace> <pod> <resource-group> <cluster> <context> <artifacts-dir>" >&2
17 exit 2
18 }
19 [ " $ARTIFACTS " != "/" ] && [ ! -L " $ARTIFACTS " ] || {
20 echo "invalid artifacts directory" >&2
21 exit 2
22 }
23
24 command -v az > /dev/null 2>&1 || {
25 echo "Azure CLI (az) is required. Install it from https://aka.ms/installazurecli and retry." >&2
26 exit 2
27 }
28 command -v kubectl > /dev/null 2>&1 || {
29 echo "kubectl is required. Install it from https://kubernetes.io/docs/tasks/tools/ and retry." >&2
30 exit 2
31 }
32 command -v jq > /dev/null 2>&1 || {
33 echo "jq is required. Install it from https://jqlang.github.io/jq/download/ and retry." >&2
34 exit 2
35 }
36
37 mkdir -p " $ARTIFACTS "
38 chmod 700 " $ARTIFACTS "
39
40 if [ -n "${ AKS_SUBSCRIPTION_ID :- }" ]; then
41 aks_json = $( az aks show --subscription " $AKS_SUBSCRIPTION_ID " \
42 -g " $RG " -n " $CLUSTER " -o json 2> /dev/null )
43 else
44 aks_json = $( az aks show -g " $RG " -n " $CLUSTER " -o json 2> /dev/null )
45 fi || {
46 echo "AKS resource target is inaccessible" >&2
47 exit 2
48 }
49 kube_server = $( kubectl --context " $CONTEXT " config view --minify \
50 -o jsonpath='{.clusters[0].cluster.server}' 2> /dev/null ) || {
51 echo "kube context is inaccessible" >&2
52 exit 2
53 }
54 normalize () {
55 printf '%s' " $1 " | tr '[:upper:]' '[:lower:]' |
56 sed -E 's#^[a-z]+://##; s#/.*$##; s#:[0-9]+$##; s/\.$//'
57 }
58 kube_host = $( normalize " $kube_server " )
59 public_host = $( normalize "$( printf '%s' " $aks_json " | jq -r '.fqdn // empty')" )
60 private_host = $( normalize "$( printf '%s' " $aks_json " | jq -r '.privateFqdn // empty')" )
61 [ -n " $kube_host " ] &&
62 { [ " $kube_host " = " $public_host " ] || [ " $kube_host " = " $private_host " ]; } || {
63 echo "kube context does not target the named AKS cluster" >&2
64 exit 2
65 }
66 kube () {
67 kubectl --context " $CONTEXT " " $@ "
68 }
69 redact () {
70 sed -E \
71 -e 's/(Authorization:).*/\1 [REDACTED]/I' \
72 -e 's/((client[_-]?secret|password|token|api[_-]?key)[[:space:]]*[:=][[:space:]]*)[^[:space:]]+/\1[REDACTED]/Ig' \
73 -e 's/([?&]sig=)[^&[:space:]]+/\1[REDACTED]/Ig'
74 }
75 logs () {
76 label = " $1 "
77 shift
78 raw = " $ARTIFACTS / $label .raw.log"
79 kube logs " $POD " -n " $NS " --all-containers=true --prefix=true \
80 --tail= " $LOG_LINES " " $@ " > " $raw " 2>&1 || true
81 chmod 600 " $raw "
82 redact < " $raw " | sed -n "1,${ LOG_LINES }p"
83 }
84
85 echo "=== Pod Deep Dive: $NS / $POD $( date -u +%Y-%m-%dT%H:%M:%SZ) ==="
86 echo "targetProof=matched cluster= $RG / $CLUSTER context= $CONTEXT "
87 echo "rawArtifacts= $ARTIFACTS "
88
89 echo ""
90 echo "--- Pod Status ---"
91 kube get pod " $POD " -n " $NS " -o wide 2> /dev/null || { echo "Pod not found" ; exit 1 ; }
92
93 echo ""
94 echo "--- Describe ---"
95 kube describe pod " $POD " -n " $NS " 2> /dev/null
96
97 echo ""
98 echo "--- Container Resources ---"
99 kube get pod " $POD " -n " $NS " -o json | \
100 jq '.spec.containers[] | {name, resources}' 2> /dev/null || true
101
102 echo ""
103 echo "--- Current Logs (all containers) ---"
104 logs current
105
106 echo ""
107 echo "--- Previous Logs (all containers) ---"
108 logs previous --previous
109
110 echo ""
111 echo "--- Events ---"
112 kube get events -n " $NS " --field-selector "involvedObject.name= $POD " --sort-by= '.lastTimestamp' 2> /dev/null || true
113
114 echo ""
115 echo "--- Resource Usage ---"
116 kube top pod " $POD " -n " $NS " --containers 2> /dev/null || echo "(metrics not available)"
117
118 echo ""
119 echo "=== End Deep Dive ==="