ЁЯй║ рдзрдбрд╛ 16 тАФ debugging playbook: рдкрд░рд┐рдЪрд╛рд░рд┐рдХреЗрдЪрд╛ triage chart
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: рдзрдбрд╛ 16 / 26 тАФ рднрд╛рдЧ 3 рд╕реБрд░реВ: рддреЗ рдЦрд░реЛрдЦрд░ рдЪрд╛рд▓рд╡рдгреЗ ┬╖ рдорд╛рдЧреАрд▓: lesson-15-multi-az-scaling ┬╖ рдкреБрдвреАрд▓: lesson-17-rbac
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдЖрдзреАрдЪреЗ рд╕рдЧрд│реЗ, рдЖрдгрд┐ рддреБрдореНрд╣реА рдЖрдпреБрд╖реНрдпрднрд░ рджрд░ рдЖрдард╡рдбреНрдпрд╛рд▓рд╛ рд╡рд╛рдкрд░рд╛рд▓ рдЕрд╕рд╛ рдзрдбрд╛: рдкреНрд░рддреНрдпреЗрдХ рдиреЗрд╣рдореАрдЪреНрдпрд╛ pod рдЖрдЬрд╛рд░рд╛рд╕рд╛рдареА triage chart, рдЖрдгрд┐ рддреЗ рд╕рдЧрд│реЗ рдУрд│рдЦрдгрд╛рд░рд╛ рдкрд╛рдЪ tools рдЪрд╛ рд╕рд░рд╛рд╡.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╢рд╛рд│реЗрдЪреА рдкрд░рд┐рдЪрд╛рд░рд┐рдХрд╛ ЁЯй║ рдШрд╛рдмрд░рдд рдирд╛рд╣реА рдЖрдгрд┐ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдд рдирд╛рд╣реА. рдХреЛрдгреАрд╣реА рдЖрд▓реЗ рддрд░реА рддреА рддреЛрдЪ рд╕рд░рд╛рд╡ рдХрд░рддреЗ: chart рдкрд╛рд╣рд╛, рдард░рд▓реЗрд▓реЗ рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░рд╛, рдордЧ рдЙрдкрдЪрд╛рд░ рдХрд░рд╛. Kubernetes debugging рдЕрдЧрджреА рддрд╕реЗрдЪ рдЖрд╣реЗ. рдкрд╛рдЪ рдкреНрд░рд╢реНрди, рдХреНрд░рдорд╛рдиреЗ:
kubectl describe pod XтАФ рд░реБрдЧреНрдгрд╛рдЪрд╛ chart: рддрд│рд╛рд╢реА рдЕрд╕рд▓реЗрд▓реЗ Events рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рджрд╛рдирд╛рдЪрд╛ 90%. рддреЗ рдЖрдзреА рд╡рд╛рдЪрд╛, рдиреЗрд╣рдореА.kubectl logs XтАФ рдмреЗрд╢реБрджреНрдз рдкрдбрдгреНрдпрд╛рдЖрдзреА рд░реБрдЧреНрдг рдХрд╛рдп рдореНрд╣рдгрд╛рд▓рд╛.--previous= рдорд╛рдЧрдЪреНрдпрд╛ рд╡реЗрд│реА рдмреЗрд╢реБрджреНрдз рдкрдбрдгреНрдпрд╛рдЖрдзреА рдХрд╛рдп рдореНрд╣рдгрд╛рд▓рд╛ (crash loops рд╕рд╛рдареА рдлрд╛рд░ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ!).-f= рдереЗрдЯ рдРрдХрд╛.kubectl get events -wтАФ рдХреЙрд░рд┐рдбреЙрд░рдордзрд▓реНрдпрд╛ рдЧрдкреНрдкрд╛: рдЦреЛрд▓реАрдд рдШрдбрдгрд╛рд░реЗ рд╕рдЧрд│реЗ, рдХреНрд░рдорд╛рдиреЗ.kubectl exec -it X -- shтАФ рд░реБрдЧреНрдгрд╛рд▓рд╛ рдЖрддреВрди рддрдкрд╛рд╕рд╛.kubectl port-forward X 8080:3000тАФ reception рдЯрд╛рд│реВрди рд░реБрдЧреНрдгрд╛рд▓рд╛ рдереЗрдЯ рдмреЛрд▓рд╡рд╛ (Service/Ingress рд▓рд╛ рдмрдЧрд▓ рджреЗрдКрди рдиреЗрдордХреЗ рдХреБрдареЗ рдмрд┐рдШрдбрддреЗ рддреЗ рд╡реЗрдЧрд│реЗ рдХрд░рд╛).
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TB
sick["ЁЯдТ pod is sick"] --> desc["1 describe тЖТ read EVENTS"]
desc --> p["Pending ЁЯкС<br/>no desk fits:<br/>requests too big? taints?<br/>cluster full? (L08, L15, L20)"]
desc --> i["ImagePullBackOff ЁЯН▒<br/>wrong lunchbox label:<br/>typo? tag missing? no ECR<br/>permission? (L01, AWS L05)"]
desc --> c["CrashLoopBackOff ЁЯТе<br/>starts, dies, repeats:<br/>logs --previous!<br/>bad config? (L06)"]
desc --> o["OOMKilled ЁЯлГ<br/>ate over the limit:<br/>raise limit or fix leak (L08)"]
desc --> s["Service silent тШОя╕П<br/>selector тЙа labels?<br/>kubectl get endpointslices (L04)"]
тЭУ рдХрд╛рдп (chart, рд▓рдХреНрд╖рдгрд╛рдиреБрд╕рд╛рд░)
| рд▓рдХреНрд╖рдг | рдЕрд░реНрде | рдкрд╣рд┐рд▓рд╛ рдкреНрд░рд╢реНрди |
|---|---|---|
Pending |
scheduler рд▓рд╛ рдмрд╛рдХ рд╕рд╛рдкрдбрд▓рд╛ рдирд╛рд╣реА | describe: рдХреЛрдгрддреА рдЕрдЯ рдЕрдкрдпрд╢реА тАФ resources, taints, volume zone? |
ImagePullBackOff |
рдбрдмрд╛ рдЖрдгрддрд╛ рдпреЗрдд рдирд╛рд╣реА | рдиреЗрдордХреА image string? tag рдЖрд╣реЗ рдХрд╛? registry auth (node рдЪреА IAM рдЯреЛрдкреА)? |
CrashLoopBackOff |
рд╕реБрд░реВ рд╣реЛрддреЛ рдордЧ рдорд░рддреЛ, рдкреБрдиреНрд╣рд╛ рдкреБрдиреНрд╣рд╛ | logs --previous; рдордЧ env/config, рдордЧ command |
OOMKilled (exit 137) |
memory limit рдЧрд╛рдард▓реА | describe рдордзреНрдпреЗ Last State рджрд┐рд╕рддреЗ; limit рд╡рд╛рдврд╡рд╛ рдХрд┐рдВрд╡рд╛ leak рд╢реЛрдзрд╛ |
Running рдкрдг Ready рдирд╛рд╣реА |
readiness probe рдЕрдкрдпрд╢реА | /readyz рдЦрд░реЛрдЦрд░ рдирд┐рд░реЛрдЧреА рдЖрд╣реЗ рдХрд╛? DB рдкреЛрд╣реЛрдЪрддреЗ рдХрд╛? (L07) |
| Service рдХрд╛рд╣реАрдЪ рдкрд░рдд рджреЗрдд рдирд╛рд╣реА | selector/labels рдЬреБрд│рдд рдирд╛рд╣реАрдд | get endpointslices тАФ рд░рд┐рдХрд╛рдореА рдпрд╛рджреА = reception рд▓рд╛ рдХреЛрдгреАрдЪ рдирд╛рд╣реА |
Node NotReady |
рдмрд╛рдХрдЪ рдЖрдЬрд╛рд░реА рдЖрд╣реЗ | рд╣реА EC2 рдЪреА рдЧреЛрд╖реНрдЯ: describe node, рдордЧ AWS рдХреЛрд░реНрд╕ L12 |
ЁЯдФ рдХрд╛
рдЖрдзреАрдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдзрдбреНрдпрд╛рдиреЗ рдПрдХ рдпрдВрддреНрд░рдгрд╛ рд╢рд┐рдХрд╡рд▓реА; incidents рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛ рдпрдВрддреНрд░рдгрд╛ рдПрдХреЗрдХ рдХрд░реВрди рдЕрдкрдпрд╢реА рд╣реЛрдгреЗ. рддрдЬреНрдЬреНрдЮ рдЬрд╛рд╕реНрдд рд╣реБрд╢рд╛рд░ рдирд╕рддрд╛рдд тАФ рддреЗ рдлрдХреНрдд рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреНрдпрд╛рдРрд╡рдЬреА рдиреЗрд╣рдореА рддреЛрдЪ рд╕рд░рд╛рд╡ рдХрд░рддрд╛рдд. Events тЖТ logs тЖТ exec. рдпрд╛рдЪ рдХреНрд░рдорд╛рдиреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ тАФ рджрд╡рд╛рдЦрд╛рдиреНрдпрд╛рдЪрд╛ рд╕рд░рд╛рд╡ (рд╕реБрд░рдХреНрд╖рд┐рдд, рд╕реНрд╡рддрдГ рдУрдврд╡реВрди рдШреЗрддрд▓реЗрд▓рд╛)
# patient 1: ImagePullBackOff
kubectl -n school run sick1 --image=nginxdemos/hello:no-such-tag
kubectl -n school describe pod sick1 | tail -5 # Events tell you instantly
# patient 2: CrashLoopBackOff
kubectl -n school run sick2 --image=busybox -- sh -c "echo I die now; exit 1"
kubectl -n school logs sick2 --previous 2>/dev/null || kubectl -n school logs sick2
# patient 3: Pending (impossible request)
kubectl -n school run sick3 --image=nginx --overrides='{"spec":{"containers":[{"name":"sick3","image":"nginx","resources":{"requests":{"cpu":"100"}}}]}}'
kubectl -n school describe pod sick3 | grep -A3 Events
# discharge everyone:
kubectl -n school delete pod sick1 sick2 sick3
ЁЯФз рдпрд╛ рдзрдбреНрдпрд╛рд╕рд╛рдареА kubectl
kubectl describe ┬╖ kubectl get events ┬╖ kubectl logs --previous ┬╖ kubectl exec
ЁЯФЧ рдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд: ЁЯкк AWS L05 (ImagePullBackOff рдмрд╣реБрдзрд╛ ECR permission рдореБрд│реЗ рдЕрд╕рддреЛ)
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ
рджрд╡рд╛рдЦрд╛рдиреНрдпрд╛рддрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЬрд╛рд░реА pod рдЪреЗ рдирд┐рджрд╛рди describe тЖТ events тЖТ logs (--previous) тЖТ exec рдордзреВрди рд╣реЛрддреЗ, рдбреЛрдХрд╛рд╡реВрди рди рдкрд╛рд╣рддрд╛.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ
local cluster: kubectl delete -f k8s/ (рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА apply рдХреЗрд▓реЗрд▓реА file) тАФ EKS рд╡рд░ рдЪрд╛рд▓реВ рд░рд╛рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рдХрд╢рд╛рдЪреЗрд╣реА рддрд╛рд╕рд╛рдкреНрд░рдорд╛рдгреЗ рдмрд┐рд▓ рдпреЗрддреЗ
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- events рдЖрдзреА logs рд╡рд╛рдЪрдгреЗ тАФ рддреЗ рдХрдзреАрдЪ рд╕реБрд░реВ рдХрд╛ рдЭрд╛рд▓реЗ рдирд╛рд╣реА рддреЗ events рд╕рд╛рдВрдЧрддрд╛рдд
- CrashLoopBackOff рд╡рд░
--previousрд╡рд┐рд╕рд░рдгреЗ
тПня╕П рдкреБрдвреЗ
рд╣реЗ commands рдЪрд╛рд▓рд╡рд╛рдпрдЪреА рдкрд░рд╡рд╛рдирдЧреА рдореБрд│рд╛рдд рдХреЛрдгрд╛рд▓рд╛ рдЖрд╣реЗ тАФ рдЖрдгрд┐ рддреБрдордЪрд╛ CI robot cluster-admin рдХрд╛ рдирд╕рд╛рд╡рд╛: RBAC.
git checkout lesson-17-rbac