Kubernetes یک پلتفرم Open Source و portable است که مدیریت Container هارا بر عهده دارد. همچنین بسیاری از کارهای لازم برای پیادهسازی، مدیریت و مقیاسدهی برنامههای مبتنی بر Container را بهشکل خودکار انجام میدهد. به بیان دیگر، کاربر با Cluster کردن سیستمهای اجراکننده Container و استفاده از Kubernetes میتواند این کلاسترها را به سادگی و با بهرهوری بالا مدیریت کند. در واقع برنامه ریزی Container ها روی Cluster و همچنین حجم کار را مدیریت میکند.
نام Kubernetes یونانی است و به معنی فرمانده و خلبان میباشد. نام دیگر آن K8s است که به عنوان اختصار از شمارش هشت حرف بین “K” و “s” حاصل میشود. گوگل در سال 2014 پروژه Kubernetes را Open Source کرد.
Kubernetes ماشینهای حقیقی و مجازی در دسترساش را بهشکل Cluster در یک شبکه یکسان کنار یکدیگر جمع میکند. کلاستر در واقع بستری است که تمامی اجزا، قابلیتها و بار کاری کوبرنتیز در آن پیکربندی میشود. به هر ماشین در کلاستر یک نقش داده میشود.
اصطلاحات رایج Kubernetes
در اینجا اصطلاحات اساسی برای درک بهتر نحوه عملکرد Kubernetes آمده است:
- Cluster : پایه و اساس موتور Kubernetes است. برنامههای کانتینری شده روی Cluster ها اجرا میشوند. در واقع مجموعهای از سیستمها است که برنامههای شما را مدیریت و اجرا میکند.
- Node : سیستمهایی که Cluster ها را تشکیل میدهند.
- Pod: گروهی از Container ها که با هم در یک سیستم میزبان مستقر شدهاند.
- Replication Controller : برای مدیریت Node ها استفاده میشود.
- Selector : یک سیستم تطبیق برای یافتن و طبقه بندی منابع.
- Ingress : یک رابط برنامه کاربردی (API) که دسترسی خارجی به خدمات را در یک Cluster کنترل میکند.
- Lable : برای فیلتر کردن، سازماندهی و انجام عملیات دسته جمعی بر روی مجموعه ای از منابع استفاده میشود.
- Annotation : یک Lable با ظرفیت داده بسیار بزرگتر.
Kubernetes چگونه کار میکند؟
همانطور که گفته شد، Container ها یک راه خوب برای دستهبندی و اجرای برنامههای شما هستند. شما باید Container را مدیریت کنید و اطمینان حاصل کنید که اختلالی در عملکرد آنها وجود نخواهد داشت. به عنوان مثال، اگر برای یکی از Container ها مشکلی پیش بیاید، باید Container دیگری شروع به کار کند. حال اگر این پروسه توسط یک سیستم مدیریت شود آسان تر خواهد بود.
Kubernetes چارچوبی را در اختیار شما قرار میدهد تا سیستمهای توزیع شده را به صورت انعطاف پذیر اجرا کنید و به راحتی Container هارا مدیریت کنید.
در Kubernetes یک یا چند سرور به عنوان Master انتخاب میشوند و وظایف پردازشی و مدیریتی کلاستر را به عهده میگیرند، وظایفی مانند ارائه API برای کاربران، بررسی سلامت دیگر سرورها، تقسیم بار کاری و ساماندهی ارتباط بین اجزای مختلف. در مجموع، Master به عنوان نقطهی اصلی ارتباط با کلاستر شناخته میشود و منطق مرکزی Kubernetes را به عهده میگیرد.
سایر سیستمها در کلاستر به عنوان Node شناخته میشوند؛ سرورهایی که مسئول پذیرفتن بار کاری هستند و آنها را با منابع محلی و خارجی اجرا میکنند. برای رعایت ایزولهسازی، انعطاف و مدیریت، Kubernetes برنامه و سرویسها را در Container اجرا میکند.هر Node، از Master دستورهای ایجاد و حذف Container را دریافت و دستورات لازم شبکه را برای جابجایی ترافیک مربوط به آن تنظیم میکند.
کاربران از طریق API تعریف شده توسط Master با کلاستر ارتباط میگیرند و برای شروع یک برنامه یا سرویس، یک نقشهی توصیفی در قالب فایل YAML به کلاستر ارسال می کنند. این فایل نشان میدهد برنامه چگونه ایجاد و مدیریت میشود. سپس Master با توجه به نیازمندی کاربر و شرایط فعلی سیستم، تصمیم میگیرد که برنامه را چگونه روی زیرساخت موجود اجرا کند.

