Container , Docker , Kubernetes
Container:
کانتینر نرم افزار مجازی سازی در سطح سیستم عامل است. یک بسته نرم افزاری است و حاوی هرآن چیزی است که نرم افزار برای اجرا به آن نیاز دارد مثلا برنامه قابل اجرا که تنظیمات،کتابخانه ها وsystem tools ، کد و زمان اجرا، را شامل میشود. بنابراین به سرعت ازیک محیط محاسباتی به محیط دیگر اجرا میشود. کانتینر یک واحد اجرایی از نرم افزار است که در آن کد برنامه ، همراه با کتابخانه ها و وابستگی ها ، به روش های معمول بسته بندی میشود تا بتوان آن را در هر نقطه از دسکتاپ ، بخشی از IT (به صورت سنتی) یا در محیط ابر ، اجرا کرد.کانتینرها از نوعی مجازی سازی سیستم عامل بهره مند می شوند که به چندین برنامه اجازه می دهد با جدا کردن فرآیندها و کنترل میزان پردازنده ، حافظه و هارد دیسکی که این فرایندها به آن دسترسی دارند ، سیستم عامل را به اشتراک بگذارند.22
Container ها به مشتریان این قابلیت را میدهند، تا برنامهها و وابستگیهای آنها را به صورت یک فرآیند ایزوله شده در سیستم اجرا کنند. تمام اجزای ضروری مورد نیاز یک برنامه به صورت یک image بسته بندی میشود Image . مربوطه در یک محیط ایزوله اجرا شده و فضای حافظه، CPU و فضای ذخیره سازی خود را با سیستم عامل به اشتراک نخواهد گذاشت. این عمل موجب میشود که فرآیندهای موجود درContainer، قادر به مشاهده سایر فرآیندها در خارج از آن کانتینر نخواهند شد. کانتینرها قابل حمل و چند منظوره هستند ، می توانند برنامه های نوشته شده به هر زبانی را اجرا کنند و با هر سیستم عاملی سازگار هستند .
مقایسه container و ماشین مجازی :
در زیرساخت های سنتی ، برنامه ها بر روی یک سرور فیزیکی اجرا می شوند و تمام منابع موردنیاز را از ابتدا دریافت میکنند. تفاوت container با ماشین مجازی در این است که در ماشین مجازی برای اجرای اپلیکیشن و برنامه های مختلفی که بخواهیم به صورت ایزوله و مجزا از هم کار کنند باید VM های مختلف ساخته شود که همین موضوع بار پردازشی و هدر رفت منابع سیستمی را روی سرور به همراه دارد. کانتینرها این امکان را برای شما فراهم می کنند که چندین برنامه را در یک سرور اجرا کنید، بدون اینکه نیاز باشد از منابع دیگران استفاده کنید و در واقع دیگرنیاز نیست مشابه ماشین مجازی، یک سرور را برای هر برنامه اختصاص دهید که منجر به اتلاف منابع شما شود. 22
ماشین های مجازی از منابع بهتری استفاده می کنند و مقیاس پذیری( scalable بودن) آنها بسیار آسان تر و مقرون به صرفه تر از زیرساخت های سنتی است. آنها یکبار مصرف هستند و وقتی دیگر نیازی به اجرای برنامه نداریم ، میتوانیم VM را down کنیم. 22کانتینرها علاوه بر یک سخت افزار مجازی مشترک ، یک هسته سیستم عامل مجازی نیز دارند. کانتینرها همان جداسازی و مقیاس پذیری ماشین های مجازی را دارند ، اما نسبت به ماشین های مجازی وزن کمتری دارند (یعنی فضای کمتری را اشغال میکنند)..کانتینرها به راحتی در محیط دسکتاپ ، مرکز داده و فضای ابری قابل حمل هستند و برای تمرینات توسعه Agile و DevOps بسیار مناسب هستند.کامپیوتری که چهار ماشین مجازی را اجرا می کند منابع بیشتری را برای هر نمونه از سیستم عامل مورد استفاده خود استفاده می کند ، در حالی که کامپیوتری با containerization engine نصب شده می تواند به همان تعداد برنامه در یک سیستم عامل واحد اجرا شود. در نتیجه ، چندین کانتینر می توانند با استفاده از همان ظرفیت محاسباتی یک ماشین مجازی کار کنند.
کانتینرها فقط یک نمونه از کپسول سازی (Encapsulation (networking))هستند که داده ها و روش ها در یک بسته واحد قرار می گیرند.کپسوله سازی به توسعه دهندگان این امکان را می دهد تا داده ها و روش ها را با هم جمع کنند ، اما همچنین می تواند برای پنهان کردن داده های حساسی که نباید در معرض استفاده کاربران قرار گیرند، استفاده شود. 23
از ویژگی های کانتینرها می توان به موارد زیر اشاره کرد:
- Increased productivity
- Less overhead
- Increased productivity
- Increased portability
- Performance
- Efficiency
- Better application
شکل 1-1
Docker:
تعریف داکر: Docker یک پلتفرم (بستر) باز برای توسعه ( develop)، حمل و نقل (transport) و اجرای(executing) برنامه ها است. Docker این امکان رابرای ما فراهم می کند که برنامه های خود را از زیرساخت جدا کنیم تا بتوانیم سریع نرم افزار را تحویل دهیم. با استفاده از Docker ، می توانیم زیرساخت خود را به همان شیوه هایی که برنامه های خود را مدیریت می کنیم ، مدیریت کنیم. با بهره گیری از روش های Docker برای ارسال ، آزمایش و استقرار سریع کد ، می توانید تاخیر بین نوشتن کد و اجرای آن در تولید را به میزان قابل توجهی کاهش دهیم.
Docker ابزار و بستری را برای مدیریت چرخه عمر کانتینر ما فراهم می کند: به این صورت که برنامه و اجزای پشتیبانی کننده آن را با استفاده ازکانتینرمی توانیم توسعه دهیم و کانتینر ما به واحدی برای توزیع و تست برنامه مان تبدیل می شود. 2
داکر امکانی را فراهم آورده است که پروسهها و نرمافزارها به صورت مجزا در محیط کاملا ایزولهای بر روی کرنل لینوکس راهاندازی شوند که به این محیط ایزوله، کانتینر میگویند. داکر وظیفه مدیریت کانتینرها را به عهده دارد. داکر امروزه یکی از بهترین ابزارها برای توسعه در صنعت است و محبوبیت آن به طور قابل توجهی در حال افزایش است واین مسئله بیشتر برای شرکتهای بزرگتر مناسب است و به عنوان یک پلتفرم open source انعطاف پذیر ، می تواند برای توسعه برنامه های متنوع استفاده شود.
- Docker یک پروژه منبع باز برای خودکارسازی استقرار برنامه ها به عنوان کانتینرهای قابل حمل و خودکفا است که می توانند روی ابر یا در محل برنامه، اجرا شود.24
- Docker بستری جهت ساخت ، اجرا و اشتراک برنامه ها با کانتینرها ، برای توسعه دهندگان و sysadmin ها فراهم میکند.
به استفاده از کانتینرها برای استقرار(deploy کردن) برنامه ها ، کانتینر سازی (Containerization) گفته می شود. Containerization به دلیل ویژگی های :
- Flexibility: انعطاف پذیری یکی از مزیت های اصلی استفاده از Docker است. Docker به ما این امکان را می دهد image هایی را که می توانند در چندین سرور مستقر شوند ، بسازیم ، تست کنیم و release سازیم. حتی اگر یک وصله امنیتی جدید در دسترس باشد ، روند کار به همان شکل باقی می ماند. علاوه بر این ، Docker به ما امکان می دهد سرویس ها یا برنامه ها را سریعاً شروع و متوقف کنیم ، که به ویژه در محیط ابر بسیار مفید است. 47,48
- Cost: استفاده از داکر موجب کاهش هزینه می شود.50
- portable : قابلیت حمل به معنای توانایی انتقال برنامه است. این که بتوانیم آن را از محیط میزبان به محیط دیگر منتقل کنیم. محیط میزبان جدید می تواند سیستم عامل متفاوتی باشد(مثلا انتقال از لینوکس به ویندوز ) و یا مثلا نوع متفاوتی از سخت افزار سیستم عامل(مثلاً از یک دستگاه 32 بیتی به 64 بیتی یا از یک SPARC به یک معماری x86 برویم)., 4649
- Loosely coupled: منظور از loosely coupled نوعی سیستم multiprocessing می باشد که دارای حافظه توزیع شده (distributed memory) می باشد. 30
- Scalability: درصورت نیاز، می توانیم به سرعت کانتینر جدیدی ایجاد کنیم و در هنگام استفاده از چندین کانتینر می توان از طیف وسیعی از آپشن های مدیریت کانتینر استفاده کنیم. 47
- Security: از نظر امنیتی ، Docker اطمینان می دهد که برنامه هایی که روی کانتینرها کار می کنند کاملاً از یکدیگر تفکیک شده و جدا شده اند و به ما امکان کنترل کامل جریان و مدیریت ترافیک را می دهد. 2,46,51
- Isolated Environment: کانتینرهای داکر، برنامه ها را نه تنها از یکدیگر ، بلکه از سیستم زیرین جدا می کنند و به راحتی می توان نحوه استفاده یک برنامه کانتینر دار از منابع سیستم CPU) ، GPU ، حافظه، I /O ، شبکه و …) را تعیین کرد. همچنین اطمینان از جدا بودن داده ها و کد را آسان تر می کند.47
Docker Desktop یک برنامه نصب آسان برای محیط Mac یا Windows است که به شما امکان می دهد در عرض چند دقیقه کد نویسی و containerizing را شروع کنید Docker Desktop .شامل همه مواردی است که برای ساخت ، اجرا و اشتراک برنامه های کانتینر دار مستقیم از ماشین خود نیاز دارید.46
شکل 2-1 24
برطبق شکل 2-1 docker container ها می توانند مانند Azure در هر مکان ، در مرکز داده مشتری ، در یک ارائه دهنده خدمات خارجی یا در ابر ، کار کنند. Docker image containers ها می توانند بطور طبیعی در لینوکس و ویندوز اجرا شوند. با این حال ، image های ویندوز فقط بر روی هاستهای ویندوز و image های لینوکس درهاست های لینوکس و هاستهای ویندوز قابل اجرا هستند 24.
نرم افزاری که میزبان کانتینرها میباشد، Docker Engine نامیده میشود. داکر یک API سطح بالا را برای تهیه کانتینرهای سبک که فرآیندها را به صورت جداگانه اجرا می کند ، پیاده سازی می نماید.25در ادامه به معرفی اجزای داکر می پردازیم:
Components:
- Software: داکر دیمن که dockerd نامیده می شود ، فرایندی مداوم است که کانتینر داکر و object های کانتینر را مدیریت می کند. daemon به درخواست های ارسال شده از طریق Docker Engine API گوش می دهد. Docker client یک رابط خط فرمان فراهم می کند که به کاربران امکان می دهد تا با daemons Docker تعامل داشته باشند.
- Objects :Docker objects موجودیت های (entities) مختلفی هستند که برای assemble کردن یک برنامه در Docker استفاده می شوند. کلاسهای اصلی Docker objects : کانتینرها ، imageها، و service ها هستند.
- Registry: یک Docker registry مخزنی برای Docker image هاست. سرویس دهنده های Docker برای بارگیری (“pull”)image ها یا بارگذاری images (“push”)که ساخته اند ، به registery متصل می شوند. Registery ها می توانند private یا public باشند. دو registry اصلی عمومی Docker Hub و Docker Cloud می باشند. [45],[2],[25]
- Docker image: یک الگوی فقط خواندنی است که برای ساخت container ها استفاده می شود. از image ها برای ذخیره و جابه جایی برنامه های کاربردی استفاده می شود. یک سرویس Docker به شما اجازه می دهد تا کانتینرها در چندین Docker daemon مقیاس بندی شوند که به عنوان swarm شناخته می شود ، مجموعه ای از daemon های همکاری کننده که از طریق Docker API ارتباط برقرار می کنند. [2],[25]
Tools:
- Docker Compose: این ابزار به کاربران این امکان را می دهد تا همزمان روی چندین کانتینر دستوراتی را اجرا کنند .
- Docker Swarm: قابلیت (clustering)خوشه بندی کانتینرهای Docker را به صورت بومی (native) فراهم می کند و به کاربران امکان می دهد کانتینرهای Swarm را اجرا کنند.[45]
جدول زیر مقایسه بین داکر و برخی جایگزین های آن را نشان می دهد 3:
شکل 3-1
مقایسه سه حالت استفاده از روش سنتی ، استفاده از ماشین مجازی و در مرحله سوم استفاده از docker را نشان می دهد:
- Traditional Deployment
- Virtualized Deployment
- Container Deployment
روش Traditional Deployment :
در استقرار سنتی: سازمان ها برنامه های خود را بر روی سرورهای فیزیکی اجرا می کردند. راهی برای تعریف مرزهای منابع برای برنامه ها در یک سرور فیزیکی وجود نداشت و این باعث ایجاد تخصیص منابع شد. به عنوان مثال ، اگر چندین برنامه در یک سرور فیزیکی اجرا شوند ، ممکن بود که یک برنامه بیشتر منابع را به خود اختصاص می دهد و در نتیجه ،این موضوع باعث میشد برنامه های دیگر، performance پایین تری داشته باشند. یک راه حل برای این حل این موضوع این است که هر برنامه را در یک سرور فیزیکی متفاوت اجرا کنید. اما این موضوع به دلیل کمبود منابع ، مقیاس بندی نمودن سرورها و مشکلات نگهداری سرورهای فیزیکی برای سازمان ها گران بود.
روش Virtualized Deployment:
به شما امکان می دهد چندین ماشین مجازی را روی یک پردازنده مرکزی سرور فیزیکی اجرا کنید. در واقع مجازی سازی اجازه می دهد تا برنامه ها بین ماشین مجازی جدا شوند و یک سطح امنیتی را فراهم می کند زیرا اطلاعات یک برنامه نمی تواند آزادانه توسط برنامه دیگری در دسترس داشته باشد. مجازی سازی امکان استفاده بهتر از منابع در یک سرور فیزیکی را فراهم می کند و مقیاس پذیری بهتری را برای ما امکان پذیر می سازد. زیرا یک برنامه می تواند به راحتی اضافه یا به روز شود ، هزینه های سخت افزار را کاهش می دهد و…. با مجازی سازی می توانید مجموعه ای از منابع فیزیکی را به عنوان مجموعه ای از ماشین های مجازی یکبار مصرف ارائه دهید. هر VM یک ماشین کامل است که تمام اجزا از جمله سیستم عامل مخصوص خود را در بر روی سخت افزار مجازی شده اجرا می کند. بااین حال، فقط می توانیم از 40تا50 درصداز منابع IT خود را استفاده کنیم.
روش Container Deployment:
ما می توانیم یک برنامه را با استفاده از image به عنوان container مستقر می کنیم. image ها بسیار سبک هستند و هسته میزبان را به اشتراک می گذارند ، به همین دلیل دیگر برای اجرای برنامه های خود نیازی به ماشین مجازی کامل نداریم. کانتینرها شبیه ماشین مجازی هستند ، اما به دلیل ویژگی ایزوله بودن، می توان سیستم عامل بین برنامه ها به اشتراک گذاشت.
شکل 4-1
Kubernetes:
یک تکنولوژی open-source برای orchestrate کردن (تنظیم) خودکار سازی ، مقیاس گذاری و مدیریت برنامه های حاوی container است.
ابتدا توسط گوگل طراحی شد و اکنون توسط بنیاد رایانش ابری Cloud نگهداری می شود. هدف آن ارائه بستری برای خودکار سازی استقرار ،مقیاس گذاری و عملکرد کانتینرهای برنامه در میان هاست های کلاستر است. با طیف وسیعی از ابزارهای کانتینری از جمله داکر کار می کند.
در واقع کوبرنتیز deployment(استقرار )و مدیریت صدها یا هزاران container در یک محیط کلاستر شده را به عهده دارد 21. ما component های مختلفی مثل پایگاه داده، وب سرور و … داریم. برای اینکه بتوانیم بین همه component ارتباط برقرار کنیم،
یا زمانی که لودمان پایین میآید، scale down کنیم و resource هایمان را از روی سیستم آزاد کنیم، نیاز به یک پلتفرمی داریم که این کارها را برای ما به صورت اتوماتیک مدیریت کند. یکی از محبوب ترین این پلتفرم ها Kubernetes است.20
Build کردن بر روی پلتفرم Kubernetes15 :
بااین که Kubernetes خودش قابلیت جابه جایی (portable)، مقیاس پذیری و توسعه پذیری را دارد ، با افزودن توسعه (development) ، عملیات (operation) و کنترل امنیتی به ما امکان می دهد به روزرسانی ها را سریعتر – بدون به خطر انداختن امنیت و قابلیت اطمینان – انجام دهیم و در مدیریت زیرساخت صرفه جویی کنیم:
- Infrastructure automation یا Kubernetes بدون سرور، برای حذف یکسری از کارهای معمولی که در شکل نشان داده شده است:
- Development : tools هایی برای توسعه container و (CI/CD) چندتا از نمونه هایش در شکل نشان داده شده است:
- Platform: ارائه یک سری خدمات و سرویسها که نمونه اش در شکل نشان داده شده است:
شکل 5-1
شکل 6-1 دیاگرام معماری کوبرنتیز را نشان میدهد:
شکل 6-1 28
ارتباط میان Docker Container و Kubernetes :
ازآن جایی که Docker یک محیط محبوب در زمان اجرا است که برای ایجاد و ساخت نرم افزار در داخل کانتینرها استفاده می شود. این برنامه از docker image ها برای استقرار برنامه ها یا نرم افزارهای کانتینر دار در چندین محیط از توسعه تا تست و تولید استفاده می کند. Docker بر اساس استانداردها و عملکردهای باز در اکثر محیطهای رایج از جمله لینوکس ، مایکروسافت ویندوز و سایر زیرساختهای داخلی یا مبتنی بر ابر ساخته شده است. برنامه های حاوی کانتینرها در هنگام تولید ممکن است پیچیده شوند. چرا که بسیاری از آنها ممکن است به صدها تا هزاران کانتینر جداگانه در تولید نیاز داشته باشند. بنابراین، این همان جایی است که محیط های کانتینر دار مانند Docker نیاز به استفاده از ابزارهای دیگر جهت مدیریت همه کانتینرهای موجود بهره مند می شوند. یکی از محبوب ترین ابزارها برای این منظور Kubernetes است. Kubernetes عملکرد چندین کانتینر را هماهنگ با هم تنظیم می کند و استفاده از منابع زیرساختی جهت برنامه های کانتینر دار مانند شبکه و منابع ذخیره سازی مورد نیاز و… را مدیریت می کند. 44
Container:
نرم افزار مجازی سازی در سطح سیستم عامل است. یک بسته نرم افزاری می باشد، که حاوی هرآن چیزی است که نرم افزار برای اجرا به آن نیاز دارد.14
درچه حوزه هایی به کار میرود:
- v Development 32,41
- v Secure
- v Deployment33
- v IT Infrastructure: با ایجاد زیرساخت مناسب جهت نگهداری و بروز رسانی مناسب تر و آسان تر و استفاده کامل از منابع سخت افزاری.
- v Micro Services
- v Live Migration: کانتینرها به دلیل سبک وزن بودن، قابل حمل بودن و مدیریت راحتترشان، موجب کاهش زمان کل و زمان مهاجرت می شود.
- v Cloud Computing5
مزایای استفاده در محیط cloud computing :
- The Consistency in Cloud Storage
- Application Version Control
- Efficiency in the Operational Activities
- Productivity of the Developers 5
قابلیتهای کلیدی:
- v Increased productivity: افزایش بهره وری و بهبود سرعت وعملکرد1 در مرحله توسعه نرم افزار باحذف وابستگیها واز بین بردن ناسازگاریهای نرم افزاری.
- v Less overhead: کانتینرها نسبت به محیط های ماشین مجازی سنتی یا سخت افزاری به منابع سیستم کمتری احتیاج دارند در نتیجه موجب سربار کمتری می شوند.
- v Increased portability: برنامه های در حال اجرا در کانتینرها می توانند به راحتی در چندین سیستم عامل مختلف و سیستم عامل های سخت افزاری مستقر شوند.
- v performance: برنامه ها در کانتینرها بدون در نظر گرفتن محل استقرار ، به صورت یکسان اجرا می شوند که performance سازگارتری را به ما می دهد.
- v Efficiency: کانتینرها اجازه می دهند برنامه ها با سرعت بیشتری مستقر ، patch یا مقیاس بندی شوند.
- v Better application development: کانتینرها از متدهای چابک و DevOps برای تسریع در چرخه های توسعه ، تست و تولید پشتیبانی می کنند.
مشکلات عدم استفاده:
- v بار پردازشی و هدر رفت منابع سیستمی روی سرور به همراه دارد.
- v performance پایین تر 12
- v (توضیحات: استفاده از کانتینرها در مقایسه با ماشین های مجازی موجب افزایش performance در CPU،Memory،Disk،Network می شود.)11,40
رقیب:
- انواع ماشین های مجازی 6, 10
مزایا نسبت به رقیب:
- v بار پردازشی و هدر رفت منابع سیستمی خیلی کمتری نسبت یه ماشین مجازی روی سرور به همراه دارد.
- v [cost Efficiency
- v Productivity
- v Compatibility
- v Easier Deployment
- v Continuous Testing
- v Isolated Environment
- v Security
- v Cloud Technology
Container:
داکر امکانی را فراهم آورده است که پروسهها و نرمافزارها به صورت مجزا در محیط کاملا ایزولهای بر روی کرنل لینوکس راهاندازی شوند که به این محیط ایزوله، Container میگویند. داکر وظیفه مدیریت کانتینرها را به عهده دارد و بیشتر شبیه یک ماشین مجازی عمل میکند، تفاوت داکر با ماشین مجازی در این است که در ماشین مجازی برای اجرای اپلیکیشن و برنامه های مختلف که بخواهیم به صورت ایزوله و مجزا از هم کار کنند باید VMهای مختلف ساخته شود که همین موضوع بار پردازشی و هدر رفت منابع سیستمی را روی سرور به همراه دارد. [2]
سه مفهوم اصلی در داکر :
- Image (تصویری از پکیج اصلی می باشد)
- Hub (یک سرویس اشتراک گذاری شامل مخزنی از image های آماده می باشد)
- Container (جایی است که image ها را در آن اجرا می کنند.) [2]
- شعار داکر : develop, ship and run
درچه حوزه هایی به کار میرود:
- v Development [29]: (توسعه نرم افزار شامل تحقیق ، توسعه جدید ، نمونه سازی اولیه ، اصلاح ، استفاده مجدد ، مهندسی مجدد ، نگهداری یا سایر فعالیتهایی باشد که منجر به تولید محصولات نرم افزاری می شود.[32 , 37,18]
- v Operational Microservices [3642]: این معماری نوعی از سبک ساختاری سرویس گرا است که برنامه ای را به عنوان مجموعه ای از خدمات به هم پیوسته مرتب می کند.
- v Deployment [38]: استقرار نرم افزار یک فرایند کلی است که می بایست مطابق با الزامات و ویژگی های خاص آن نرم افزار ارائه گردد، تا سیستم موردنظر را برای استفاده مورد دسترس قرار دهد.
قابلیتهای کلیدی:
- داکر توسعه دهندگان را قادر میسازد تا اپلیکیشنهای خود را راحت و سریع با حجم کمتری به صورت قابل حمل و پرتابل در یک کانتینر قرار دهند. این اپلیکیشنهابه صورت مجازی از هر جایی قابل اجرا هستند. [10,2]
- v Flexibility
- v Cost [50]
- v Portable
- v Loosely coupled
- v Scalability
- v Security [51]
- v Isolated Environment [2,12]
مشکلات عدم استفاده:
- v سرعت deployment پایین تر
- v performance پایین تر [2] (در صورت استفاده از داکر به واسطه سرعت بالای کانتینر ها بر روی داکر، light weight بودن image های داکر و بهبود latency (منظور از latency لختی و یا با اغماض میتوان آ نرا معادل delay در نظر گرفت) برای درک بهتر می توان گفت همان اینرسی است.[33][34]
رقیب:
- v lxc
- v rkt linux containers
- v Podman
- v runC
- v Containerd
- v Free BSD Jails
- v Packer
- v Apache MESOS
- v Nanobox [5,23,19]
مزایا نسبت به رقیب:
- v [CI Efficiency
- v Continuous Integration
- v بازگشت سرمایه و صرفه جویی در هزینه
- v Deployment سریع
- v کانفیگ سریع و ساده
- v امنیت [12,8]
- v cost Efficiency
- v Productivity
- v Compatibility
- v Easier Deployment
- v Isolated Environment
- v Security
- v Cloud Technology [2]
- v سریع
- v container registry هایش به صورت عمومی قراردارد.
- v مستند خیلی خوبی دارد. [3]
Kubernetes:
یک container orchestration technology است برای orchestrate کردن deployment ها و مدیریت صدها یا هزاران container در یک محیط کلاستر شده. [9]
درچه حوزه هایی به کار میرود:
- v Orchestration
- کمک به مدیریت کانتینرها جهت scalability و production مناسب تر.
- اجرا و مدیریت مناسب و متمرکزچندین کانتینر(حتی صد کانتینر).[19]
- v Application Deployment [35]: استقرار نرم افزار شامل کلیه مراحل ، فرایندها و فعالیتهایی است که برای در دسترس قرار دادن یک سیستم نرم افزاری یا بروزرسانی در دسترس کاربران مورد نظر لازم است. برخی از متداولترین فعالیتهای استقرار نرم افزار شامل انتشار نرم افزار ، نصب ، آزمایش ، استقرار و نظارت بر عملکرد می باشد. در واقع به روند اجرای یک برنامه اشاره دارد. [43]
- v Cloud Computing
- بسیاری از سرویس های ابری بستر یا زیرساختی مبتنی بر Kubernetes را به عنوان سرویس (PaaS یا IaaS) ارائه می دهند که می توان Kubernetes را به عنوان سرویس ارائه دهنده بستر در آن مستقر نمود. [4,26 ,34]
قابلیتهای کلیدی:
- v Application ها همیشه up است و مشکلات سخت افزاری (hardware failover ) نمیتوانند موجب down شدن application ها شوند.
- v داشتن load balance وتقسیم کارها بین نودها وعدم مشکل در صورت بالا رفتن لود سیستم
- v اضافه کردن نودها بدون down کردن app
- v (improve performance
- v Kubernetes کمک میکند تا برنامه های ما پایدارتر اجرا شوند.
- v flexibility high (انعطاف پذیری بالا)
- v scalability high (مقیاس پذیری بالا)
- v Service discovery and load balancing
- v ذخیره سازی orchestration
- v راه اندازی مجدد و بازگشت(restart & return)خودکار(automatic restart & return)
- v Self-healing(خودترمیمی)
- v Secret and configuration management (مدیریت و پیکربندی پوشیده). [17,21]
مشکلات عدم استفاده:
- v تخصیص منابع زیاد برای انجام کار
- v استفاده از سرور فیزیکی که به موجب آن منجر به افزایش هزینه میشود.
- v نداشتن scalability [17]
رقیب:
- v Docker Swarm
- v Apache MESOS
- v Rancher
- v Nomad [3]
مزایا نسبت به رقیب:
دارای راه اندازی پیچیده تری می باشد، اما tools ها و feature ها و معماری های پیشرفته را پشتیبانی می کند.آپشن های بسیار زیادی برای customize کردنapplication ها دارد و development کردن مارا در معماری پیچیده به راحتی پشتیبانی می کند.
راه اندازی ونصب Docker Swarm ساده تری دارد، اما از feature ها و معماری های پیشرفته پشتیبانی نمی کند و یا پشتیبانی بسیار کمی دارد.
MESOS : راه اندازی و نصب پیچیده است، اما از معماری پیشرفته پشتیبانی می کند.
- v سازگاری محیطی در توسعه
- v قابلیت جابجایی هم سیستم عامل و هم بر روی ابر
- v مدیریت متمرکز
- v جداسازی منابع
- v high efficiency and density [17]
منابع:
- https://www.docker.com/resources/what-container
- https://docs.docker.com/get-started
- https://jfrog.com/knowledge-base/6-alternatives-to-docker-all-in-one-solutions-and-standalone-container-tools
- https://kubernetes.io
- https://www.cloudcodes.com/blog/container-in-cloud-computing.html
- https://docs.docker.com/get-started
- https://www.slintel.com/tech/containerization/docker-market-share
- https://www.siddhatech.com
- https://www.ibm.com/cloud/learn/kubernetes#toc-container–LRBNgAmX
- https://blog.netapp.com/blogs/containers-vs-vms/
- https://www.researchgate.net/publication/306248698_A_Survey_of_Performance_Comparison_between_Virtual_Machines_and_Containers
- https://raygun.com/blog/what-is-docker
- https://blog.netapp.com/blogs/containers-vs-vms
- https://www.ibm.com/cloud/learn/kubernetes#toc-what-are-c-ZHBio1VR
- https://azure.microsoft.com/en-us/topic/what-is-kubernetes
- https://devspace.cloud/blog/2019/10/31/advantages-and-disadvantages-of-kubernetes
- https://kubernetes.io/docs/concepts/overview/what-is-kubernetes
- https://www.tutorialspoint.com/docker/docker_overview
- https://jfrog.com/knowledge-base/7-alternatives-to-docker-all-in-one-solutions-and-standalone-container-tools
- https://en.wikipedia.org/wiki/Kubernetes
- https://linux.tosinso.com/fa/videos/8004/-kubernetes
- https://www.ibm.com/cloud/learn/kubernetes#toc-what-are-c-ZHBio1VR
- https://www.sumologic.com/glossary/encapsulation
- https://docs.microsoft.com/en-us/dotnet/architecture/microservices/container-docker-introduction/docker-defined
- https://en.wikipedia.org/wiki/Docker
- https://v1-16.docs.kubernetes.io/docs/concepts/workloads/controllers/deployment
- https://searchitoperations.techtarget.com/definition/application-containerization-app-containerization
- https://en.wikipedia.org/wiki/Kubernetes
- https://www.docker.com/use-cases
- https://www.geeksforgeeks.org/difference-between-loosely-coupled-and-tightly-coupled-multiprocessor-system/
- https://en.wikipedia.org/wiki/Container_(abstract_data_type)
- https://en.wikipedia.org/wiki/Software_development
- https://en.wikipedia.org/wiki/Latency_(engineering)
- https://stackify.com/docker-performance-improvement-tips-and-tricks/
- https://en.wikipedia.org/wiki/Cloud_Native_Computing_Foundation
- https://en.wikipedia.org/wiki/Kubernetes
- https://developer.ibm.com/depmodels/microservices/articles/breaking-down-docker-and-microservices/#understanding-microservices
- https://docs.docker.com/develop/
- https://www.freecodecamp.org/news/docker-101-creation-to-deployment/
- https://www.atlantis-press.com/proceedings/icmii-15/25844406
- https://scholar.google.com/scholar?hl=en&as_sdt=0%2C5&q=A+Survey+of+Performance+Comparison+between+Virtual+Machines+and+Containers&btnG=
- An introduction to local development with containers – Increment: Development
- https://en.wikipedia.org/wiki/Microservices–
- https://www.sumologic.com/glossary/software-deployment/–
- https://www.netapp.com/devops-solutions/what-are-containers/
- https://en.wikipedia.org/wiki/Docker_(software)
- https://www.javatpoint.com/docker-features
- https://www.microfocus.com/documentation/enterprise-developer/ed40pu5/ETS-help/GUID-F5BDACC7-6F0E-4EBB-9F62-E0046D8CCF1B.html
- https://hentsu.com/docker-containers-top-7-benefits/
- https://containerjournal.com/features/portability-vms-still-beat-docker-containers/
- https://transportgeography.org/contents/chapter5/intermodal-transportation-containerization/containerization-advantages-drawbacks/
- https://dzone.com/articles/top-10-benefits-of-using-docker
بدون دیدگاه