راهنمای جامع کوبرنتیس (بخش اول)
مقدمـه‌ای بــر Kubernetes و معمــاری آن
کانتِینر(Container) یک فناوری است که مشکلات انتقال نرم‌افزار را از یک محیط به محیط دیگر حل می‌کند. به‌صورت ساده، یک کانتینر شامل تمام مواردی است که برای زمان اجرا نیازمند آن‌ها هستیم. یک اپلیکیشن و تمام وابستگی‌های آن، کتابخانه‌ها، فایل‌های پیکربندی و ... . به‌عنوان یک پکیج بسته‌بندی می‌شوند. با این کار دیگر در سیستم‌عامل و زیرساخت‌ها برای اپلیکیشن تفاوتی احساس نمی‌شود. کوبرنتیس (Kubernetes) یک سیستم قدرتمند متن‌باز است که گوگل آن را برای مدیریت اپلیکیشن‌های کانتینرشده توسعه داد. این سیستم کمک می‌کند تا روش‌های بهتری برای مدیریت اجزای مجزا و مرتبط و همچنین سرویس‌ها در زیرساخت‌های متنوع فراهم شود. در ابتدا به مفاهیم پایه کوبرنتیس اشاره می‌کنیم و پس از آن معماری سیستم، مشکلات حل شده و مدل‌های مورداستفاده برای توسعه متمرکز و مقیاس‌پذیر موردبحث قرار می‌گیرد. این مقاله شامل دو قسمت است که قسمت دوم در شماره آینده ماهنامه شبکه منتشر خواهد شد.

کوبرنتیس (Kubernetes) چیست؟

در سطح پایه، کوبرنتیس سیستمی برای اجرا و همکاری اپلیکیشن‌های کانتینرشده در محیط‌های خوشه‌بندی‌شده یا کلاستربندی‌شده است؛ پلتفرمی طراحی‌شده برای چرخه زندگی اپلیکیشن‌های کانتینر شده است و سرویس‌های پیش‌بینی، مقیاس‌پذیری و دسترسی بالا را مدیریت کند. 
به‌عنوان یک کاربر کوبرنتیس، می‌توانید چگونگی اجرای اپلیکیشن و همچنین راه‌هایی را که آن‌ها می‌توانند با دیگر اپلیکیشن‌ها تعامل داشته باشند، تعریف کنید و مقیاس سرویس‌دهی خود را کاهش یا افزایش دهید، روند مشخصی برای به‌روزرسانی ایجاد کنید و ترافیک را بین نسخه‌های مختلف اپلیکیشن‌ها تعویض کنید تا ویژگی‌های جدید تست شوند یا تغییرات به گذشته بازگردند. کوبرنتیس یک پلتفرم پایه ایجاد می‌کند که با کمک آن بتوانید اپلیکیشن‌ها را با درجه بالایی از انعطاف‌پذیری، قدرت و اطمینان تعریف و مدیریت کنید.


مطلب پیشنهادی

اگر تازه قصد استفاده از Container را دارید به این توصیه‌ها توجه کنید

معماری کوبرنتیس

برای این‌که بدانید کوبرنتیس چگونه چنین قابلیت‌هایی را فراهم می‌کند، بهتر است درکی از چگونگی طراحی و سازماندهی آن در سطح بالا داشته باشید. کوبرنتیس همانند یک سیستم در لایه‌ها ساخته‌شده که هر لایه بالا، جزییات لایه‌های پایینی را پنهان می‌کند. در پایه، کوبرنتیس ماشین‌های مجازی و فیزیکی مجزا را کنار هم و درون یک کلاستر(خوشه) قرار می‌دهد و برای این کار از یک شبکه اشتراکی برای ارتباط بین هر سرور استفاده می‌کند. این کلاستر یک پلتفرم فیزیکی است که تمام اجزا، قابلیت‌ها و بار کاری آن پیکربندی شده‌اند. 
اکوسیستم کوبرنتیس به هر ماشین درون کلاستر یک نقش می‌دهد. یک سرور (و گاهی گروه کوچکی از آن‌ها) به‌عنوان سرور ارشد انتخاب می‌شود. این سرور به‌عنوان یک دروازه و مغز کلاستر شناخته می‌شود و سلامتی دیگر سرورها را بررسی می‌کند، یک API به کاربران و کلاینت‌ها (مشتری‌‌ها) نشان می‌دهد، وظایف را به بهترین حالت تقسیم می‌کند و ارتباط بین سایر اجزا را هماهنگ می‌کند. سرور ارشد نقطه اتصال هر کلاستر است و مسئول بیشتر ویژگی‌هایی است که کوبرنتیس در یک محیط متمرکز فراهم می‌کند.
ماشین‌های درون کلاستر به‌عنوان سرور گره (Node) شناخته می‌شوند: سرورها مسئول پذیرش و اجرای بار کاری هستند که از منابع محلی و خارجی استفاده می‌کنند. با کمک مدیریت، انعطاف‌پذیری و انزوا، کوبرنتیس اپلیکیشن‌ها و سرویس‌ها را در کانتینر اجرا می‌کند. پس لازم است هر گره با یک مجری کانتینر (Runtime) مجهز شود، مانند داکر یا rkt. هر گره دستورات کاری خود را از سرور ارشد دریافت می‌کند و بر اساس آن کانتینرها را می‌سازد، از بین می‌برد و قوانین شبکه‌ای را تنظیم می‌کند تا ترافیک به بهترین نحو مسیریابی شود.
همان‌طور که در بالا گفته شد، اپلیکیشن‌ها و سرویس‌ها در کلاستر با یک کانتینر اجرا می‌شوند واجزای پایینی مطمئن می‌شوند که وضعیت اپلیکیشن مطابق با وضعیت کلاستر است. کاربران توسط سرور API اصلی با کلاستر ارتباط برقرار می‌کنند و این کار به‌صورت مستقیم یا با کمک کلاینت‌ها‌ و کتابخانه‌ها‌ انجام می‌شود. برای شروع کار یک اپلیکیشن یا سرویس، یک طرح در JSON یا YALM تعریف می‌شود و مشخص می‌شود که چه چیزی باید ایجاد و چگونه مدیریت شود. سپس سرور ارشد با توجه به زیرساخت و وضعیت سیستم، نحوه اجرا را مشخص می‌کند. این گروه از اپلیکیشن‌هایی که توسط کاربر تعریف شده‌اند، بر اساس برنامه‌های خاصی اجرا می‌شوند که در لایه آخر کوبرنتیس ارائه‌شده است. 

