آشنایی با پلتفرم ابری ابریمنت


معرفی کلی

پلتفرم ابری مهیمن راهکاری برای توسعه دهندگان نرم افزار بدون دغدغه‏ی تأمین سخت افزار و نیازمندی های زمان اجرا و فارغ از مسائلی همچون راه اندازی ابزارهای مانیتورینگ، سیستم عامل و پایگاه داده، مدیریت کلاستر و ..... می باشد. توسعه‌دهنده های نرم افزار و صاحبان کسب و کار می‌توانند با استفاده از این سرویس، بستر اختصاصی توسعه نرم افزار خود را در اختیار داشته باشند. این بستر بر روی ابزار محبوب کوبرنتیس راه اندازی شده است در نتیجه سازگاری نرم افزارهای مختلف با این بستر، به سادگی امکان پذیر است.


ویژگی های کلیدی

  • فراهم کردن بستر زیرساخت توسعه نرم افزار
  • سهولت در راه اندازی ابزارهای پیاده سازی و تست بر اساس نیاز
  • پیاده سازی و بروزرسانی نسخه های مختلف نرم افزار به صورت خودکار
  • ارائه ابزارهای تست نرم افزار بر اساس نیاز
  • مانیتورینگ جامع نرم افزار و نمایش آن در داشبورد بر اساس پارامترهای مورد نیاز
  • جمع آوری لاگ نرم افزار و زیرساخت و همچنین نمایش آن بر اساس پارامترهای مورد نیاز
  • ارائه تکنولوژی های مختلف ذخیره سازی برای توسعه نرم افزار

مزیت‌ها برای مشتری

  • دسترسی‌پذیری بالا به خدمات
  • مدیریت و نگهداری یکپارچه زیرساخت و نرم افزار
  • کامل و جامع بودن خدمات توسعه نرم افزار
  • ارائه ابزارهای یکپارچه Devops و CI/CD
  • امکان راه اندازی و مدیریت اپلیکیشن در بستر Kubernetes

ویژگی ها برای مشتری

  • خدمت راه اندازی و مدیریت پایگاه داده
  • سازگاری با زبان برنامه نویسی توسعه یافته نرم افزار
  • سازگاری با زیرساخت در اختیار گذاشته شده توسط مشتری
  • خدمت صف پیام
  • خدمت مانیتورینگ
  • خدمت مدیریت لاگ
  • ورژنینگ خودکار
  • توزیع بار
  • پشتیبانی از برنامه های متن باز

فرایند پیاده‌سازی برای مشتری

  • فراهم کردن زیرساخت مورد نیاز
  • نصب و راه اندازی زیرساخت توسعه نرم افزار
  • اتصال زیرساخت توسعه نرم افزار به محصول ابریمنت
  • پیاده سازی ابزارهای مورد نیاز توسعه دهنده در قالب سرویس کاتالوگ
  • تست و یکپارچه سازی نهایی
  • آموزش و تحویل به مشتری

اطلاعات بیشتر

در گذشته نرم افزار ها به صورت monolithic و بسیار بزرگ بودند که از اجزاء متعدد و به هم پیوسته تشکیل می شدند. در این حالت توسعه توسط تیم های بسیار بزرگ انجام می گرفت که فرآیند مدیریت را پیچیده می کرد و نرم افزار دارای یک چرخه حیات واحد بود. بنابراین در صورت بروز مشکل یک نرم افزار بزرگ باید به روز رسانی و ورژن جدید آن ارائه شود. از طرف دیگر مقیاس پذیری چنین نرم افزاری به صورت عمودی اتفاق می افتد.

امروزه با نیاز رو به رشدی که برای نرم افزار‌های بزرگ اینترپرایز به وجود آمده است، مفهومی تحت عنوان میکروسرویس هم در صنعت توسعهٔ نرم‌افزار رواج یافته است چرا که توسعه دهندگان برای توسعهٔ سیستم‌های بزرگ تجاری چاره‌ای جز به‌کارگیری از معماری میکروسرویس ندارند.

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

