مقایسه Orchestration های Docker
درمفاهیم مربوط به داکر و مایکروسرویس اصطلاحی به نام Container Orchestration Engines (COEs) وجود دارد که یک لایه انتزاع برای pool ها منابع و کانتینر هایی است که روی آن منابع قرار است بالا بیاید. برخی از این ویژگی های high-level عبارت اند از:
-
Container scheduling
شامل انجام کارهایی مانند شروع و متوقف کردن کانتینرها ، توزیع کانتینرها در میان منابع ، بازیابی کانتینرها شکست خورده ، ایجاد تعادل مجدد بر روی کانتینرها از نودهای ناسالم به نودهای سالم و مقیاس بندی برنامه ها از طریق کانتینرها به صورت دستی و یا به صورت خودکار.
-
High availability
اشاه به قابلیت در دسترس بودن یک سیستم ، کانتینر یا ارکستیشن را شامل میشود
-
Health checks
چک وضعیت سلامت برنامه یا کانتینر
-
Service discovery
که برای تعیین محل سزویس های مختلف در یک شبکه بر روی یک معماری محاسباتی توزیع شده استفاده می شود.
-
Load Balancing
توزیع بار درخواست ها چه به صورت داخلی و چه بصورت خارجی
-
اتصال انواع مختلف (شبکه ، محلی) مخازن ذخیره سازی به کانتینرهای یک کلاستر.
مدیریت و تنظیم کانتینر به سرعت در حال تحول است Kubernetes ، Docker Swarm و Apache Mesos سه بازیکن اصلی در این زمینه هستند. Kubernetes و Docker Swarm و Apache Mesos ابزار مهمی هستند که برای استقرار کانتینر ها داخل یک کلاستراستفاده می شوند. اجازه دهید ابتدا به توضیح کوتاه Kubernetes و Docker Swarm و Apache Mesos بپردازیم تا ببینیم تفاوت های بین این دو در چیست.
بررسی کوتاه Kubernetes
کوبرنیتیس حاصل سالها تجربه گوگل در زمینه بار کاری در مقیاس بزرگ تولید است طبق سایت کوبرنیتیس ,کوبرنیتیس یک سیستم منبع باز برای خودکار سازی استقرار ، مقیاس گذاری و مدیریت برنامه های کانتینر شده است. اگر بخواهیم بهزبان ساده کوبرنتیز را توضیح دهیم باید بگوییم کوبرنتیز اجرا و مدیریت کانتینرهای مختلف را در سرورهای متفاوت که در یک پایگاه داده یا چندین پایگاه قرار گرفتهاند را بر عهده میگیرد. در کوبرنتیز کانتینرهای مختلفی که مشترکاً برنامه کاربردی خاصی را شامل میشوند در حالت جداگانه و مستقل تحت عنوان پاد (Pod) دستهبندی خواهند شد. این کار فرآیند مدیریت و شناسایی آنها را سادهتر میکند.از ویژگی های بارز K8s می توان به auto-scaling,load-balancing,volume management, secret management و web UI اشاره کرد.این ویژگی ها باعث میشود این نوع نسبت به همتاهای خودش کمتر وابسته به ابزار های third-party باشد.
تو ی مقاله جدا مفصل راجب این kubernetes صحبت می کنیم.
بررسی کوتاه Docker Swarm
Docker swarm نوعی تنظیم کننده کانتینر داکر است.از API و شبکه استاندارد داکر استفاده میکند. Docker Swarm به گونه ای طراحی شده است که در حدود چهار اصل اصلی کار می کند:
-
سادگی کار کردن و در عین حال قدرتمند بودن
-
معماری انعطاف پذیر و مقاوم از ابتدای پیاده سازی
-
امنیت خوب که توسط گواهی های معتبری که به صورت خودکار تولید میشود
-
سازگاری با اجزای موجود
از ویژگی های بارز swarm می توان به YAML-based deployment ,auto-healing of clusters, overlay networks with DNS , high-availability , network security using TLS اشاره کرد. مواردی مانند native auto-scaling و external load balancing همچنان پشتیبانی نمیشود
بررسی کوتاه Apache Mesos
یک مدیر خوشه است که وظیفه ارائه منابع مفید ایزوله و اشتراک آنها را دربین برنامه های توزیع شده یا فریم ورک ها را به عهده دارد . این برنامه متن باز در دانشگاه کالیفرنیای برکلی استارت خورده است . این برنامه بین لایه کاربردی و سیستم عامل می نشیند و کمک می کند استفاده و اجرای برنامه ها در محیط های خوشه ای مقیاس بالا آسان تر و موثرتر انجام پذیرد . با کمک آن می توانیم برنامه های زیادی روی گره های زیادی به صورت پویا اجرا کنیم . کاربران مشهور Mesos شامل Twitter ، Airbnb ، MediaCrossing ، Xogito هستند .
کلان داده مجموعه بزرگی از منابع ناهمگون را ایجاد می کند . Mesos یک مکانیزم زمان بندی دوسطحی توزیع شده به نام پیشنهاد منابع معرفی می کند . Mesos تعداد منابع هر فریم ورک را مشخص می کند درحالیکه فریم ورک تصمیم می گیرد چه منابعی را بپذیرد و چه محاسباتی را روی آنها به اجرا درآورد . این یک لایه نازک اشتراک منبع است که امکان اشتراک ریزدانه ها سراسر فریم ورک های رایانشی خوشه ای متنوع با دادن یک اینترفیس رایج برای دسترسی به منابع خوشه ، فراهم می کند . هدف ، اجرای سیستم های توزیع شده متعدد برای گره های اشتراکی به منظور افزایش بهره وری منابع است . فریم ورک های متعددی از جمله Hadoop ، Memecached ، Ruby on Rails ، Storm ، JBoss Data Grid ، MPI ، Spark و Node.js و وب سرورها ، دیتابیس ها و سرورهای نرم افزاری مختلفی را می توان روی Mesos اجرا کرد
مقایسه Kubernetes و Docker Swarm
اگرچه هر دو ابزار عملکردهای یکسانی را ارائه می دهند ، اما بین نحوه عملکرد این دو تفاوت اساسی وجود دارد. در زیر برخی از قابل توجه ترین موارد ذکر شده:
تعریف برنامه
در Kubernetes ، یک برنامه با استفاده از ترکیبی از پاد ، دیپلویمنت و سرویس (ماکروسرویس) قابل اجرا است.
در حالی که ، در Docker Swarm ، برنامه ها می توانند به صورت سرویس (ماکروسرویس) در یک کلاستر Swarm مستقر شوند.از فایلهای YAML می توان برای تعیین چند کانتینر استفاده کرد.علاوه بر این ، Docker Compose می تواند برنامه را مستقر کند.
نصب و راه اندازی
در Kubernetes ، نصب به صورت دستی است و برنامه ریزی جدی برای ساخت و اجرای Kubernetes ضروری است. دستورالعمل نصب از سیستم عامل تا ارائه دهنده سیستم متفاوت است.
برای پیکربندی کلاستر نیاز هست ادرس های Ip یک node و اینکه چه قوانینی برای نود نیاز هست را باید بدانیم.
در حالیکه نصب Docker Swarm نسبت به Kubernetes ساده تر است.با داکر ، تنها یک مجموعه ابزار برای یادگیری ساختن محیط و پیکربندی مورد نیاز است. Docker Swarm همچنین با اجازه دادن به هر نود جدید ، می تواند انعطاف پذیری را با استفاده از یک کلاستر موجود به عنوان مدیر یا کارگر فراهم کند.
کار بر روی دو سیستم
برای اجرای Kubernetes در بالای داکر نیاز به دانستن CLI دارد. شما باید دستورات داکر را بدانید تا در یک ساختار حرکت کند و سپس زیرساختهای مشترک زبان Kubernetes را برای اجرای آن برنامه ها تکمیل کند.
از آنجا که Docker Swarm ابزاری از داکر است ، از همان زبان مشترک برای حرکت در یک ساختار استفاده می شود. این قابلیت تغییر و سرعت در این ابزار را فراهم می کند و به داکر امکان استفاده قابل توجهی می بخشد
ورود به سیستم و نظارت
kubernetes از نسخه های مختلف ورود به سیستم و نظارت هنگام استقرار سرویس در کلاستر پشتیبانی می کند:
(Elasticsearch/Kibana (ELK
Heapster/Grafana
Sysdig cloud
Docker Swarm فقط برای نظارت بر برنامه های شخص ثالث پشتیبانی می شود. توصیه می شود از داکر با Reimann برای نظارت استفاده کنید ، اما از آنجا که Docker Swarm دارای یک API باز است ، ارتباط با تعداد زیادی برنامه را آسان تر می کند.
مقیاس پذیری
Kubernetes بیشترین فریم ورک برای سیستم های توزیع شده دارد. این یک سیستم پیچیده است زیرا مجموعه ای از برنامه های یکپارچه و تضمین های قوی در مورد وضعیت کلاستر را ارائه می دهد ، که استقرار و مقیاس بندی پاد را کند می کند.
در مقایسه با کوبرنیتیس Docker Swarm می تواند کانتینر ها را سریعتر مستقر کند.
در دسترس بودن بالا
در Kubernetes ، تمام پاد ها در بین نود ها توزیع شده و با تحمل خرابی برنامه ، دسترسی بالایی را فراهم می کند. در Kubernetes ، خدمات متعادل کننده بار ، پاد های ناسالم را ردیابی کرده و آنها را از بین می برد.
Docker Swarm همچنین امکان ارائه خدمات در نودهای Swarm را در اختیار شما قرار می دهد. در Docker Swarm ، نود های مدیر مسئول کل کلاستر هستند و منابع نود های ورکر را مدیریت می کنند.
شبکه سازی
شبکه Kubernetes مسطح است ، زیرا همه پاد ها را قادر می سازد با یکدیگر ارتباط برقرار کنند. در Kubernetes ، این مدل به دو CIDR نیاز دارد. یکی برای آی پی دادن به پاد ها و دیگری برای سرویس ها.
در Docker Swarm ، نودی که به یک کلاستر می پیوندد ، شبکه ای از خدمات را پوشش می دهد که همه میزبان ها در Swarm را در بر می گیرد و فقط یک ارتباط داکر برای کانتینر دارد. در Docker Swarm ، کاربران گزینه ایجاد رمزگذاری داده های کانتینر در هنگام ایجاد یک شبکه به تنهایی را دارند.
مزایا و اشکالات Kubernetes
مزایای Kubernetes
-
Kubernetes توسط بنیاد رایانش ابری Cloud (CNCF) پشتیبانی می شود.
-
Kubernetes یک جامعه بسیار چشمگیر در بین کانتینر است. بیش از ۵۰،۰۰۰ تعهد و ۱۲۰۰ همکار.
-
Kubernetes یک ابزار منبع باز و ماژولار است که با هر سیستم عامل کار می کند.
-
Kubernetes سازماندهی خدمات آسان برای پاد ها را فراهم می کند
اشکالات Kubernetes
هنگام انجام این کار توسط خودتان نصب Kubernetes با منحنی یادگیری شیب دار می تواند بسیار پیچیده باشد. گزینه ای برای حل این مسئله ، انتخاب یک سرویس مدیریتی مانند Kubernetes-as-a-service است.
در Kubernetes ، لازم است که مجموعه ای از ابزارهای مجزا برای مدیریت ، از جمله kubectl CLI وجود داشته باشد.
مزایا و اشکالات Swarm Docker
مزایای Darmer Swarm
-
Docker Swarm داری نصب سریع و آسان است
-
Docker Swarm یک نصب سبک است. استقرار آن ساده تر است و حالت Swarm در موتور داکر گنجانده شده است.
-
Docker Swarm دارای منحنی یادگیری آسان تر است.
-
Docker Swarm هموار با Docker Compose و Docker CLI ادغام می شود. به این دلیل که اینها ابزار بومی داکر هستند. بسیاری از دستورات Docker CLI با Swarm کار خواهند کرد.
اشکالاتی از Docker Swarm
-
Docker Swarm عملکرد محدودی را ارائه می دهد.
-
Docker Swarm تحمل خطای محدود دارد.
-
Docker Swarm در مقایسه با جامعه Kubernetes از جامعه و پروژه کمتری برخوردار است
-
در Docker Swarm ، سرویس ها به صورت دستی مقیاس پذیر می باشند.
نظر خودم در مورد این سه عزیز : مقایسه این دو (swarm, k8s) دقیقاً آسون نیست چراکه Docker Swarm یک راه حل ساده و آسان برای کار با کلاسترهه. Docker Swarm در محیطهایی که سادگی و توسعه سریع مورد علاقه است ، ارجح است. در حالی که Kubernetes برای محیط هایی که در آن کلاستر های متوسط تا بزرگ کاربردهای پیچیده ای دارند مناسب است. نکته ای هست اینه که هم k8s و هم swarm از سرویس هایی با چندین کانتینر و پیاده سازی روی کلاستر فیزیکی یا مجازی اند و شامل مکانیزم های discovery هم هستند در مقابل این دو apache mesos برای مدیریت دیتا سنتر ها و نصب برنامه های پیچیده استفاده میشود. از لحاظ آسانی در استفاده k8s در ابتدا می تواند گیج کننده باشد البته نسبت به swarm و همچنین پیکربندی بیشتری رو هم شامل میشه. برای شروع در حیط های کلاستر داکر swarm می تونه انتخاب خوبی باشه البته نه برای پروداکت برنامه های اصلی ، برای تست برنامه ها و داشتن کلاستر در یک محیط کوچک بسیار مناسبه عجیبترین پیکربندی رو apache mesos داره چراکه برای تبدیل شدن به یک ابزار مدیر ارکستریشن داکر به فریمورک Marathon نیاز داره. mesos به کمک Marathon می تونه صدها یا هزاران نود رو مدیرت کنه ولی طبیعتا پیکربندی پیچیده ای دارد از لحاظ ویژگی و قابلیت، k8s حرف اول رو میزنه و بیشتر ویژگی هاش به صورت پیشفرض درون خودش هست و نیازی به third-party apps نداره. swarm فعلا از این لحاظ قابل مقایسه با اون دوتا دیگه نیست و برخی ویژگی های اتوماتیک سازی و auto-scaling رو نداره. به عنوان ابزار مدیریت کلاستر mesos نسبت به k8s ابزار های بیشتری رو ارایه میده ولی مجدد پیکربندی سخت تری داره. اساس انتخاب شما بین این ۳ ابزار می تونه بستگی به پروژتون داشته باشه مثلا برای سطح ورودی و پروژه های کوچیک و تست swarm میتونه خیلی خوب باشه برای محیط های enterprise تر k8s می تونه گزینه مناسبی باشه و برای محیط های صنعتی تر و کلاستر های خیلی بزرگ apache mesos می تونه بخوبی عمل کنه ولی به خاطر پیکربندیش اندک شرکت های بزرگی سمتش میرن
تعاریف کوتاه و زبان اصلی:
Swarm
Swarm acts as the Docker API, so all of the tools you’ve already been using with Docker can utilize Swarm to scale throughout a number of different hosts.Easy to integrate and set up, flexible API, but limited customization.Great value and easily scalable for small to medium systems.
Kubernetes
Kubernetes has the full power of Google behind it, managing containerized applications across many hosts. It has many tools and resources to help you deploy, scale, and maintain your applications. Highly versatile, large open-source dev community, but more expensive. Best for medium-scale, highly redundant systems, but requires a larger IT staff.
Mesos
mesos is a bit different from the other services mentioned in this article. It’s an open-source cluster manager that focuses on isolating resources and sharing across distributed applications, networks, or frameworks. Best for large systems and designed for maximum redundancy. The most stable platform, but overly complex for small-scale systems under 10-20 nodes.