مفهوم Containerizationنوعی مجازی سازی در سطح برنامه است که اجازه می دهد چندین نمونه فضای کاربر ایزوله روی یک هسته واحد وجود داشته باشد. به این نمونه ها کانتینر می گویند. کانتینرها یک روش استاندارد برای پکیج کردن کد برنامه، زمان اجرا، ابزارهای سیستم، کتابخانه های سیستم و تنظیمات در یک نمونه ارائه می کنند. کانتینرها یک هسته (سیستم عامل) مشترک دارند که روی سخت افزار نصب شده است. ابزارهای ارکستراسیون کانتینر به طور گسترده بر اساس نسخههای منبع باز مانند Kubernetes, LXC ، Docker Swarm یا نسخه تجاری Red Hat OpenShiftهستند.
کانتینریسازی تقریباً در تمام صنایع و اندازههای شرکت در سراسر جهان رو به افزایش است. در واقع، نسخه 2019 گزارش سالانه بررسی پذیرش کانتینرهای Portworxنشان داد که بیش از 87 درصد از سازمانهای مورد بررسی از فناوریهای کانتینر استفاده میکنند. بیش از 90 درصد آنها از کانتینرسازی در تولید استفاده می کنند. در سال 2021، گزارش پذیرش Kubernetes نشان داد که 68٪ از متخصصان فناوری اطلاعات مورد بررسی، استفاده از کانتینرها را در طول همهگیری افزایش دادهاند. از جمله اهداف آنها سرعت بخشیدن به چرخه های استقرار، افزایش اتوماسیون، کاهش هزینه های فناوری اطلاعات، و توسعه و آزمایش برنامهها و مدل های هوش مصنوعی بود.
مزیت کانتینرها
· سبکی
کانتینرها نسبت به ماشین های مجازی فضای کمتری را در سرور اشغال میکنند و معمولاً در چند ثانیه راه اندازی می شود.
· انعطاف پذیری
کانتینرها بسیار منعطف هستند و نیازی به تخصیص مقدار مشخصی از منابع ندارند. این بدان معناست که کانتینرها می توانند از منابع سرور استفاده موثرتر و پویایی داشته باشند. هنگامی که تقاضا برای یک کانتینر کاهش مییابد، منابع اضافی برای استفاده توسط سایر کانتینرها آزاد می شود.
· تراکم
تراکم به تعداد اشیایی که یک سرور فیزیکی می تواند در یک زمان اجرا کند اشاره دارد. Containerizationاجازه ایجاد محیط های متراکم را می دهد که در آن منابع سرور میزبان به طور کامل استفاده می شود اما بیش از حد مورد استفاده قرار نمی گیرد. در مقایسه با مجازیسازی سنتی، کانتینریسازی محیطهای متراکمتری را امکانپذیر میکند زیرا کانتینرها نیازی به میزبانی سیستم عامل خود ندارند.
· کارایی
هنگامی که فشار منابع بالا وجود دارد، عملکرد برنامه ها با کانتینرها به مراتب بهتر از هایپروایزرها است. زیرا با مجازی سازی سنتی، سیستم عامل مهمان نیز باید نیازهای حافظه خود را برآورده کند و RAM مناسب را از میزبان دور کند.
· کارایی تعمیر و نگهداری
با تنها یک هسته سیستم عامل، به روز رسانی ها یا وصله ها در سطح سیستم عامل فقط باید یک بار انجام شوند تا تغییرات در همه کانتینرها اعمال شود. این امر عملکرد و نگهداری سرورها را کارآمدتر می کند.
به استقرار و سازماندهی کانتینرها برای پشتیبانی از برنامه ها، کانتینر ارکستراسیون گفته می شود که از طریق ابزار هماهنگ سازی کانتینر انجام می شود. تقریباً هر برنامهای که نیاز به تغییر و استقرار مجدد سریع و مکرر داشته باشد، برای کانتینریسازی مناسب است. همانند برنامه های کاربردی که از معماری Microservices استفاده میکنند.
چرا به ارکستراسیون کانتینر نیاز داریم؟
ارکستراسیون کانتینر برای خودکارسازی وظایف زیر در مقیاس مختلف استفاده میشود:
• پیکربندی و برنامه ریزی کانتینرها.
• تهیه و استقرار کانتینرها.
• دسترس پذیری کانتینرها.
• پیکربندی برنامهها بر حسب کانتینرهایی که در آن اجرا می شوند.
• مقیاس بندی کانتینرها برای متعادل کردن بارهای کاری برنامه در سراسر زیرساخت سیستم.
• تخصیص منابع بین کانتینرها.
• تعادل بار، مسیریابی ترافیک و کشف سرویس کانتینرها.
• نظارت بر سلامت کانتینرها.
• ایمن سازی ارتباطات میان کانتینرها.
ارکستراسیون کانتینر چگونه کار می کند؟
ارکستراسیون کانتینر با ابزارهایی مانند Kubernetes و Docker Swarmکار میکند. فایل های پیکربندی، ابزار هماهنگ سازی کانتینر است که چگونگی شبکه بندی میان کانتینرها و مکان ذخیره لاگ های سیستم را مشخص میکند. ابزار ارکستراسیون همچنین استقرار کانتینرها در خوشهها را زمان بندی میکند و بهترین میزبان را برای کانتینر تعیین میکند. پس از تصمیم گیری میزبان، ابزار ارکستراسیون چرخه حیات کانتینر را بر اساس مشخصات از پیش تعیین شده مدیریت میکند. ابزار ارکستراسیون کانتینر در محیط هایی که کانتینرها را اجرا می کنند، کار میکند.
ابزارهای ارکستراسیون برای Docker شامل موارد زیر است:
•ابزار Docker Machine: میزبانی را فراهم میکند و موتور داکر را نصب میکند.
• ابزار Docker Swarm: چندین میزبان داکر را در یک میزبان واحد جمع میکند. همچنین می تواند با هر ابزاری که با یک میزبان داکر کار میکند، ادغام شود.
• ابزار Docker Compose: برنامه های کاربردی چند کانتینری را با ایجاد کانتینرهای مورد نیاز مستقر میکند.
ابزارهای ارکستراسیون برای Kubernetes شامل ویژگیهای زیر اند:
• استقرار و تکثیر خودکار کانتینرها.
• مقیاس پذیری برای بزرگ کردن یا کوچک کردن خوشههای کانتینری به صورت آنلاین.
• گروه های متعادل کننده بار کانتینرها.
• برنامه ریزی مجدد خودکار کانتینرهای ناموفق.
• قرار گرفتن کنترل شده پورتهای شبکه با سیستم های خارج از خوشه.
ابزار Kubernetes
یک پلتفرم ارکستراسیون کانتینر منبع باز است که هم از اتوماسیون اعلامی و هم از پیکربندی پشتیبانی می کند. امروزه رایج ترین ارکستراتور کانتینری است. گوگل ابتدا آن را قبل از اینکه به بنیاد محاسبات Cloud Native تحویل دهد، توسعه داد. Kubernetes کانتینرها را با استفاده از فایل های YAML و JSON هماهنگ میکند. همچنین مفهوم پادها، گره ها و خوشه ها را معرفی می کند.
تفاوت بین پادها، گره ها، خوشه ها و کانتینرها چیست؟
· برخی از پلتفرمهای ارکستراسیون کانتینر، کانتینرها را مستقیماً اجرا نمیکنند. در عوض، آنها یک یا چند کانتینر را در ساختاری به نام پاد می پیچند. در یک پاد، کانتینرها می توانند شبکه محلی (و آدرس IP) و منابع را به اشتراک بگذارند در حالی که همچنان از کانتینرهای موجود در سایر پادها جدا هستند. از آنجایی که پادها یک واحد تکرار در پلتفرم ارکستراسیون هستند، آنها به عنوان یک واحد بالا و پایین می شوند، به این معنی که همه کانتینرهای درون آنها بدون توجه به نیازهای فردی آنها، بر اساس آن مقیاس می شوند. یک گره نشان دهنده یک ماشین واحد است، کوچکترین واحد سخت افزار محاسباتی که نمونه های پاد روی آن اجرا می شوند. وقتی چندین گره منابع را به هم میکشند، یک خوشه، ماشین اصلی را تشکیل میدهند.چندین ارائه دهنده Kubernetes-as-a-Service بر روی پلت فرم Kubernetesساخته شده اند:
· سرویس کانتینر الاستیک آمازون (ECS)
· خدمات Azure Kubernetes (AKS)
· Google Kubernetes Engine (GKE)
· RedHat OpenShift Container Platform
· VMware Tanzu
· Knative
· Istio
· Cloudify
· Rancher
در حالی که ماهیت گسترده Kubernetes میتواند مدیریت و تخصیص فضای ذخیرهسازی را چالشبرانگیز کند، همچنین میتواند برنامههای کانتینریشده شما را در صورت به خطر انداختن یک کانتینر در معرض مشکلات امنیتی قرار دهد.
ابزار MESOS
یک پلت فرم ارکستراسیون با مقیاس پذیری آسان (تا 10000 نود)، سبک وزن، در دسترس بودن بالا و پلتفرم های مختلف ارائه می دهد. این برنامه روی لینوکس، ویندوز و OSXاجرا میشود و APIهای آن از چندین زبان محبوب مانند جاوا، پایتون و سی پلاس پلاس پشتیبانی میکنند. Mesos برخلاف Kubernetes و Docker Swarm فقط مدیریت در سطح خوشه را ارائه می دهد. با این حال، Marathonارکستراسیون کانتینری را به عنوان یک ویژگی ارائه می دهد. همچنین برای شرکتهای بزرگ ایدهآل است، زیرا ممکن است برای سازمانهای کوچکتر با بودجههای ITکم، بسیار زیاد باشد.
شرکت های Uber، PayPal، Twitterو Airbnbبرخی از برندهایی هستند که از پلت فرم هماهنگ سازی کانتینر Mesos استفاده می کنند.
مقایسه کانتینر و معماری میکروسرویس
کانتینرها به بستههای نرمافزاری اطلاق میشوند که شامل همه چیزهایی است که یک واحد برنامه برای عملکرد نیاز دارد. میکروسرویس ها به فناوری اطلاق می شود که تقسیم یک برنامه بزرگ (یکپارچه) را به سرویس های کوچکتر و چندگانه که هر یک عملکرد خاصی را انجام می دهند، ممکن می سازد.
اگر میکروسرویس ها را به عنوان کالاهای موجود در یک کانتینر حمل و نقل و کانتینرها و همچنین کانتینرهای بار را در نظر گرفته شود. میکروسرویس ها داخل کانتینر قرار میگیرند. معماری میکروسرویسها به مهندسان نرمافزار اجازه میدهد تا برنامههای یکپارچه را به چندین واحد تبدیل کنند که مقیاسبندی خودکار، بازسازی بهصورت جداگانه و سریعتر برای استقرار، اصلاح مشکلات و انجام بازیابی اشکال آسانتر است.
مقایسه کانتینر و ماشین مجازی
کانتینرها در بالای سخت افزار یک سرور فیزیکی نصب میشوند و یک سیستم عامل واحد را به اشتراک می گذارند. ماشینهای مجازی (VM) از نرمافزار و سختافزار برای ایجاد چندین ماشین مجازی که سیستمعاملهای مختلف را روی یک میزبان اجرا میکنند، استفاده میکنند. بسیاری ماشینهای مجازی را با کانتینر اشتباه میگیرند زیرا هر دو شکل مجازیسازی هستند.
امروزه مهندسان میتوانند یک Hypervisor (سختافزار، سفتافزار یا نرمافزاری که ماشینهای مجازی را ایجاد، اجرا و نظارت میکند) را در بالای سختافزار یک سرور فیزیکی قرار دهند تا چندین رایانه مجازی تولید کنند. این فرآیند به عنوان مجازی سازی شناخته می شود.
مجازی سازی این امکان را فراهم میکند که چندین سیستم عامل روی یک سخت افزار اجرا شود. هر ماشین مجازی میتواند سیستم عامل خود (سیستم عامل مهمان) را اجرا کند. به این ترتیب، هر ماشین مجازی میتواند اپلیکیشنها، کتابخانهها و باینریهای متفاوتی را از برنامههای کنار خود سرویس دهد. ماشینهای مجازی مهندسین را قادر میسازد تا برنامههای متعددی را با سیستمعاملهای ایدهآل بر روی یک سرور فیزیکی اجرا کنند تا قدرت پردازش را افزایش دهند و هزینههای سختافزاری را کاهش دهند و دیگر نیازی به اجرای یک برنامه در کل سرور ندارند. اما ماشین های مجازی کامل نیستند. از آنجایی که هر ماشین مجازی یک تصویر سیستم عامل، باینری ها و کتابخانه ها را در داخل خود اجرا میکند، می تواند به سرعت حجم خود را افزایش دهد و به سرعت به چندین کاهش یابد که یک گلوگاه عملکردی است.
ماشینهای مجازی همچنین هنگام انتقال نرمافزار از یک محیط محاسباتی به محیط دیگر، در اجرای نرمافزار مشکل دارند. این می تواند در عصری که کاربران از طریق دستگاه ها برای دسترسی به خدمات از هر کجا و در هر زمان تغییر میکنند، محدود کننده باشد.
همانطور که قبلاً گفته شد، کانتینرها سبک وزن هستند، منابع سرور میزبان را به اشتراک می گذارند، و به طور منحصر به فردتر، برای کار در هر محیطی طراحی شده اند.
مقایسه Docker Container Orchestration و Kubernetes Container Orchestration
ابزار هماهنگسازی کانتینر Docker که به نام Docker Swarm نیز شناخته میشود، میتواند برنامهها را بهعنوان کانتینر بستهبندی و اجرا کنند، تصاویر کانتینر موجود را از دیگران پیدا کند و یک کانتینر را روی لپتاپ، سرور یا ابر (ابر عمومی یا خصوصی) مستقر کنند. ارکستراسیون کانتینر داکر به تنظیمات ساده ای نیاز دارد.
ارکستراسیون در خدمات کانتینر برای Kubernetes امکان خوشه بندی کانتینر را از طریق موتور هماهنگ سازی کانتینر فراهم می کند. Kubernetes دارای مدیریت اعلامی است که پیچیدگی را پنهان می کند و منبع باز است بنابراین می توانید آن را در هر جایی اجرا کنید.
همانطور که بررسی شد، به استقرار و سازماندهی کانتینرها برای پشتیبانی از برنامه ها، کانتینر ارکستراسیون گفته می شود که از طریق ابزار هماهنگ سازی کانتینر انجام می شود. تقریباً هر برنامهای که نیاز به تغییر و استقرار مجدد سریع و مکرر داشته باشد، برای کانتینریسازی مناسب است.
این پلتفرمها با توجه به کارایی که دارند میتواند در شرکتهایی مانند سروش و بله مورد استفاده قرار گیرند.
"این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است."