برای توسعه ی نرم افزار هایی که به صورت میکرو سرویس توسعه یافته باشند نیاز به زیرساخت مخصوص برای اجرای میکروسرویس ها به وجود آمد.

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

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

از ویژگی های مهم و محبوب کوبرنتیس می توان به موارد زیر اشاره کرد:

  • افزایش خودکار رپلیکای نرم افزار به صورت خودکار (مقیاس پذیری افقی)
  • توسعه و پیاده سازی سریع اپلیکیشن
  • خود ترمیمی در صورت بروز مشکل در نرم افزار یا زیرساخت
  • توزیع بار خودکار
  • سهولت در استفاده با پنهان کردن پیچیدگی های ذخیره سازی، پردازشی و زیرساختی از مشتری
  • استاندارد شدن روال پیاده سازی نرم افزار ها از طریق ساختار توصیف نرم افزار با فایل های YAML
  • داشتن استراتژی های متنوع برای بروزرسانی نرم افزار

استفاده از ابریمنت

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

با فشردن دکمه "اضافه کردن پروژه جدید" یک صفحه جدید باز می شود که نام پروژه را باید تعریف کرد:

در صورتی که از قبل پروژه ای تعریف شده باشد، این صفحه ساختار متفاوت تری دارد، به این صورت که لیستی از پروژه های کاربر را نشان می دهد، که با انتخاب هر کدام از آن ها و زدن دکمه "بعدی" می توان به مرحله بعدی رفت.

اکنون آماده ساخت اپلیکیشن می شویم، با زدن دکمه " اضافه کردن اپلیکیشن جدید" صفحه زیر ظاهر می شود:

برای پیاده سازی اپلیکیشن در محیط ابریمنت و بر بستر کوبرنتیس وابسته به نوع نیازمندی، می توان از روش های زیر استفاده کرد:

  • پیاده سازی با استفاده از سرویس کاتالوگ
  • پیاده سازی با استفاده از داکر ایمیج
  • پیاده سازی با استفاده از CI/CD

از روش سرویس کاتالوگ زمانی استفاده می شود که لازم است سرویس های معمول و محبوب زیر ساختی را پیاده سازی کنیم. این سرویس ها با استفاده از دانش فنی موجود در تیم های مختلف مهیمن بهینه سازی و فراهم شده اند. که با چند کلیک ساده و پاسخ دادن به چند سوال می توان یک سرویس متناسب با محیط عملیاتی را پیاده سازی کرد. این سرویس ها در دسته های زیرساخت، گزارش گیری و تحلیل، پایگاه داده و تجارت الکترونیک قرار دارند. همچنین ما درحال اضافه کردن سرویس های بیشتری نیز هستیم. در عکس زیر یک شمای کلی از این سرویس ها را می توان مشاهده کرد:

در بخش پیاده سازی با استفاده از داکر ایمیج، آدرس یک ایمیج که از قبل آماده راه اندازی شده است، از کاربر پرسیده می شود. این ایمیج می تواند در یک رجیستری عمومی مثل داکر هاب یا یک رجیستری خصوصی مخصوص کاربر باشد. در عکس زیر آدرس یک ایمیج عمومی از کاربر پرسیده می شود. همچنین در این قسمت یک نام برای اپلیکیشن انتخاب می شود و نوع اپلیکیشن از بین Deployment یا StatefulSet انتخاب می شود، تفاوت این دو نوع پیاده سازی مرتبط با مفاهیم کوبرنتیس است، به نحوی که اگر کاربر احتیاج داشته باشد تا پاد هایی که برای اپلیکیشن او ساخته می شود دارای شناسه باشند و هر کدام از پادها دیسک خاص خود را داشته باشد از Statefulset استفاده می کند، اما در صورتی که موارد ذکر شده اهمیتی نداشته باشد می تواند از Deployment استفاده کند. موارد استفاده از StatefulSet سرویس هایی نظیر کافکا، پایگاه های داده و موارد مشابه است. در صورتی که در انتخاب نوع اپلیکیشن تردید دارید بهتر است کار خود را با نوع Deployment شروع کنید.

