با پذیرش گسترده کانتینرها در بین سازمانها، کوبرنتیز (Kubernetes)، نرمافزار مدیریت کانتینرمحور، به یک استاندارد واقعی برای استقرار و اجرای اپلیکیشنهای کانتینری تبدیل شده است. این نرمافزار منبعباز (Open source) توسط گوگل توسعه پیدا کرد و اکنون توسط بسیاری از توسعهدهندگان مورد استفاده قرار میگیرد. در این مقاله قصد داریم بهطور کامل به مفهوم کوبرنتیز بپردازیم و کاربردها، مزایا و اجزای آن را توضیح دهیم. بنابراین هرآنچه را که برای آشنایی با کوبرنتیز باید بدانید، در مطلب پیش رو خواهید خواند.
کوبرنتیز چیست؟ تعریف کوبرنتیز به زبان ساده
کوبرنتیز (Kubernetes) که با نامهای kube و k8s نیز شناخته میشود، یک پلتفرم هماهنگسازی کانتینر است که فرایند زمانبندی، خودکارسازی استقرار، مدیریت و مقیاسگذاری اپلیکیشنهای کانتینری را تسهیل میکند. کوبرنتیز چیست؟ این پلتفرم قدرتمند برای اولین بار توسط مهندسان گوگل در سال 2014 توسعه پیدا کرد و از آن زمان به یکی از مهمترین ابزارهای مدیریت کانتینر تبدیل شده است. کوبرنتیز در واقع از Borg، یک پلتفرم هماهنگسازی کانتینر که فقط داخل گوگل استفاده میشد، الهام گرفته شده است. نام Kubernetes از یک کلمه یونانی بهمعنای سکاندار یا خلبان گرفته شده است؛ به همین خاطر لوگوی این پلتفرم با الهام از یک سکان طراحی شده است. این پلتفرم با قابلیتهای پیشرفته خود، مدیریت و اتوماسیون کانتینرها را به شکلی کارآمد و مؤثر امکانپذیر میسازد.
در حال حاضر، کوبرنتیز و اکوسیستم وسیعتر کانتینر، در حال تبدیل شدن به یک پلتفرم محاسباتی همهمنظوره و قدرتمند است که با ماشینهای مجازی (VMs) بهعنوان بلاکهای اساسی زیرساخت ابری مدرن رقابت میکند. کوبرنتیز چیست و چه مزایایی دارد؟ این اکوسیستم پیشرفته سازمانها را قادر میسازد تا یک PaaS (پلتفرم بهعنوان یک سرویس) با بهرهوری بالا ارائه دهند که به طور هوشمندانه به وظایف عملیاتمحور و زیرساختمحور میپردازد. همچنین، کوبرنتیز با حل مسائل پیچیده پیرامون توسعه ابر بومی (cloud-native)، به تیمهای توسعه این امکان را میدهد تا با خیال راحت فقط روی کدنویسی و نوآوری تمرکز کنند و از مزایای یک پلتفرم مدیریت کانتینری قدرتمند بهرهمند شوند.
برای آشنایی بیشتر با مباحث زیرساخت ابری توصیه میکنیم قبل از خواندن ادامه مطلب حتما مقاله زیر را با دقت بخوانید.پردازش ابری
کانتینر (Container) چیست و چه کاربردهایی دارد؟
کانتینرها اجزای قابل اجرا و سبک اپلیکیشن هستند که کد منبع (source code) اپلیکیشن را با همه کتابخانههای سیستمعامل و وابستگیهای مورد نیاز برای اجرای کد در هر محیطی ترکیب میکنند. کانتینرها از نوعی مجازیساز سیستمعامل بهره میبرند که به چندین اپلیکیشن اجازه میدهند تا نمونه واحدی از یک سیستمعامل را با جداسازی فرایندها و کنترل میزان CPU، مموری و حافظهای که این فرایندها میتوانند به آن دسترسی داشته باشند، به اشتراک بگذارند. کوبرنتیز به عنوان یک پلتفرم مدیریت کانتینری، این امکان را فراهم میکند تا کانتینرها به صورت بهینه مدیریت و اجرا شوند. از آنجایی که کوبرنتیز چیست و چه کاربردی دارد سوال بسیاری از توسعهدهندگان است، باید گفت که این پلتفرم با ارائه ابزارهای قدرتمند برای مدیریت و اتوماسیون کانتینرها، به بهبود کارایی و مقیاسپذیری اپلیکیشنها کمک میکند. کانتینرها نسبت به ماشینهای مجازی کوچکتر، قابل حملترند و کارآمدی منابعشان بیشتر است. بهعلاوه، کانتینرها به واحدهای محاسباتی اپلیکیشنهای مدرن ابر بومی تبدیل شدهاند.

