ارکستراسیون کانتینر (container orchestration) چیست؟
از زمان داکر در سال 2013، کانتینرها به یک ستون اصلی در توسعه برنامه تبدیل شدهاند. سرعت و بهره وری منابع آنها را برای یک محیط DevOps ایده آل میکند زیرا به توسعه دهندگان اجازه میدهد تا نرم افزار را سریعتر و با قابلیت اطمینان بیشتر اجرا کنند، مهم نیست که در کجا مستقر است. با کانتینریسازی، امکان جابجایی و مقیاسبندی چندین برنامه در ابرها و دیتاسنتر وجود دارد.
با این حال، این مقیاس پذیری در نهایت میتواند به یک چالش عملیاتی تبدیل شود. در سناریویی که یک شرکت وظیفه اجرای کارآمد چندین کانتینر با چندین اپلیکیشن را بر عهده دارد، هماهنگی کانتینر نه فقط یک گزینه، بلکه یک ضرورت است.
ارکستراسیون کانتینر چیست؟
ارکستراسیون کانتینر فرآیند خودکار مدیریت، مقیاسبندی و نگهداری برنامههای کانتینری است. کانتینرها واحدهای اجرایی نرم افزاری هستند که حاوی کد برنامه، کتابخانهها و وابستگیها هستند تا برنامه در هر مکانی قابل اجرا باشد. ابزارهای ارکستراسیون کانتینر، مدیریت چندین کار را که تیمهای نرم افزاری در چرخه حیات کانتینر با آنها مواجه میشوند، خودکار میکنند، از جمله موارد زیر:
- گسترش (Deployment)
- مقیاس بندی و لود بالانسینگ / مسیریابی ترافیک
- شبکه سازی (Networking)
- بینش(Insights)
- تامین (Provisioning)
- پیکربندی و زمان بندی (Configuration and scheduling)
- تخصیص منابع (Allocation of resources)
- انتقال به میزبان فیزیکی (Moving to physical hosts)
- کشف سرویس (Service discovery)
- نظارت بر سلامت (Health monitoring)
- مدیریت کلاستر (Cluster management)
ارکستراسیون کانتینر چگونه کار میکند؟
بسته به ابزار انتخابی، متدولوژیهای مختلفی وجود دارد که میتواند در ارکستراسیون کانتینر اعمال شود. ابزارهای ارکستراسیون کانتینر معمولا با فایلهای YAML یا JSON که پیکربندی برنامه را توصیف میکنند، ارتباط برقرار مینمایند. فایلهای پیکربندی ابزار ارکستراسیون کانتینر را در مورد نحوه و مکان بازیابی ایمیجهای کانتینر، ایجاد شبکه بین کانتینرها، ذخیره دادههای لاگ و ماونت storage volumeها راهنمایی میکند.
ابزار ارکستراسیون کانتینر همچنین استقرار کانتینرها را در کلاسترها زمان بندی نموده و به طور خودکار مناسبترین میزبان را برای کانتینر تعیین میکند. پس از تعیین میزبان، ابزار ارکستراسیون کانتینر چرخه حیات کانتینر را با استفاده از مشخصات از پیش تعریف شده در فایل definition کانتینر مدیریت میکند.
ابزارهای ارکستراسیون کانتینر را میتوان در هر محیطی که کانتینرها را اجرا میکند استفاده کرد. پلتفرمهای متعددی از ارکستراسیون کانتینر پشتیبانی میکنند و از جمله آنها میتوان به Kubernetes، Docker Swarm، Amazon Elastic Container Service (ECS) و Apache Mesos اشاره کرد.
چگونه ارکستراسیون کانتینر با Kubernetes کار میکند؟
Kubernetes یک پلتفرم ارکستراسیون کانتینر متنباز است که استاندارد صنعتی در نظر گرفته میشود. راهکار پشتیبانی شده توسط گوگل به توسعه دهندگان و اپراتورها اجازه میدهد تا خدمات ابری را به صورت پلتفرم به عنوان سرویس (PaaS) یا زیرساخت به عنوان سرویس (IaaS) ارائه دهند. این یک راهکار بسیار اعلامی (highly declarative) است که به توسعه دهندگان این امکان را میدهد تا وضعیت مطلوب محیط کانتینر خود را از طریق فایلهای YAML اعلام کنند. سپس Kubernetes آن حالت مطلوب را ایجاد و حفظ میکند.
کامپوننتهای اصلی معماری Kubernetes به شرح زیر است:
Nodes (گرهها)
گره یک ماشین کارگر در Kubernetes است که بسته به کلاستر ممکن است مجازی یا فیزیکی باشد. گرهها وظایف محول شده از Master Node را دریافت و انجام میدهند. آنها همچنین حاوی سرویسهای لازم برای اجرای پادها (pods) هستند. هر گره از یک Kubelet ، یک Container Runtime و یک Kube-Proxy تشکیل شده است.
Master Node (گره اصلی)
این گره تمام گرههای کارگر(worker) را کنترل میکند و منشا همه وظایف تعیینشده است. این کار را از طریق صفحه کنترل (control pane) انجام میدهد، که لایه هماهنگ سازی است که API و اینترفیسها را برای تعریف، استقرار و مدیریت چرخه حیات کانتینرها در معرض دید قرار می دهد.
Cluster (کلاستر)
یک کلاستر نشان دهنده گره اصلی و چندین گره کارگر است. کلاسترها این ماشینها را در یک واحد ترکیب میکنند که برنامههای کانتینری در آن مستقر میشوند. سپس حجم کار(workload) به گرههای مختلف توزیع میشود و با افزودن یا حذف گرهها، تنظیمات را انجام میدهند.
Pods (پاد)
پادها کوچکترین واحدهای محاسباتی قابل استقرار هستند که می توانند در Kubernetes ایجاد و مدیریت شوند. هر Pod مجموعهای از کانتینرها را نشان میدهد که با هم بسته بندی شده و در یک گره مستقر شدهاند.
Deployments (استقرارها)
استقرار بهروزرسانیهای اعلامی را برای Pods و ReplicaSets فراهم میکند که به کاربران امکان میدهد تعیین کنند که چه تعداد کپی از یک Pod میخواهند به طور همزمان اجرا شوند.
چگونه ارکستراسیون کانتینر با Docker کار میکند؟
Docker، یک پلتفرم متنباز و یک ابزار کاملا یکپارچه برای هماهنگی کانتینر به نام Docker Swarm را ارائه میدهد. میتواند برنامهها را بهعنوان کانتینر بستهبندی و اجرا کند، ایمیجهای کانتینر را از میزبانهای دیگر بیابد و کانتینرها را مستقر کند که سادهتر و محدودتر از Kubernetes است، البته Docker برای سازمانهایی که میخواهند به ویژگی های گستردهتر Kubernetes دسترسی داشته باشند، گزینه ادغام با Kubernetes را فراهم میکند.
کامپوننتهای اصلی معماری Docker Swarm به شرح زیر است:
Swarm (سوآرم)
سوآرم مجموعهای از داکر هاستها است که در swarm mode اجرا میشوند و عضویت(membership) و نمایندگی(delegat) را مدیریت میکنند و در عین حال سرویسهای Swarm را هم اجرا میکنند.
Node (گره)
گره، نمونه(instance) داکر انجین (docker engine) است که در یک Swarm گنجانده شده است و میتواند یک گره مدیر (manager node) یا یک گره کارگر(worker node) باشد. گره مدیر واحدهایی از کار به نام تسک (task) را به گره های کارگر ارسال میکند. همچنین مسئول تمام وظایف ارکستراسیون و مدیریت کانتینر مانند نگهداری حالت کلاستر و زمانبندی سرویسها است. گره های کارگر وظایف را دریافت و اجرا میکنند.
Services and Tasks (سرویسها و وظایف)
سرویس، وظیفهای(task) است که باید بر روی گرهها اجرا شود و تعریف می کند که از کدام ایمیج کانتینر استفاده شود و کدام دستورها در کانتینرهای فعال، اجرا شوند.
تسک (task)، یک کانتینر را در کنار دستورات برای اجرا در داخل کانتینر حمل میکند. هنگامی که یک کار به یک گره اختصاص داده میشود، نمیتواند به گره دیگری منتقل شود.
چگونه ارکستراسیون کانتینر با پلتفرمهای دیگر کار میکند؟
اگر چه Docker و Kubernetes در زمینه ارکستراسیون کانتینر پیشرو هستند، اما پلتفرمهای دیگر از نرم افزار متنباز خود برای ارائه رقابت استفاده میکنند.
Red Hat OpenShift یک پلتفرم ترکیبی درجه یک سازمانی متنباز است که عملکردهای Kubernetes را در اختیار شرکتهایی قرار میدهد که به ارکستراسیون کانتینر مدیریت شده نیاز دارند. فریمورک آن بر روی یک سیستم عامل لینوکس ساخته شده که به کاربران اجازه میدهد چرخه عمر کانتینرهای خود را خودکار کنند.
Google Kubernetes Engine توسط Kubernetes ارائه میشود و به کاربران امکان میدهد به راحتی کانتینرهای Docker را در Google Cloud استقرار، مدیریت و مقیاس کنند.
پلتفرمهای دیگری مانند Apache Mesos و Amazon ECS ابزارهای کانتینری خود را توسعه دادهاند که به کاربران اجازه میدهد تا کانتینرها را اجرا و در عین حال امنیت و مقیاسپذیری بالا را تضمین کنند.
نمونههایی از ارکستراسیون کانتینر
ارکستراسیون کانتینر چندین مزیت را برای سازمانها فراهم میکند، اما این مزایا در موقعیتهای کاری در دنیای واقعی چگونه به نظر میرسند؟ ما چند نمونه ارکستراسیون رایج را در زیر آورده ایم:
ابتدا یک پلتفرم تجارت الکترونیکی بزرگ را در نظر بگیرید که در طول فصل تعطیلات ترافیک سنگینی را تجربه میکند. در گذشته، آن پلتفرم باید به صورت دستی سرورهای اضافی را برای مدیریت افزایش بار تعطیلات، که فرآیندی زمانبر و مستعد خطا است، ارائه میکرد. با ارکستراسیون کانتینر، پلتفرم میتواند از ویژگی مقیاسبندی خودکار استفاده کند که بهطور خودکار کانتینرهای اضافی را با افزایش ترافیک ارائه میکند و با کاهش ترافیک کاهش مییابد. به این ترتیب، افزایش ترافیک برای تخفیفات میتواند به محض خرید، بازگشت و تعویض اقلام خود، کاهش یابد.
دوم، شرکتی را در نظر بگیرید که دارای یک وبسایت، یک اپلیکیشن موبایل و یک سیستم پردازش back-end است که همگی روی سرورهای مختلف در محیطهای گوناگون اجرا میشوند. در گذشته، مدیریت این برنامهها و محیطهای مختلف نیازمند تلاش و هماهنگی دستی زیادی بود. با ارکستراسیون کانتینر، این شرکت میتواند از یک پلتفرم واحد برای مدیریت همه کانتینرها و محیطهای خود استفاده کند و به آنها اجازه میدهد به راحتی برنامههای خود را در محیطهای مختلف استقرار، مدیریت و مقیاسبندی کنند که به شرکت اجازه میدهد تا به راحتی فناوریهای جدید را اتخاذ و روند توسعه خود را سادهتر کند.
بهترین ابزار برای ارکستراسیون کانتینر چیست؟
هنگام انتخاب بهترین ابزار ارکستراسیون کانتینر برای یک سازمان، چندین فاکتور باید در نظر گرفته شود. این عوامل در ابزارهای مختلف متفاوت است. به عنوان مثال، با ابزاری مانند Mesos، تجربه فنی تیم نرم افزار باید در نظر گرفته شود زیرا پیچیدهتر از ابزارهای سادهای مانند Swarm است. سازمانها همچنین باید تعداد کانتینرهایی را که قرار است مستقر شوند و همچنین سرعت توسعه برنامه و الزامات مقیاس بندی را در نظر بگیرند.
با ابزارهای مناسب و مدیریت منابع مناسب، ارکستراسیون کانتینر میتواند یک رویکرد ارزشمند برای سازمانهایی باشد که به دنبال دستیابی به بهره وری و مقیاس پذیری بهبود یافته هستند