اجزای سرور ارشد

یک سرور ارشد حکم هسته کنترلی در کلاستر‌ها را دارد و نقطه ارتباطی میان کاربران و مدیران است. اجزای سرور ارشد با یکدیگر کار می‌کنند تا درخواست کاربر را پذیرش کنند، بهترین زمان‌بندی را برای بار کاری کانتینرها تعیین کرده، وضعیت شبکه‌سازی کلاستر را تنظیم و مسئولیت مدیریت، مقیاس‌بندی و سلامتی را بر عهده داشته باشند. این اجزا می‌توانند در یک ماشین مجزا نصب شوند یا در چند سرور به‌صورت توزیع‌شده قرار گیرند. در ادامه نگاهی به هر یک از اجزایی که با سرور ارشد پیوند خورده‌اند، خواهیم داشت.

Etcd

یکی از اجزای اصلی که کوبرنتیس برای عملکردها به آن نیاز دارد، یک مخزن پیکربندی عمومی است. Etcd که توسط یک تیم در CoreOS توسعه‌یافته، یک مخزن از Key-valueها است که می‌تواند در محدوده گره‌ها پیکربندی شود. کوبرنتیس از Etcd استفاده می‌کند تا پیکربندی‌های داده را که هر نود در کلاستر می‌تواند به آن دسترسی پیدا کند، ذخیره کند. این کار می‌تواند برای اکتشاف سرویس‌ها استفاده شود یا می‌تواند به پیکربندی اجزا یا پیکربندی مجدد آن‌ها بر اساس اطلاعات به‌روز شده کمک کند. همچنین برای حفظ وضعیت کلاستر با ویژگی‌هایی مانند انتخاب رهبر کاربرد دارد. 
همانند بیشتر اجزای دیگر در صفحه کنترلی، Etcd می‌تواند روی یک سرور ارشد پیکربندی شود یا بین تعدادی از ماشین‌ها توزیع شود. تنها چیزی که نیاز است دسترسی به شبکه برای ماشین‌های کوبرنتیس است.

مطلب پیشنهادی

کانتینرها چه هستند و چرا به آن‌ها نیاز داریم؟

Kube-Apiserver

یکی از سرویس‌های مهم، سرور API است و یکی از نکات مدیریتی اصلی در تمام کلاستر بوده که به کاربر اجازه می‌دهد بار کاری کوبرنتیس و واحدهای سازماندهی را پیکربندی کند. همچنین باید مطمئن شود که Etcd و جزییات سرویس کانتینر گسترش‌یافته با هم سازگاری دارند. Kube-Apiserver همانند پلی بین اجزای مختلف عمل می‌کند و سلامتی کلاستر را حفظ و اطلاعات و دستورات را منتشر می‌کند. 
سرور API یک رابط RESTful را پیاده‌سازی می‌کند، به‌گونه‌ای که ابزارهای مختلف و کتابخانه‌ها به سهولت با آن ارتباط برقرار می‌کنند. یک کلاینت که Kubectl نامیده می‌شود، به‌عنوان یک روش پیش‌فرض برای تعاملات با کلاستر کوبرنیتس از یک کامپیوتر محلی قابل‌دسترسی است.

Kube-Controller-Manager

این سرویس، مدیر کنترلر یک سرویس مهم است که وظایف زیادی بر عهده دارد. این سرویس بار کار چرخه زندگی و کنترلرهایی را که از وضعیت تنظیم‌شده برای کلاستر خارج شده‌اند، مدیریت می‌کند و وظایف روزانه را انجام می‌دهد. جزییات این عملیات‌ها در Etcd نوشته‌شده، جایی‌که مدیر کنترلر تغییرات را از طریق سرور API مشاهده می‌کند. زمانی‌که تغییر مشاهده شد، کنترلر اطلاعات جدید را می‌خواند و رویه‌های مناسب را پیاده می‌کند. این مورد می‌تواند شامل گسترش یا کوچک کردن مقیاس اپلیکیشن، تنظیم نقطه پایانی یا موارد دیگر باشد.