تفاوت کانتینرها، ماشینهای مجازی و زیرساخت سنتی با یکدیگر
شناخت کانتینرها بهعنوان آخرین حلقه زنجیر اتوماسیون زیرساختهای IT آسانتر و مفیدتر است. در زیرساخت سنتی، اپلیکیشنها روی سرور فیزیکی اجرا میشوند و همه منابعی که میتوانند دریافت کنند را در اختیار خود میگیرند. کوبرنتیز چیست و چه کاربردی دارد؟ این پلتفرم به شما امکان میدهد که چندین برنامه را روی یک سرور واحد اجرا کنید و از مزایای کوبرنتیز برای مدیریت بهینه منابع بهرهمند شوید. این رویکرد باعث صرفهجویی قابل توجه در هزینهها و افزایش کارایی میشود.
ماشینهای مجازی (VM) بهعنوان یکی از مهمترین اجزای زیرساختهای مدرن IT، سرورهایی هستند که از مفهوم سختافزار واقعی کامپیوتر گرفته میشوند. این فناوری امکان اجرای چندین ماشین مجازی را روی یک سرور فیزیکی یا یک ماشین مجازی که بیش از یک سرور فیزیکی را پوشش میدهد، فراهم میکند. هر ماشین مجازی نمونه سیستمعامل خودش را اجرا میکند و شما میتوانید هر اپلیکیشن را داخل VM جدا کنید. این جداسازی باعث میشود تاثیرگذاری اجرای اپلیکیشنهای مختلف روی یکدیگر به حداقل برسد. کوبرنتیز بهعنوان یک پلتفرم مدیریت کانتینر، میتواند با ماشینهای مجازی ترکیب شود تا استفاده بهینه از منابع را تضمین کند. ماشینهای مجازی نسبت به زیرساخت سنتی بسیار آسانتر و مقرونبهصرفهتر هستند و امکان خاموش کردن آنها بعد از اتمام کار وجود دارد. کوبرنتیز چیست؟ این پلتفرم با مدیریت هوشمند ماشینهای مجازی، امکان استفاده حداکثری از منابع را فراهم میکند.
کانتینرها علاوهبر اشتراکگذاری سختافزار مجازیشده زیربنایی، یک هسته سیستمعامل مجازیسازیشده زیرین را نیز به اشتراک میگذارند. کوبرنتیز چیست؟ این پلتفرم با مدیریت کانتینرها، همان جداسازی، مقیاسپذیری و مصرفی بودن ماشینهای مجازی را ارائه میدهد؛ اما با این تفاوت که کانتینرها نمونه سیستمعامل خود را حمل نمیکنند و به همین دلیل نسبت به ماشینهای مجازی سبکتر هستند و فضای کمتری اشغال میکنند.
کوبرنتیز بهعنوان یک اورکستراتور کانتینر، باعث میشود کانتینرها از نظر منابع کارآمدتر باشند؛ یعنی امکان اجرای برنامههای بیشتری روی ماشینهای کمتری (مجازی و فیزیکی) با نمونههای سیستمعامل کمتر به شما میدهند. کانتینرها با کمک کوبرنتیز قابلیت حمل راحتتری در دسکتاپ، دیتاسنتر و محیطهای ابری دارند؛ ازهمین رو برای روشهای توسعه DevOps و Agile بسیار مناسب هستند.
داکر چیست؟ بررسی ارتباط داکر و کوبرنتیز
داکر بهعنوان پیشگام در دنیای کانتینرسازی، یک پلتفرم منبعباز قدرتمند است که برای ساخت، توزیع و اجرای برنامههای کانتینری طراحی شده است. این ابزار محبوب که ابتدا بهعنوان یک پروژه منبعباز آغاز به کار کرد، امروزه به یک شرکت تجاری موفق تبدیل شده که استانداردهای صنعت کانتینرسازی را تعیین میکند.
داکر با بهرهگیری از تکنولوژی کانتینر لینوکس (LXC)، امکان مجازیسازی فرایندهای هسته لینوکس را فراهم میکند و با اضافه کردن لایههای امنیتی و مدیریتی پیشرفته، تجربه کاربری بینظیری را برای توسعهدهندگان و مدیران سیستم ارائه میدهد. این پلتفرم با کوبرنتیز چیست که ارتباط تنگاتنگی دارد و اغلب بهعنوان مکمل یکدیگر در محیطهای توسعه و استقرار نرمافزار استفاده میشوند.
علیرغم ظهور پلتفرمهای جایگزین مانند Open Container Initiative و CoreOS، داکر همچنان محبوبترین انتخاب در میان توسعهدهندگان است. کوبرنتیز بهعنوان یک اورکستراتور قدرتمند، معمولاً در کنار داکر برای مدیریت و مقیاسپذیری کانتینرها استفاده میشود. برای آشنایی بیشتر با جزئیات داکر، مطالعه مقالهی ابر دراک دربارهی داکر را پیشنهاد میکنیم.مقاله جامع ما درباره داکر
تفاوت داکر و کوبرنتیز چیست؟
تا این قسمت از مقاله متوجه شدیم که کوبرنتیز جایگزین یا رقیبی برای داکر نیست؛ بااینحال میتوان آن را جایگزینی برای Docker Swarm دانست. Docker Swarm یک پلتفرم هماهنگسازی کانتینر منبعباز است که بهعنوان یک راهحل بومی داکر برای مدیریت و سازماندهی خوشههای موتورهای داکر عمل میکند. این پلتفرم امکان مدیریت یکپارچه و توزیعشده کانتینرها را در محیطهای تولید فراهم میکند.
بررسی مزایای کوبرنتیز
درحالیکه سایر گزینههای هماهنگسازی کانتینرها مخصوصا Docker Swarm و Apache Mesos در ابتدا توجه زیادی را به خود جلب کرده بودند، کوبرنتیز با قابلیتهای پیشرفته خود بهسرعت به محبوبترین پروژه تبدیل شد. به عبارت دیگر، کوبرنتیز در یک مقطع زمانی، بهعنوان سریعترین پروژه در حال رشد در تاریخ نرمافزارهای منبع باز شناخته شد و توانست با ارائه ویژگیهای منحصربهفرد در زمینه مدیریت و اتوماسیون کانتینرها، استاندارد جدیدی در صنعت ایجاد کند.
توسعهدهندگان به دلایل متعددی کوبرنتیز را به عنوان پلتفرم اصلی خود انتخاب کردهاند. گستردگی عملکرد و قابلیتهای متنوع این پلتفرم، اکوسیستم وسیع و پویای ابزارهای پشتیبانی منبع باز، و همچنین پشتیبانی قدرتمند در میان ارائهدهندگان سرویس ابری از جمله این دلایل هستند. امروزه تمامی ارائهدهندگان مطرح ابر عمومی در سطح جهانی مانند Amazon Web Service، Google Cloud، IBM Cloud و Microsoft Azure سرویسهای کاملاً مدیریتشده کوبرنتیز را در سبد محصولات خود قرار دادهاند.
کوبرنتیز چیست و چه کاربردهایی دارد؟
کوبرنتیز به عنوان یک پلتفرم مدیریت کانتینر، وظایف مختلف مرتبط با کانتینرها را در طول چرخه حیات اپلیکیشن به صورت خودکار زمانبندی و مدیریت میکند. برخی از مهمترین وظایف و کاربردهای کوبرنتیز عبارتند از:
Self-healing for high availability: کوبرنتیز با قابلیت خود-ترمیمی پیشرفته، به محض تشخیص خرابی در کانتینرها، به صورت خودکار آنها را مجدداً راهاندازی یا جایگزین میکند. این ویژگی همچنین کانتینرهایی که معیارهای سلامت را رعایت نمیکنند شناسایی و حذف میکند تا دسترسپذیری سیستم همواره در بالاترین سطح باقی بماند.
Deployment: کوبرنتیز قادر است تعداد مشخصی از کانتینرها را در یک هاست معین مستقر کرده و آنها را در وضعیت مطلوب و مورد نظر در حال اجرا نگه دارد.
Rollouts: یک rollout به معنای ایجاد تغییر در استقرار است. کوبرنتیز به کاربران این امکان را میدهد که rolloutها را شروع کرده، متوقف کنند، از سر بگیرند یا به حالت قبل بازگردانند.
Service discovery: کوبرنتیز میتواند به صورت اتوماتیک یک کانتینر را با استفاده از نام DNS یا آدرس IP در اینترنت یا برای سایر کانتینرها قابل دسترس کند.
Storage provisioning: کوبرنتیز چیست و چگونه فضای ذخیرهسازی را مدیریت میکند؟ این پلتفرم قدرتمند قابلیت پیکربندی و تنظیم خودکار برای نصب و راهاندازی فضای ذخیرهسازی ابری یا محلی دائمی را برای کانتینرها دارد. کوبرنتیز با مدیریت هوشمند منابع ذخیرهسازی، اطمینان حاصل میکند که برنامههای شما همیشه به فضای مورد نیاز دسترسی دارند.
Load balancing: کوبرنتیز با استفاده از الگوریتمهای پیشرفته توزیع بار، میزان استفاده از CPU و سایر معیارهای سفارشی را به دقت پایش میکند. این قابلیت باعث میشود حجم کاری به صورت هوشمندانه در سراسر شبکه توزیع شده و عملکرد و پایداری سیستم در بالاترین سطح حفظ شود.
Autoscaling: سیستم مقیاسپذیری خودکار کوبرنتیز به طور مداوم ترافیک ورودی را رصد کرده و در صورت افزایش بار، به صورت خودکار خوشههای جدید ایجاد میکند تا از اختلال در سرویسدهی جلوگیری شود.

