فکر می‌کردم kubectl apply کافی است. بعد فهمیدم Pod می‌میرد، Service هست ولی Endpoint خالی است، و Ingress چیزی را نشان نمی‌دهد — در حالی که همه منابع «Running» به نظر می‌رسند.

اولین درس: در K8s «Running» یعنی کانتینر start شده، نه اینکه اپلیکیشن آماده است. readinessProbe و livenessProbe را جدا بگیرید — یکی برای ترافیک، یکی برای restart.

بزرگ‌ترین کمک: kubectl describe pod و kubectl get events -n namespace. بدون events تقریباً کور کار می‌کنی. بیشتر مشکلات من image pull error، OOMKilled، یا probe failure بود — نه mystery bug.

Networking را دست‌کم گرفتم. فهمیدم Service ClusterIP فقط داخل cluster کار می‌کند. اگر از بیرون تست می‌کنی و Ingress نداری، port-forward موقتی است — نه راه‌حل.

Deployment vs StatefulSet را با درد یاد گرفتم. برای stateless API، Deployment کافی است. برای دیتابیس داخل cluster (که البته ترجیحاً ندهید)، StatefulSet و stable network identity لازم است.

YAML کپی از Stack Overflow خطرناک است. یک بار resource limit نگذاشته بودم و یک Pod کل node را گرفت. حالا همیشه requests و limits می‌گذارم — حتی در dev cluster.

ابزارهایی که هفته اول نجاتم دادند: k9s برای نمای سریع، stern برای log چند Pod همزمان، و kubectx/kubens برای جابه‌جایی بین cluster و namespace.

هنوز یادگیرنده‌ام، ولی حالا می‌دانم K8s ابزار قدرتمندی است که بدون درک networking و storage زود گاز می‌گیرد. اگر تازه شروع کردی: کمتر منابع بساز، بیشتر describe و events بخوان.