بررسی پادها و نودها
اهداف
- یادخواهید گرفت پادها (Pods) جیستند.
- یاد خواهید گرفت نودهای (Nodes) کوبرتنیز چیستند.
- یادخواهید گرفت چگونه برنامه های خود را در کوبرتنیز عیب یابی کنید.
پادهای کوبرنتیز
هنگامی که در فصل دوم یک دیپلویمنت ساختید کوبرنتیز یک پاد که متشکل از نسخه ای از برنامه شما است را در سرورتان اجرا کرد. هر پاد در کوبرتنیز یک انتزاع است که متشکل از یک یا چند برنامه کانتینری می باشد و این کانتینر ها به صورت مشترک به این موارد دسترسی خواهند داشت:
- منبع ذخیره سازی مشترک یا Volume
- پیکر بندی شبکه و یک ای پی (IP)
- اطلاعاتی در مورد نحوه اجرای هر کانتینر همانند ایمیج، ویرایش و درگاه های شبکه ای مورد نیاز.
هر پاد برگرفته از مدلی منطقی از یک برنامه برروی سروری است که می تواند برنامه های مختلفی را که به هم مربوط هستند در بر بگیرد.
برای مثال: یک پاد شاید دو کانتینر داشته باشد که یکی از آنها برنامه میزبانی Node.js شما را در بر بگیرد و کانتینر دیگری که اطلاعات مورد نیاز Node.js را فراهم می سازد.
ساخت هر پاد در پلتفرم کوبرنتیز یک دسته عملیات را شامل می شود که پلتفرم تمام آن ها را به صورت متحد اعمال می کند(Atomic). وقتی که شما یک دیپلویمنت می سازید، پادها به همراه کانتینرهایشان ساخته می شوند. وظیفه اجرای این پادها به نودهای کلاستر واگذارشده و تا زمانی که این پادها قطع (terminate) یا حذف شوند اعمال می گردد. در صورتی که نود کلاستر دچار مشکل شود یک پاد برار بر روی نود های دیگر کلاستر برپا شده و اجرا می گردد.
مرور کلی پاد
نودها
پادها همیشه بر روی نودها اجرا می شوند. در کوبرتنیز نودها کارگرانی هستند که می توانند یک سرور فیزیکی یا ماشین مجازی باشند. نودها توسط کنترل پلین ها (Control Plane) مدیریت می شود. هر نود می تواند تعداد متعددی پاد را در بر بگیرد و کنترل پلین کوبرنتیز این پادهارا برروی نودهای مختلف کلاستر مستقر و مدیریت کند. کنترل پلین برای تقسیم خودکار وظایف بین نودها مواردی اعم از مقدار منابع آزاد سیستم ها را بررسی می کند.
هر نود در کوبرنتیز حداقل باید این شرایط را داشته باشد:
-
نرم افزار کوبلت (Kubelet) که یک برنامه برای ارتباط نودها و کنترل پلین است باید بر روی آن نصب و راه اندازی شده باشد. کوبلت وظیفه راه اندازی و مدیریت پادها برروی ماشین را دارد.
-
یک برنامه اجرای کانتینری (مانند داکر) که وظیفه گرفتن ایمیج های کانتینر ها و اجرای آن ها را بر عهده می گیرد.
نگاه کلی بر نودها
عیب یابی با استفاده از کوب کتل (kubectl)
در فصل ۲ این آموزش شما از رابط دستوری کوب کتل استفاده کردید. در فصل ۳ شما از این رابط دستوری استفاده می کنید تا اطلاعات بیشتری در مورد نرم افزار مستقر شده و عملیات های روزمره ای که می توان بر روی محیط انجام داد آشنا شوید.
تعدادی از عملیات های روزمره ای که می توان انجام داد به شرح زیر می باشد:
- لیست کردن منابع توسط -
kubectl get
- نمایش جزییات یک منبع توسط -
kubectl describe
- بررسی لاگ های یک کانتینر در یک پاد توسط -
kubectl logs
- اجرای یک دستور داخل کانتینری از یک پاد توسط -
kubectl exec
با استفاده از این دستورات شما می توانید اطلاعاتی همانند چه زمانی برنامه ها مستقر شده اند، در چه وضعیتی هستنند، کجا در حال اجرا هستند و یا چه تنظیماتی را شامل می شوند.
حالا که با جزییات عملیاتی کلاستر و دستورات آن آشنا شدیم بییاید تا دانش خودمان را امتحان کنیم.
بررسی تنظیمات برنامه مستقر شده
بیایید برنامه مستقر شده را بررسی کنیم و اطمینان حاصل کنیم که برنامه در حال اجرا است. برای این کار ما می توانیم از دستور زیر استفاده کرده تا وضعیت پادهای جاری را بررسی کنیم.
kubectl get pods
توجه:
اگر پادی در حال اجرا نبود بعد از چند لحظه مکس دستور بالا را دوباره اجرا کنید.برای بررسی اطلاعات بیشتری در مورد پاد همانند ایمیج در حال استفاده می توانید از دستور زیر استفاده کنید:
kubectl describe pods
در پاسخ دستور قبل اطاعات جامع تری همانند آدرس ای پی (IP) و درگاه های در حال استفاده و لیستی از رویدادهای پاد از لحظه شروعش را خواهید دیدی.
توجه داشته باشید که پاسخ دریافتی دستور describe
بسیار زیاد است و مواردی از آن را ما هنوز مرور نکرده ایم، اما نگران نباشید شما با تمام این مفاهیم تا پایان این دوره آموزش آشنا خواهید شد.
توجه:
توجه داشته باشید که دستورdescribe
تنها برای پاد ها نبوده و شما می توانید از آن برای گرفتن اطلاعات جامعی در خصوص دیگر منابع کوبرتنیز همانند نودها و دیپلویمنت ها هم استفاده نمایید. توصیه ما این است که از جواب این دستور برای نوشتن اسکریپت استفاده نکنید.بررسی برنامه ها در ترمینال
اگر به خاطر داشته باشید پادها در یک محیط ایزوله و با یک شبکه خصوصی ساخته می شوند پس در حال حاضر برای دسترسی و عیب یابی آن ها از دستور kubectl proxy
استفاده خواهیم کرد.
دستور زیر را در ترمینال دیگری اجرا کنید:
kubectl proxy
دوباره نام پاد را استخراج کرده تا در مرحله بعد استفاده کنیم.
export POD_NAME="$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')"
echo Name of the Pod: $POD_NAME
با استفاده از نام پاد و دستور curl
یک درخواست را به رابط کاربری کوبرنتیز بفرستید:
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/
توجه:
در این مثال نیازی به نام کانتینر نداریم چون پاد ما تنها یک کانتینر دارد.اجرای دستورات برروی کانتینر
با استفاده از دستور exec
می توانید به صورت مستقیم داخل یک کانتینر که پاد آن در حال اجرا است دستوراتی را اجرا کنید.
با استفاده از دستور زیر لیست متغییر های محیطی را بررسی کنید:
kubectl exec "$POD_NAME" -- env
توجه داشته باشید که در این مثال ما از نام کانتینر استفاده نمی کنیم چون تنها یک کانتینر داریم.
با استفاده از دستور زیر به رابط کاربری داخل کانتینر در پاد مورد نظر می توانید وصل شوید.
kubectl exec -ti $POD_NAME -- bash
حالا که به کانتینر وصل هستید می توانید با نرم افزار NodeJS نصب شده در آن کار کنید. به طور مثال با استفاده از دستور زیر سورس کد برنامه اجرایی در این پاد را خواهید دید:
cat server.js
می توانید با استفاده از دستور curl
از بالا بودن برنامه اطمینان برقرار کنید.
curl http://localhost:8080
توجه:
توجه داشته باشید که در اینجا ما از آدرسlocalhost
استفاده کردیم چون داخل کانتینر هستیم، اگر شما نتوانستید دستور بالا را به اجرا کنید دستور exec
را دوباره اجرا کنید.برای خروج از کانتینر می توانید از دستور exit
استفاده کنید
گام بعدی
- آموزش استفاده از سرویس ها برای انتشار برنامه هایتان.
- اطلاعات تکمیلی در مورد پادها.
- اطلاعات تکمیلی در مورد نودها.