آشنایی با معماری و اجزای کوبرنتیز
اصلیترین اجزای کوبرنتیز شامل موارد زیر میشود:
نود (Node) و کلاستر (Cluster)
خوشهها (cluster) به عنوان واحدهای اصلی و بنیادی در معماری کوبرنتیز عمل میکنند. هر کلاستر کوبرنتیز از مجموعهای از گرهها (node) تشکیل شده است که میتوانند به صورت ماشینهای فیزیکی یا مجازی پیادهسازی شوند. این گرهها در کنار یکدیگر یک محیط محاسباتی یکپارچه را تشکیل میدهند که برای اجرای برنامههای کانتینری استفاده میشود.
در معماری کوبرنتیز، هر کلاستر از یک گره اصلی (Master Node) و تعدادی گره کارگر (Worker Node) تشکیل میشود. گره اصلی نقش حیاتی برنامه کنترلی (Control Plane) را بر عهده دارد و مسئولیت زمانبندی و مدیریت خودکار استقرار کانتینرها را بر اساس پارامترهای تعیین شده توسط توسعهدهندگان و منابع محاسباتی موجود به عهده دارد.
گرههای کارگر وظیفه میزبانی و اجرای برنامههای کانتینری را بر عهده دارند. هر گره کارگر دارای دو جزء اصلی است:
- مجموعه ابزارهای مدیریت کانتینر مانند داکر که وظیفه مدیریت چرخه حیات کانتینرها را بر عهده دارند
- یک عامل نرمافزاری به نام Kubelet که به عنوان رابط بین گره کارگر و گره اصلی عمل کرده و دستورات را دریافت و اجرا میکند
توسعهدهندگان با استفاده از ابزار قدرتمند kubectl، که یک رابط خط فرمان (CLI) پیشرفته است، عملیاتهای مختلف خوشه کوبرنتیز را مدیریت و کنترل میکنند. این ابزار بهطور مستقیم با API کوبرنتیز در ارتباط است و امکان اجرای دستورات متنوع برای مدیریت منابع و کانتینرها را فراهم میکند.
پادها (Pods) و استقرارها (Deployments)
پادها (Pods) به عنوان کوچکترین واحد قابل استقرار در کوبرنتیز، گروههایی از کانتینرها هستند که منابع محاسباتی و شبکه یکسانی را به اشتراک میگذارند. این واحدها نقش کلیدی در مقیاسپذیری سیستم کوبرنتیز ایفا میکنند. زمانی که یک کانتینر در یک پاد با ترافیک بیش از حد مواجه میشود، کوبرنتیز بهطور هوشمند پاد را در سایر گرههای موجود در کلاستر تکثیر میکند. به همین دلیل، متخصصان توصیه میکنند پادها را فشرده نگه دارید و تنها کانتینرهایی را که نیاز به اشتراکگذاری منابع دارند، در یک پاد قرار دهید.
استقرار (Deployment) یکی از مفاهیم اساسی در کوبرنتیز است که وظیفه ایجاد و کنترل وضعیت اپلیکیشنهای کانتینری را بر عهده دارد. این منبع نه تنها اپلیکیشن را در حالت اجرا نگه میدارد، بلکه تعداد نسخههای مورد نیاز از هر پاد را نیز مدیریت میکند. در صورت بروز مشکل و از کار افتادن یک پاد، استقرار بهطور خودکار یک نمونه جدید ایجاد میکند تا سرویسدهی بدون وقفه ادامه یابد.
محاسبات بدون سرور (Serverless) و Knative
Knative که بهصورت kay-native تلفظ میشود، یک پلتفرم منبعباز پیشرفته است که بهعنوان یک لایه اضافی روی کوبرنتیز قرار میگیرد. کوبرنتیز چیست؟ کوبرنتیز یک پلتفرم مدیریت کانتینر است که امکان اجرا و مدیریت اپلیکیشنهای کانتینری را فراهم میکند. Knative با بهرهگیری از قابلیتهای کوبرنتیز، دو مزیت اساسی برای توسعه ابر بومی (cloud-native) ارائه میدهد:
۱. Knative یک مسیر ساده و کارآمد برای محاسبات بدون سرور فراهم میکند
محاسبات بدون سرور یک رویکرد نوین در استقرار کد است که به بهینهسازی اپلیکیشنهای ابر بومی کمک میکند. این روش با حذف نیاز به مدیریت مستقیم سرورها، هزینههای عملیاتی را کاهش میدهد زیرا تنها زمانی که کد در حال اجراست، هزینه محاسبه میشود.
Knative به توسعهدهندگان اجازه میدهد تا با یکبار ساخت کانتینر، آن را بهعنوان یک سرویس نرمافزاری یا تابع بدون سرور اجرا کنند. تمام پیچیدگیهای فنی توسط Knative در پسزمینه مدیریت میشود، که این امر به توسعهدهندگان اجازه میدهد تا تمرکز خود را روی توسعه کد قرار دهند.
۲. Knative فرآیند توسعه و هماهنگسازی کانتینرها را تسهیل میکند.
کانتینری کردن کد برای توسعهدهندگان فرآیندی پیچیده و زمانبر است که نیازمند تکرار مراحل متعددی میباشد. در این میان، هماهنگسازی کانتینرها به تنظیمات و اسکریپتهای گوناگونی نیاز دارد. این تنظیمات شامل ایجاد فایلهای پیکربندی برای کوبرنتیز، نصب و پیکربندی وابستگیهای مختلف نرمافزاری، مدیریت سیستمهای ورود و ردیابی، و همچنین توسعه اسکریپتهای استقرار مداوم و یکپارچهسازی مداوم (CI/CD) میشود که هر کدام نیازمند تخصص و زمان قابل توجهی هستند.
Knative با ارائه راهکارهای خودکارسازی هوشمند، این وظایف پیچیده را از طریق سه مؤلفه کلیدی سادهتر میکند:
- Build: مؤلفه Build در Knative بهصورت خودکار کد منبع را به کانتینر یا تابع ابر بومی تبدیل میکند. این مؤلفه با اتصال به مخزن کد، کدها را دریافت کرده و تمامی وابستگیهای مورد نیاز را نصب میکند. سپس image کانتینر را ساخته و آن را در یک رجیستری کانتینری قرار میدهد تا سایر توسعهدهندگان بتوانند از آن استفاده کنند. در این فرآیند، توسعهدهندگان تنها نیاز دارند محل قرارگیری اجزا را برای Knative مشخص کنند و پس از آن، تمام فرآیند ساخت بهصورت خودکار انجام میشود.
- Serve: مولفه Serve در کوبرنتیز چیست؟ این مولفه یکی از قدرتمندترین بخشهای کوبرنتیز است که کانتینرها را بهعنوان سرویسهای مقیاسپذیر اجرا میکند. این مولفه قابلیت افزایش یا کاهش خودکار هزاران نمونه کانتینر را دارد و میتواند آنها را به صفر برساند که به این ویژگی مقیاسپذیری تا صفر میگویند. این قابلیت باعث صرفهجویی قابل توجه در منابع میشود.
علاوهبر این، Serve در کوبرنتیز دو ویژگی بسیار کاربردی و مهم دارد؛ پیکربندی و مسیریابی سرویس. با استفاده از ویژگی پیکربندی، هر بار که کانتینر را به سمت محیط تولید پوش (push) میکنید، نسخههای مختلف کانتینر بهصورت خودکار ذخیره میشوند و شما میتوانید چندین نسخه را بهطور همزمان اجرا کنید.
مسیریابی سرویس به شما این امکان را میدهد که میزانهای مختلف ترافیک را به نسخههای متفاوت هدایت کنید. با بهرهگیری از هر دوی این ویژگیهای کوبرنتیز میتوانید قبل از ارائه نسخه نهایی یک اپلیکیشن، آن را بهطور کامل و دقیق مورد آزمایش و ارزیابی قرار دهید.
- Event: مولفه Event در کوبرنتیز چیست و چه کاربردی دارد؟ این مولفه یکی از قابلیتهای کلیدی کوبرنتیز است که رویدادهای مشخص را برای راهاندازی سرویسها یا عملکردهای مبتنی بر کانتینر مدیریت میکند. Event در معماری کوبرنتیز نقش حیاتی در قابلیتهای Serverless ایفا میکند و به تیمهای توسعه این امکان را میدهد تا بهصورت خودکار به تولیدکننده رویداد مورد نظرشان متصل شوند. این مولفه با هدایت هوشمند رویدادها به سمت کانتینر مقصد، نیاز به برنامهریزی دستی برای چنین اتصالاتی را از بین میبرد و باعث افزایش کارایی و انعطافپذیری سیستم میشود.
منبع: IBM