kube-scheduler

این سرویس پردازشی است که بار کاری را در زمان مشخص به یک نود مشخص واگذار می‌کند. این سرویس نیازهای عملیاتی بارکاری را می‌خواند، محیط زیرساخت فعلی را تحلیل می‌کند و کار را به نود یا نودهای مناسب می‌سپارد. 
زمان‌بند (Scheduler)، مسئول دنبال کردن ظرفیت‌های موجود در هر میزبان است تا مطمئن شود بار کاری در زمان خود، از منابع زیادی استفاده نمی‌کند. زمان‌بند باید مجموع ظرفیت‌ها و همچنین منابع تخصیص داده‌شده به هر سرور را بداند. 

Cloud-Controller-Manager

کوبرنتیس می‌تواند در محیط‌های متفاوتی توسعه پیدا کند و با زیرساخت‌های متنوعی تعامل کند تا وضعیت منابع را در یک کلاستر بفهمد و مدیریت کند. درحالی‌که کوبرنتیس با نماینده‌های عمومی منابع مانند متعادل‌کننده بار کار می‌کند، به راهی نیاز دارد تا این‌ها را به منابع واقعی (که توسط فراهم‌کننده‌های ابری پدیدار شده است) نگاشت کند.
مدیریت‌کننده کنترلر ابری همانند چسبی عمل می‌کند که باعث تعامل کوبرنتیس با فراهم‌کنندگان ظرفیت‌، ویژگی‌ها و APIهای مختلف می‌شود. این کار به کوبرنتیس اجازه می‌دهد تا (با توجه به اطلاعاتی که از فراهم‌کننده ابر کسب‌شده است) اطلاعات وضعیت خود را به‌روز کند، منابع ابری را آن‌طور که سیستم به آن نیاز دارد، تنظیم کند و سرویس‌های افزوده ابری را بسازد و استفاده کند.

مطلب پیشنهادی

کوبرنتس در مقابل داکر، کدام‌یک بهتر هستند
پلتفرمی برای مدیریت کانتینرها

اجزای سرور گره

در کوبرنتیس سرورهایی که کانتینرها را اجرا می‌کنند، گره نامیده می‌شوند. سرورهای گره برای ارتباط با اجزای ارشد، پیکربندی شبکه کانتینر و اجرای بار کاریشان به منابع کمی نیاز دارند.

یک مجری کانتینر (Container Runtime)

این اولین قسمتی است که هر گره باید آن را داشته باشد. به‌طورمعمول، این نیاز با نصب داکر برطرف می‌شود، اما جایگزین‌هایی مانند rkt و run نیز وجود دارند. مجری کانتینر مسئول شروع و مدیریت کانتینر است. هر واحد کاری در کلاستر در سطح پایه قرار دارد و به‌عنوان یک یا چند کانتینر پیاده‌سازی شده که باید توسعه پیدا کند. مجری کانتینر در هر گره بخشی است که در نهایت کانتینرها را با توجه به تعریف‌های قبلی، اجرا می‌کند.

kubelet

نقطه ارتباطی هر گره با گروه کلاستر از طریق یک سرویس کوچک به نام Kubelet انجام می‌شود. این سرویس وظیفه انتقال اطلاعات به سرویس صفحه کنترلی را برعهده دارد و همچنین با مخزن etcd در تعامل است تا پیکربندی‌ها را بخواند و valueهای جدید بنویسد. Kubelet با اجزای ارشد ارتباط برقرار می‌کند تا در کلاستر به رسمیت شناخته شود و دستورات را دریافت کند. همچنین مجری کانتینر را کنترل می‌کند تا کانتینر اجرا یا در صورت نیاز از بین برود.

kube-proxy

 برای مدیریت این‌که سرویس‌ها باید برای اجزای دیگر موجود باشند، یک سرویس پروکسی به نام Kube Proxy در هر سرور گره اجرا می‌شود. این پردازش، درخواست‌ها را به کانتینر درست ارسال می‌کند، می‌تواند تعادل بار برقرار کند و مطمئن شود که محیط شبکه‌ای قابل پیش‌بینی و ‌دسترسی است.

سخن پایانی

کوبرنتیس، یک پروژه هیجان‌انگیز است که به کاربران اجازه می‌دهد، بار کاری کانتینرها را به‌صورت سطح بالا کنترل کنند. معماری کوبرنتیس از اجزای مختلفی تشکیل‌شده است. در قسمت اول مقاله، اجزای سرور ارشد و اجزای سرور گره را معرفی کردیم. اشیا و بار کاری کوبرنتیس، مجموعه حالات (وضعیت‌ها) و سایر اجزای کوبرنتیس در شماره‌های بعدی مورد بررسی قرار خواهند گرفت.

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