لیست مطالب
کوبرنتیس (Kubernetes) به استاندارد طلایی برای ارکستراسیون کانتینر ها تبدیل شده است، اما این قدرت و انعطاف پذیری با پیچیدگی همراه است. برای هر توسعه دهنده یا مهندس DevOps، مواجهه با خطا های konfigurasi (کانفیگ) یک امر روزمره است. در این میان، دو مورد از رایج ترین و حیاتی ترین منابع خطا، Pod ها و Service ها هستند. یک Pod که در وضعیت Pending گیر کرده یا یک Service که ترافیک را به درستی هدایت نمی کند، می تواند کل یک اپلیکیشن را از کار بیندازد. خوشبختانه، کوبرنتیس ابزار های قدرتمندی برای عیب یابی در اختیار ما می گذارد. کلید حل مشکل، داشتن یک رویکرد سیستماتیک است.
این راهنما یک چک لیست عملی برای شناسایی و رفع رایج ترین خطا های Pod و Service ارائه می دهد.
جعبه ابزار اصلی شما: دستورات kubectl
پیش از هر چیز، باید با چهار دستور اساسی kubectl که بهترین دوستان شما در این مسیر هستند، آشنا شوید:
- kubectl get pods: وضعیت کلی همه Pod ها را به سرعت نمایش می دهد.
- kubectl describe pod <pod-name>: اطلاعات بسیار دقیقی شامل رویداد ها (Events)، وضعیت کانتینر ها و دلیل خطا ها را ارائه می دهد. این دستور معمولاً اولین قدم برای عیب یابی عمیق است.
- kubectl logs <pod-name>: لاگ های استاندارد اپلیکیشن در حال اجرا در کانتینر را نمایش می دهد.
- kubectl exec -it <pod-name> -- /bin/sh: به شما اجازه می دهد تا یک شل (shell) در داخل کانتینر در حال اجرا داشته باشید و محیط را از نزدیک بررسی کنید.
بخش اول: عیب یابی خطا های رایج Pod
۱. وضعیت: Pending (در حال انتظار) یک Pod در این وضعیت گیر کرده و اجرا نمی شود.
- دلیل احتمالی: شایع ترین دلایل، کمبود منابع (CPU یا حافظه) در کلاستر یا عدم توانایی زمان بند (Scheduler) برای پیدا کردن یک Node مناسب است.
- راه حل: دستور kubectl describe pod <pod-name> را اجرا کنید. در بخش Events به دنبال پیام هایی مانند FailedScheduling بگردید. این پیام دقیقاً به شما می گوید که چرا Pod زمان بندی نشده است (مثلاً 0/3 nodes are available: 3 Insufficient cpu). یا درخواست منابع (requests) را در مانیفست Pod خود کاهش دهید یا منابع Node های کلاستر را افزایش دهید.
۲. وضعیت: ImagePullBackOff یا ErrImagePull کوبرنتیس نمی تواند ایمیج کانتینر شما را از رجیستری (مانند Docker Hub) دانلود کند.
- دلیل احتمالی: اشتباه تایپی در نام یا تگ ایمیج، نیاز به احراز هویت برای دسترسی به یک رجیستری خصوصی.
- راه حل: ابتدا نام و تگ ایمیج را در فایل YAML خود به دقت بررسی کنید. اگر از رجیستری خصوصی استفاده می کنید، اطمینان حاصل کنید که imagePullSecrets به درستی در مانیفست شما تعریف شده و Secret مورد نظر حاوی اطلاعات صحیح لاگین است.
۳. وضعیت: CrashLoopBackOff این یکی از رایج ترین خطا هاست. به این معنی که کانتینر شما اجرا می شود، اما بلافاصله پس از اجرا به دلیل یک خطا، کرش کرده و متوقف می شود. کوبرنتیس به طور مداوم تلاش می کند آن را دوباره اجرا کند و این چرخه تکرار می شود.
- دلیل احتمالی: این مشکل تقریباً همیشه یک خطای درون اپلیکیشن شماست، نه یک مشکل کوبرنتیس. ممکن است اپلیکیشن شما نتواند به دیتابیس متصل شود، یک فایل کانفیگ ضروری را پیدا نکند، یا با یک خطای برنامه نویسی مواجه شده باشد.
- راه حل: فوراً دستور kubectl logs <pod-name> را اجرا کنید. لاگ های اپلیکیشن به شما سرنخ اصلی را خواهند داد. اگر لاگ ها کافی نبودند، از دستور kubectl logs <pod-name> --previous برای دیدن لاگ های آخرین اجرای ناموفق استفاده کنید. همچنین، تنظیمات Liveness Probe و Readiness Probe را در مانیفست خود بررسی کنید؛ ممکن است این Probe ها به اشتباه و خیلی زود وضعیت Pod را ناسالم تشخیص می دهند.
بخش دوم: عیب یابی خطا های رایج Service

Service ها مسئولیت ایجاد یک نقطه دسترسی پایدار برای مجموعه ای از Pod ها را بر عهده دارند. خطا در آن ها معمولاً به معنای عدم اتصال است.
۱. مشکل: Service به Pod ها متصل نمی شود (Endpoints وجود ندارد) شما یک Service ساخته اید، اما هیچ ترافیکی به Pod های هدف نمی رسد.
- دلیل احتمالی: عدم تطابق میان selector در Service و labels در Pod ها. این شایع ترین اشتباه در کانفیگ Service است.
- راه حل: kubectl describe svc <service-name> را اجرا کرده و به فیلد Selector دقت کنید. سپس kubectl describe pod <pod-name> را اجرا کرده و فیلد Labels را ببینید. این دو باید دقیقاً با هم مطابقت داشته باشند. برای تأیید، می توانید kubectl get endpoints <service-name> را اجرا کنید. اگر ستون ENDPOINTS خالی بود، یعنی هیچ Pod ای با این Selector پیدا نشده است.
۲. مشکل: اتصال برقرار می شود اما رد (Refused) می شود ترافیک به Pod می رسد، اما اتصال برقرار نمی شود.
- دلیل احتمالی: عدم تطابق پورت ها.
- راه حل: اطمینان حاصل کنید که فیلد targetPort در مانیفست Service شما، دقیقاً همان پورتی است که اپلیکیشن شما در داخل کانتینر روی آن در حال گوش دادن است (معمولاً در containerPort تعریف می شود). یک اشتباه رایج، قرار دادن پورت خود Service (فیلد port) به جای targetPort است.
نتیجه گیری
عیب یابی در کوبرنتیس یک مهارت اکتسابی است که با تمرین بهبود می یابد. با پیروی از یک رویکرد منظم (ابتدا get، سپس describe برای دیدن رویداد ها، و در نهایت logs برای بررسی اپلیکیشن)، می توانید به سرعت ریشه اکثر مشکلات را که معمولاً اشتباهات تایپی ساده یا عدم تطابق در کانفیگ ها هستند، پیدا کنید.
شرکت صفر و یک
عیب یابی کوبرنتیس می تواند پیچیده و زمان بر باشد. اجازه ندهید مشکلات کانفیگ، سرعت توسعه شما را کاهش دهد. تیم متخصص دواپس در شرکت صفر و یک با تسلط کامل بر کوبرنتیس، از طراحی و پیاده سازی اولیه تا بهینه سازی و مدیریت پایدار کلاستر های شما، در کنارتان است. برای سپردن مدیریت زیرساخت خود به متخصصان و تمرکز بر روی کسب و کارتان، همین امروز با ما تماس بگیرید.