Kubernetes یک پلتفرم پرتابل ، قابل توسعه و متن باز است که با استفاده از آن می توان کانتینرها چه کانتینر های سرویس باشند و چه کانتینر های Workload مدیریت و Automate کرد.
این پلتفرم اکو سیستم بسیار بزرگ و در حال رشدی دارد. سرویس های Kubernetes ، ساپورت Kubernetes و در نهایت ابزار این پلتفرم در اینترنت به صورت کامل موجود می باشند.
اسم Kubernetes از یک کلمه یونان باستان ، به معنی خلبان گرفته شده است.
گوگل در سال 2014 پروژه Kubernetes را به صورت عام Open Source کرد که این محصول نتیجه 15 سال کار مداوم شرکت گوگل می باشد.
مقایسه Kubernetes با انواع پلتفرم ها
در حال حاضر به صورت کلی سه مدل پلتفرم ارائه سرویس و Workload موجود می باشد :
- فیزیکی
- مجازی سازی شده
- کانتینر
در ابتدا شکل های زیر را برای درک بهتر این مطلب مشاهده بفرمایید.
پیاده سازی فیزیکی یا سنتی :
در ابتدا، شرکت ها برای راه اندازی کارها و سرویس های خود از سیستم فیزیکی استفاده می کردند.
هیچ راهی برای محدودیت یا مرز گزاری برای سرویس ها نبود ، اگر بر روی یک سیستم فیزیکی چند سرویس نصب می شد، هر کدام از سرویس ها ممکن منابع را به دست بگیرد و در نهایت باعث کندی سرویس های دیگر شود.
از طرفی اگر سرور فیزیکی دچار مشکل می شد ، تمام سرویس ها بدون داشتن High Availability از بین می رفتند یا حداقل برای مدت زمان زیادی از دسترس خارج می شدند.
در ضمن این مدل Scale پذیری بسیار پایینی داشت ، و در صورتی که سرویس احتیاج به اضافه کردن منابع به صورت آنلاین یا در حداقل زمان می بود این قابلیت موجود نبود.
پیاده سازی مجازی سازی :
برای حل راهکار موجود در سرویس های فیزیکی ، مجازی سازی معرفی شد.
با قابلیت ایجاد محدودیت بر روی هر سرویس ، افزایش آنی منابع ، امنیت بسیار بیشتر و در نهایت پیاده سازی سرویس ها در کسری از ثانیه .
مجازی سازی باعث بهبود استفاده ازمنابع می شود ، قابلیت Scale کردن را بسیار راحت تر می کند و درک کلاستر کردن سرور ها را برای ایجاد HA یا تمام قابلیت هایی که می دانید را دارا می باشد.
در آخر هر VM یک ماشین کامل می باشد که تمام اجزاء از جمله سیستم عالم را دارا می باشد و نسبت به سخت افزار به صورت کامل مستقل می باشد بدین معنی که مهم نیست ماشین ها بر روی چه سخت افزاری پیاده سازی شده باشند فقط کافیست آن سخت افزار مورد تایید HCL شرکت VMware باشد.
پیاده سازی کانتینر :
هر کانتینر شبیه ماشین مجازی می باشد با این تفاوت که می توانند سیستم عامل را بین خودشان Share داشته باشند ، پس هر کانتینر تنها فایل مربوط به سرویس یا Workload می باشد به علاوه یه سری فایل های bin که برای استفاده از سرویس یا Workload الزامی است.
به همین دلیل کانتینر ها بسیار سبک هستند و هر کدام رم ، CPU و هارد مجزای خود را مصرف می کنند.
چون میتوان آنها را از سیستم عامل جدا کرد قابلیت پرتابل شدن و پیاده سازی بین Distribution های مختلف و محیط های Cloud را دارا می باشند.
کانتینر ها بسیار معروف شده اند و این معروفیت به خاطر قابلیت های زیر می باشد :
- پیاده سازی چابک و بسیار سریع سرویس ها یا اپلیکیشن ها :
- سرعت بیشتر و راندمان بیشتر این تکنولوژی در زمان ایجاد کردن سرویس جدید نسبت به مجازی سازی
- Develop شدن مداوم اپلیکیشن ها و راهکاری جدید و استقلال این راهکار نسبت به سیستم عامل.
- کمک به گروه Dev / Ops :
- این راهکار با توجه به اینکه نرم افزار را در هنگام پیاده سازی کانتینر خود نصب و پیاده سازی می کند، سرعت ارائه راهکار ها از سوی تیم DEV Ops بسیار افزایش می دهد.
- قابلیت مشاهده تمام متریک ها و مانیتور کردن سیستم عامل و اجزای آن در لایه کانتینر
- یکپارچگی فوق العاده ورژنی که در سازمان پیاده سازی می کنید همان است که بر روی لپ تاپ خود پیاده سازی می کنید پس امتحان کردن و عیب یابی یا تست کردن بسیار آسان می شود.
- پرتابل بودن ( که راجع به آن صحبت کردیم)
- جداسازی منابع سیستم بین کانتینر های مختلف
- بالابردن Utilization و راندمان منابع
چرا به Kubernetes احتیاج خواهیم داشت ؟
کانتینر ها راه بسیار خوبی برای پیاده سازی و استفاده از اپلیکیشن ها می باشند.
در یک محیط عملیاتی ، زمانی که یک راهکار یا اپلیکیشن سازمانی دچار مشکل می شود ، شما به عنوان ادمین مجبورید سریع دست به کار بشوید و اپلیکیشنی را جایگزین کنید یا مشکل قبلی را بر طرف کنید ، خوب نیست یک راهکاری در سطح کانتینر همان کاری که VMware در محیط مجازی سازی vSphere مثل HA انجام می دهد را انجام دهد؟
در اینجاست که Kubernetes به کمک سازمان ها می آید.
Kubernetes پلتفرمی است که به شما Redundancy در سطح چندین سیستم عامل می دهد.
Kubernetes پلتفرمی است که به شما قابل Scaling بر روی کانتینر ها را می دهد.
Kubernetes پلتفرمی است که به شما قابلیت Load Balancing بین کانتینر ها را می دهد.
Kubernetes پلتفرمی است که به شما قابلیت مانت کردن استوریج مورد نظرتون اعم از Local ، Public Cloud Object یا غیره را می دهد.
Kubernetes پلتفرمی است که قابلیت باز گرداندن به عقب یا Role Back و پیاده سازی مجدد و جدید یا Rollout را می دهد.
Kubernetes پلتفرمی است که به شما قابلیت سفارشی سازی یا Customization هر کانتینر را می دهد.
Kubernetes پلتفرمی است که به شما قابلیت چک کردن مداوم کانتینر ها و در صورت نیاز ریستارت کردن، عوض کردن و از بین بردن کانتینر ها را می دهد.
Kubernetes پلتفرمی است که به شما اجازه می دهد اطلاعات امنیتی و محرمانه خود را مدیریت کنید و آن را بین کانتینر ها بدون نیاز به دوباره وارد کردن اطلاعات جابجا کنید.
حال بریم سراغ نیست ها و نبود ها
Kubernetes یک پلتفرم کامل PaaS نیست چرا که با لایه سخت افزار کاری ندارد.
Kubernetes قابلیت پیاده سازی Source Code و ایجاد اپلیکشن دلخواه برای غیر متخصصین را ندارد .استفاده از این تکنولوژی در لایه ساخت احتیاج به تخصص دارد ، اما در لایه یوزر و یا استفاده از کانتینر های آماده بسیار ساده است.
Kubernetes اپلیکیشن های مربوط به سرویس ها را ارائه نمی دهد بلکه خود سرویس ها را ارائه میده یعنی :
- middleware (for example, message buses),
- data-processing frameworks (for example, Spark),
- databases (for example, MySQL) caches
- cluster storage systems (for example, Ceph)
را نمیتواند ارائه دهد.
در نظر داشته باشید تمام این راهکار ها را می توانید با راهکار پرتابلی مانند Open Service Broker در Kubernetes پیاده سازی کنید و داشته باشید.
Kubernetes نحوه لاگ ، مانیتور کردن و آلرت ایجاد کردن را به نرم افزار های ماینتورینگ اعلام نمی کند و فقط می تواند به آنها متصل شود مدیریت آن نرم افزار ها و نحوه لاگ و آلرت زدنشان در دست خود آنها می باشد.
و در نهایت Kubernetes کار Orchestration را انجام نمی دهد با اینکه برای شما اتوماسیون را به همراه می آورد اما شما نمیتوانید یک Workflowشامل چندین تسک را به آن بدهید و از آن بخواهید برای شما انجام دهد.
در مطلب بعدی به اجزاء و Component های Kubernetes می پردازیم.