Pod چیست؟
اگرچه Container سازوکار پایه برای پیادهسازی برنامهها در کوبرنتیز است، اما برای مقیاسپذیری و مدیریت بهتر از یک لایهی دیگر نیز بر روی آن استفاده میشود. به این ترتیب کاربران به جای تعامل مستقیم با Container، از عناصری که Kubernetes ارایه میدهد، استفاده میکنند. یکی از مهمترین انواع این عناصر، Pod است.
Pod ها از یک یا چند Container تشکیل شدهاند و Container ها میتوانند منابع را به اشتراک بگذارند. Kubernetes دستگاهی را پیدا میکند که دارای ظرفیت پردازش کافی برای یک Pod معین است و Container مربوطه را راهاندازی میکند. برای جلوگیری از اختلال، به هر Pod یک آدرس IP منحصر به فرد اختصاص داده شده است.
در واقع Container بهشکل مستقیم به ماشین متصل نمیشود، بلکه یک یا چند Container که در کنار هم قرار دارند در داخل یک Pod کپسوله میشوند. Podها بهعنوان یک واحد مستقل مدیریت میشوند و محیط را با یکدیگر به اشتراک میگذارند. معمولا Pod شامل یک Container اصلی و تعدادی Container کمکی است. برای مثال، یک Pod ممکن است شامل یک Container باشد که برنامه اصلی را اجرا میکند و یک Container کمکی که فایلها را در یک فایل سیستم اشتراکی ذخیره میکند.
Replication Controller چیست؟
برای افزایش مقیاس یک برنامه از Replication Controller استفاده میشود. با این ابزار میتوان قالبهای Pod را شخصیسازی کرد تا نسخههای یکسانی از Pod داشته باشیم و بتوانیم تعداد نسخههای در حال اجرا را کم و زیاد کنیم. همچنین Replication Controller بهشکل خودکار اطمینان حاصل میکند که تعداد Podهای پیاده شده با آنچه در فایل پیکربندی مشخص شده است، همخوانی داشته باشد.
یکی از مواردی که کاربر بهشکل مستقیم میتواند با Kubernetes برای اجرای برنامه، ایجاد و مدیریت کند Deployment نام دارد که از Pod و Replication Controller استفاده کرده ولی سختی کار با آنها را از کاربر پنهان می کند.

چرا باید از Kubernetes استفاده کرد؟
برای پاسخدهی به نیازهای در حال تغییر کسبوکار، تیم برنامهنویس باید بتواند به سرعت برنامهها و سرویسهای جدید را ایجاد و منتشر کند. اپلیکیشنهای تولیدی بزرگ، چندین Container ایجاد میکنند که باید روی چندین سرور نیز اجرا شوند. Kubernetes قابلیت مدیریت و ساماندهی لازم برای پیادهسازی Container در مقیاس بالا را برای ما فراهم میکند. همچنین با استفاده از Kubernetes میتوان از سرویسهای اضافه مانند Load Balance و Health Check بهراحتی بهره مند شد.
جهت مطالعه دیگر مقالات مرتبط صفحه آموزشگاه را مشاهده نمائید.