و در عکس زیر آدرس یک ایمیج در رجیستری خصوصی و یک نام کاربری و رمز عبور برای دسترسی به آن را از کاربر پرسیده می شود:

پس از آن منابع مورد نیاز برای راه اندازی این ایمیج تحت یک کانتینر از کاربر پرسیده می شود. این منابع شامل میزان RAM با ریزدانگی در حد MB، میزان کور های CPU با ریز دانگی در حد میلی کور، حافظه ذخیره سازی میرا و پایدار با ریزدانگی GB است. علاوه بر این منابع تعداد instance های مورد نیاز کاربر نیز قابل تعیین است. مانند شکل زیر این اطلاعات از کاربر گرفته می شود. کاربر می تواند از پکیج های آماده که در شکل مشخص شده نیز استفاده کند. در قسمت پایین صفحه منابع انتخاب شده با کل ظرفیت پردازشی قابل استفاده کاربر چک می شود، در صورتی که منابع انتخاب شده از منابع در دسترس کاربر تجاوز کند با رنگ قرمز و در غیر این صورت با رنگ سبز به کاربر نمایش داده می شود.

اگر نیاز به تغییر تنظیمات ایمیج در حین راه اندازی داشته باشیم، می توان با استفاده از متغیر های محلی و یا فایل های کانفیگ این تغییرات را اعمال کرد.

برای ارائه سرویس بالا آمده، به دنیای خارج یا به سایر سرویس های موجود در کلاستر کوبرنتیس می توان از تنظیمات شبکه موجود استفاده کرد. این تنظیمات وابسته به نوع اپلیکیشن متفاوت است. در صورتی که لازم نیست سرویس از دنیای خارج در دسترس باشد و به یک اپلیکیشن دیگر داخل کلاستر کوبرنتیس سرویس دهی می کند، می توان از بخش تنظیمات شبکه، پورت آن را مشخص کرد تا سایر اپلیکیشن ها بتوانند با استفاده از این پورت به این سرویس متصل شوند. به عنوان مثال برای ارائه یک وب سرور به دنیای خارج می توان یک دامنه تعریف کرد. این تنظیمات از قسمتی که در شکل زیر آمده است قابل اعمال است:

روش آخر پیاده سازی اپلیکیشن از طریق CI/CD هست که کاربر باید پروژه خود را بر روی گیت لب یکپارچه شده با این سامانه قرار دهد. و در کنار پروژه خود یک داکر فایل فراهم می کند. بستر ابریمنت با تشخیص این داکر فایل ایمیج مورد نظر کاربر را ساخته و در قسمت کانتینر رجیستری پروژه گیت لب آپلود می کند و اپلیکیشن راه اندازی می شود. لازم به ذکر است یکپارچه سازی بین محیط گیت لب و بستر پردازشی ابریمنت به صورت کامل پیاده سازی شده است. به این صورت که در صورت تغییر در پروژه موجود در گیت لب اپلیکیشن راه اندازی شده به صورت خودکار به روز رسانی می شود و با تغییرات جدید شروع به اجرا می کند. برای راه اندازی اپلیکیشن به صورت CI/CD لازم است اطلاعات پروژه گیت لب از کاربر پرسیده شود:

فرآیند CI/CD ابریمنت استقرار خودکار و دستی را برای کاربر فراهم می کند به این صورت که، اگر کاربر بعد از انجام commit در پروژه گیت لب خود بخواهد به صورت خودکار تغییرات سمت کلاستر کوبرنتیس اعمال شود، می تواند از استقرار خودکار استفاده کند. اما اگر بخواهد بر فرآیند استقرار کنترل داشته باشد می تواند هر زمان که تصمیم به استقرار گرفت این کار را از طریق داشبورد ابریمنت انجام دهد.