اکوسیستم داکر (Docker) – کامپوننت های رایج
کانتینریزاسیون (Containerization) یا کانتینردار کردن فرایند توزیع و انتشار اپلیکیشنها به روشی پرتابل و قابل پیشبینی است. این امر از طریق بستهبندی کامپوننتها و وابستگیهای (dependency) برنامهها در محیطهای پردازش استاندارد، ایزوله و سبکی صورت میگیرد که کانتینر نام دارند. بسیاری از سازمانها امروزه به طراحی اپلیکیشنها و سرویسهایی که به سادگی قابل انتشار روی سیستمهای توزیع یافته باشند، علاقه نشان میدهند. دلیل این رویکرد آن است که این فرایند برای سازمان امکان مقیاسپذیری آسان و نجات از موارد خرابی رایانه و یا اپلیکیشن را فراهم میکند. داکر یک پلتفرم کانتینردار کردن است که به منظور سادهسازی و استاندارد کردن انتشار برنامهها در محیطهای مختلف طراحی شده است و در بهکارگیری این سبک از طراحی و مدیریت سرویس بسیار کارآمد است. حجم بالایی از نرمافزارها خلق شدهاند تا روی این اکوسیستم از مدیریت کانتینرهای توزیع یافته ساخته شوند.
داکر و کانتینردار کردن
داکر رایجترین نرمافزار کانتینردار کردن است که امروزه مورد استفاده قرار میگیرد.
با این که سیستمهای کانتینردار کردن دیگری نیز وجود دارند؛ اما داکر موجب شده است که این فرایند ساده شود و با بسیاری از پروژههای متن-باز نیز ارتباط دارد.
در تصویر فوق در یک نمای ساده شده مشاهده میکنید که کانتینرها چگونه با سیستم میزبان ارتباط دارند. کانتینرها اپلیکیشنهای منفرد را ایزوله میکنند و از منابع سیستم عامل که توسط داکر تجرید یافته است بهره میگیرند. در نمای گسترده در سمت راست میتوانید ببینید که کانتینرها میتوانند به صورت لایهبندی شده نیز ساخته شوند به طوری که کانتینرهای مختلف، لایههای زیرین را با هم به اشتراک بگذارند تا استفاده از منابع کاهش یابد.
مزیتهای اصلی داکر به شرح زیر هستند:
- استفاده از منابع سبک – کانتینرها به جای مجازیسازی کل سیستم عامل، در سطح پروسه تجرید مییابند و از کرنل میزبان استفاده میکنند.
- قابلیت حمل و نقل – همه وابستگیهای (dependencies) یک اپلیکیشن کانتینر شده درون کانتینر بستهبندی میشود و بدین ترتیب امکان اجرا روی یک میزبان داکر را مییابد.
- قابلیت پیشبینی – در این روش میزبان اهمیتی نمیدهد که چه چیزی درون کانتینر داکر اجرا میشود و خود کانتینر نیز در مورد میزبانی که روی آن اجرا شده است دغدغهای ندارد. این رابط استاندارد شده است و تعاملها قابل پیشبینی هستند.
به طور معمول وقتی در حال طراحی یک اپلیکیشن یا سرویس برای استفاده از داکر هستید، بهتر است کارکردهای آن را به صورت کانتینرهای منفردی تقسیم کنید. به این روش طراحی، معماری مبتنی بر سرویس گفته میشود. بدین ترتیب امکان مقیاسپذیری یا بهروزرسانی آسان اجزا به صورت منفرد در آینده وجود خواهد داشت. به دست آوردن این انعطافپذیری یکی از اصلیترین دلایل علاقه افراد به توسعه و انتشار داکر است.
کشف سرویس و انبارهای پیکربندی سراسری
کشف سرویس (Service discovery) یکی از اجزای راهبرد کلی به منظور مقیاسپذیر و انعطافپذیر ساختن انتشار کانتینری اپلیکیشنها است.
کشف سرویس به این منظور مورد استفاده قرار میگیرد که کانتینرها بتوانند بدون دخالت مدیران در مورد محیطی که در آن توزیع یافتهاند اطلاعاتی کسب کنند. آنها میتوانند اطلاعات اتصال را در مورد اجزایی که با آنها تعامل دارند به دست بیاورند و همچنین خودشان را ثبت کنند تا ابزارهای دیگر از وجود آنها مطلع شوند. این ابزارها معمولاً به صورت انبارهای پیکربندی توزیع یافته عمومی عمل میکنند که در آنها تنظیمات پیکربندی دلخواه برای سرویسهایی که در زیرساخت عمل میکنند تنظیم میشود.
در تصویر فوق نمونهای از گردش کار را میبینید که در آن یک اپلیکیشن اطلاعات اتصال خود با سیستم کشف سرویس را ثبت میکند. زمانی که این ثبت انجام یافت اپلیکیشنهای دیگر میتوانند به سرویس کشف، کوئری زده و در مورد شیوه اتصال به این اپلیکیشن پرس و جو کنند.
این ابزارها غالباً به صوت انبارهای ساده کلید-مقدار ذخیره میشوند که در میان میزبانها در یک محیط کلاستر شده توزیع یافتهاند. به طور کلی، انبارهای کلید-مقدار یک API به صورت HTTP برای دسترسی و تنظیم این مقادیر ارائه میکنند. برخی معیارهای امنیتی دیگر مانند میزبانهای داکرِ کلاستریِ رمزنگاری شده علاوه بر کارکرد اصلی آنها که ارائه جزییات پیکربندی خود برای کانتینرهای جدید است نیز وجود دارند.
برخی از مسئولیتهای انبارهای کشف سرویس به شرح زیر هست:
- به اپلیکیشن امکان به دست آوردن دادههای مورد نیاز برای اتصال به سرویسهای وابسته را میدهد
- به سرویسها امکان ثبت اطلاعات اتصال خود را به منظور فوق میدهد.
- یک مکان با دسترسی عمومی برای ذخیرهسازی دادههای پیکربندی دلخواه عرضه میکند.
- اطلاعاتی در مورد اعضای کلاستر ذخیره میکند که نرمافزار مدیریت کلاستر به آنها نیاز دارد.
برخی ابزارهای کشف سرویس رایج و پروژههای مرتبط آنها به شرح زیر هستند:
- etcd – انبار کلید-مقدار با توزیع عمومی برای عرضه سرویس
- Consul – انبار کلید-مقدار با توزیع عمومی برای عرضه سرویس
- zookeeper - انبار کلید-مقدار با توزیع عمومی برای عرضه سرویس
- crypt – پروژهای برای رمزنگاری مدخلهای etcd
- Confd - مراقب انبار کلید-مقدار است تا به محض تغییر سرویسها را با مقادیر جدید مجدداً پیکربندی کند.
ابزارهای شبکهبندی
اپلیکیشنهای کانتینرشده معمولاً دارای طراحی مبتنی بر سرویس هستند که در آن تشویق میشود همه کارکردها به اجزای منفرد تقسیم شوند. گرچه این مسئله باعث میشود مدیریت و مقیاسپذیری آسانتر شود؛ اما نیازمند مراقبت بیشتر در خصوص کارکرد و پایداری شبکهبندی بین اجزای مختلف است. داکر خود ساختارهای ابتدایی شبکهبندی مورد نیاز برای ارتباط بین کانتینرها و کانتینر با میزبان را ارائه میکند.
قابلیتهای ذاتی شبکهبندی داکر دو سازوکار برای قلاب کردن کانتینرها به هم مورد استفاده قرار میدهد. نخست این که پورتهای یک کانتینر را باز میکند و به طور اختیاری به سیستم میزبان نگاشت میکند تا بتواند از مسیریابی خارجی استفاده کند. شما میتوانید پورت میزبان را که به آن نگاشت میکنید، انتخاب نمایید یا این که به داکر اجازه دهید یک پورت کمتر استفاده شده را انتخاب کند. این یک روش عمومی برای ایجاد دسترسی یک کانتینر است که در اغلب موارد به خوبی کار میکند.
روش دیگر برای ایجاد دسترسی برای کانتینر از طریق لینکهای «links» کانتینر است. یک کانتینر لینک شده اطلاعات اتصال را از همتایش میگیرد و به آن اجازه میدهد که در صورتی که برای توجه به این متغیرها پیکربندی شده باشد، به طور خودکار به این کانتینر وصل شود. بدین ترتیب امکان تماس بین دو کانتینر روی یک میزبان بدون این که از قبل شماره پورت همدیگر را بدانند یا از محل قرارگیری سرویس مطلع باشند ایجاد میشود.
سطح پایه شبکهبندی برای میزبان منفرد یا محیطهای به شدت مدیریتشده مناسب است. با این وجود اکوسیستم داکر پروژههای متنوعی دارد که روی بسط کارکردهای شبکهبندی موجود برای اپراتورها و توسعهدهندگان متمرکز شده است. برخی قابلیتهای موجود دیگر برای شبکهبندی از طریق ابزارهای اضافی شامل موارد زیر هستند:
- شبکهبندی لایه فوقانی برای سادهسازی و متحد ساختن فضای آدرس در میان چند میزبان
- شبکههای خصوصی مجازی که به منظور ایجاد ارتباط امن بین اجزای مختلف استفاده میشوند.
- انتساب subnet هایی برای میزبان یا اپلیکیشن
- ایجاد رابطهای macvlan برای ارتباط
- پیکربندی آدرسهای MAC سفارشی، گیتویها و موارد دیگر برای کانتینرها
برخی پروژههایی که در بهبود شبکهبندی داکر نقش دارند به شرح زیر هستند:
- Flannel – شبکه لایه فوقانی که به هر میزبان یک subnet میدهد.
- Weave – شبکه لایه فوقانی که همه کانتینرها را روی یک شبکه منفرد ترسیم میکند.
- Pipework – کیت ابزار شبکهبندی پیشرفته برای پیکربندی شبکهبندی پیشرفته دلخواه
زمانبندی، مدیریت کلاستر و هماهنگی
جزء دیگری که هنگام ساخت یک محیط کانتینر کلاستری مورد نیاز است جدول زمانبندی است. جدولهای زمانبندی مسئول آغاز کانتینرها روی میزبانهای موجود هستند.
تصویر فوق یک تصمیم زمانبندی را به صورت ساده نشان میدهد. این درخواست از طریق یک API یا ابزار مدیریتی ارائه میشود. سپس جدول زمانبندی شرایط درخواست را ارزیابی کرده و وضعیت میزبان موجود را نیز بررسی میکند. در این مثال، جدول زمانبندی همه اطلاعات را در مورد چگالی کانتینر از یک انبار داده توزیع یافته / سرویس کشف دریافت میکند و از این رو میتواند اپلیکیشن جدید را روی میزبانی که کمترین ترافیک را دارد قرار دهد.
فرایند انتخاب میزبان یکی از مسئولیتهای اصلی جدول زمانبندی است. به طور معمول کارکردهای این جدول زمانبندی، خودکارسازی فرایند گزینش میزبان است به طوری که مدیر امکان تعیین کانتینرها را با برخی قیدهای ویژه نیز داشته باشد. برخی از این قیود به شرح زیر هستند:
- زمانبندی کانتینر روی میزبانی که یک کانتینر مفروض دیگر قرار دارد
- اطمینان یافتن از این که کانتینر روی همان میزبانی که کانتینر مفروض دیگری قرار دارد زمانبندی نشده است
- قرار دادن کانتینر روی میزبانی با برچسب یا فراداده خاص
- قرار دادن کانتینر روی میزبانی با کمترین ترافیک
- اجرای کانتینر روی هر میزبانی در کلاستر
جدول زمانبندی مسئول بارگذاری کانتینرها روی میزبانهای مرتبط با آغاز کردن، متوقف کردن و مدیریت چرخه عمر فرایند است.
از آنجا که جدول زمانبندی باید با هر یک از میزبانهای موجود در یک گروه تعامل داشته باشد، کارکردهای مدیریت کلاستر نیز معمولاً در آن گنجانده میشوند. این وضعیت باعث میشود که جدول زمانبندی اطلاعاتی در مورد اعضا داشته باشد و برخی از وظایفی که در حیطه اختیارات مدیر است را اجرا کند. هماهنگی در این زمینه به طور کلی به ترکیب جدول زمانبندی کانتینر و مدیریت میزبانها گفته میشود.
برخی پروژههای رایج که به عنوان جدول زمانبندی و ابزار مدیریت عمل میکنند به شرح زیر هستند:
- Fleet – جدول زمانبندی ابزار مدیریت کلاستر
- Marathon – جدول زمانبندی و ابزار مدیریت سرویس
- Swarm – جدول زمانبندی و ابزار مدیریت سرویس
- Mesos – سرویس تجرید میزبان که منابع میزبان را برای جدول زمانبندی متحد میکند.
- Kubernetes – جدول زمانبندی پیشرفته که قابلیت مدیریت گروههای کانتینرها را دارد.
- Compose - ابزار هماهنگی کانتینر برای ایجاد گروههای کانتینری
سخن پایانی
اینک شما باید با کارکرد اصلی اغلب نرمافزارهای مربوط به اکوسیستم داکر آشنا شده باشید. داکر خود همراه با پروژههای پشتیبانش، راهبرد مدیریت، طراحی و توزیع نرمافزار ارائه میدهد که امکان مقیاسپذیری بالایی دارد. با درک و بهرهگیری از قابلیت پروژههای مختلف میتوانید به انتشار اپلیکیشنهای پیچیده بپردازید که آن قدر انعطاف دارند تا الزامات عملیاتی مختلف را پاسخگو باشند.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای مهندسی نرم افزار
- آموزش داکر (Docker) برای توسعه دهندگان
- مجموعه آموزش های شبکه های کامپیوتری
- آموزش نرم افزار مجازی سازی VMware Workstation
- نصب لینوکس روی ویندوز با ماشین مجازی VMware — به زبان ساده
==
بسیار عالی و دستهبندیشده بود. ممنون بابت ترجمه دقیق.