---
name: kubernetes-troubleshooting
description: Pod CrashLoop, ImagePull, Pending, OOMKilled, probe fail, service trafik gitmeme gibi K8s sorunlarını sistemli teşhis.
---

# Kubernetes Troubleshooting

## Ortak Doktrin

`agents/shared/severity-rubric.md` ve `agents/shared/escalation-matrix.md` default-load
sayılır (`agents/coordination.md` §11). Bu skill'in çıktısı **Critical / High / Medium /
Low + kanıt** formatında olmak zorunda — spekülatif Critical yasak. Sahiplik dışı bulgu
ilgili agent'a delege; karar yetkisi eşiği aşılırsa **kullanıcı onayı zorunlu**.

## Sahip Agent
**`devops-debugger`** — manifest fix `platform-engineer`'a, kod kök neden `backend-reviewer`'a delege.

## Ne Zaman Kullanılır
- Pod state: CrashLoopBackOff, ImagePullBackOff, Pending, ContainerCreating, Evicted
- Service erişilmiyor / 503
- HPA scale etmiyor
- Rollout stuck
- DNS / network policy şüphesi

## Workflow
1. **Read-only triage** (onaysız)
   - `kubectl get <kind> <name> -n <ns> -o yaml`
   - `kubectl describe <kind> <name> -n <ns>`
   - `kubectl get events -n <ns> --sort-by=.lastTimestamp | tail -50`
   - Pod: `kubectl logs <pod> --all-containers --tail=200`
   - Pod: `kubectl logs <pod> --previous --all-containers --tail=200`
   - `kubectl top pod -n <ns>`
2. **State -> Hipotez**
   - Pending: scheduler reason (`describe` Events)
     - Insufficient cpu/mem: requests yüksek veya cluster dolu
     - Taint: tolerations eksik
     - PVC: bound değil
   - ImagePullBackOff: imagePullSecrets, registry auth, tag yanlış, private registry network
   - CrashLoopBackOff: exit kod
     - 137 -> OOM
     - 1/2 -> app crash, log oku
     - probe fail -> probe path/port/threshold
   - OOMKilled: limit yetersiz veya leak
   - Evicted: node disk pressure
3. **Stabilize** (yazıcı = onay)
   - resources artır / azalt
   - probe threshold gevşet
   - rollout undo
4. **Doğrula**
   - 5-15dk metric + restart count

## Checklist
- [ ] resources requests + limits
- [ ] liveness/readiness/startup probe ayrı ayrı
- [ ] securityContext non-root
- [ ] image tag immutable
- [ ] PDB
- [ ] NetworkPolicy ingress allow doğru
- [ ] ServiceAccount + RBAC
- [ ] terminationGracePeriodSeconds yeterli
- [ ] preStop hook drain

## Antipattern
- `livenessProbe == readinessProbe` (cold start kill)
- Probe ilk saniye fail -> `initialDelaySeconds` veya `startupProbe`
- `kubectl exec` ile state mutate prod'da
- `kubectl delete pod` "force restart" diye (deployment yapsın)
- HPA metric source yanlış (custom metric API yok)
- `imagePullPolicy: Always` + sabit tag (gereksiz pull)

## Örnek Agent Davranışı
```
User: api pod Pending kalıyor staging
Agent:
1. kubectl describe pod -n staging api-xyz -> Events: "0/6 nodes available: 6 Insufficient memory"
2. resources.requests.memory = 2Gi, node free ~1.4Gi
3. Hipotez: requests aşırı yüksek; gerçek p95 = 700Mi
4. Çözüm: requests.memory 800Mi, limits 1.5Gi
5. Diff göster, onay al, apply
6. 5dk: kubectl get pod -> Running
```

## Çıktı Formatı
```markdown
# K8s Troubleshoot: <kind>/<name> (<ns>)

## State
## Kanıt
## Hipotez (sıralı)
## Eylem (read-only / onaylı)
## Doğrulama
```
