کوبرنتیز چیست و چگونه کار میکند؟
کوبرنتیز یا Kubernetes (که همچنین به عنوان k8s یا kube شناخته میشود) یک پلتفرم کانتینر منبع باز است که اکثر فرآیندهای دستی درگیر در استقرار، مدیریت و مقیاسبندی برنامههای کانتینری را خودکار میکند.
برای دانستن اینکه کوبرنتیز چیست باید با مفاهیم زیر آشنا شویم
Container چیست؟
در یک جمله میتوان مفهوم Container یا کانتینر را این گونه بیان کرد: کانتینر، نرم افزار مجازی سازی در سطح سیستم عامل است. Container، یک بسته نرم افزاری است و شامل هر آن چیزی است که نرم افزار برای اجرا به آن نیاز دارد، مثلا برنامههای قابل اجرا که تنظیمات، کتابخانهها و System Tools را شامل میشود. Container ها مانند برنامههای نرم افزاری سنتی که به شما اجازه میدهند مستقل از نرم افزارهای دیگر و خود سیستم عامل کار کنید، نصب نمیشوند. مهمترین دغدغه کانتینرها این است که چگونه محیطی فراهم کنند تا نرم افزارهایی که در یک محیط پردازشی اجرا میشوند با انتقال به محیط دیگر، بدون ایراد و مشکل اجرا شوند.
بررسی عمیقتر Container به همراه یک مثال:
کانتینر میتواند جایگزین مناسبی برای ماشینهای مجازی باشد. Container محیطهای اجرایی را جدا کرده و هسته سیستم عامل را به اشتراک میگذارد. حجم آنها معمولا به مگابایت بوده و نسبت به ماشینهای مجازی از منابع کمتری استفاده میکند. همینطور برخلاف ماشینهای مجازی که برای اجرا نیاز به زمان نسبتا زیادی دارند، Containerها بلافاصله اجرا میشوند.
زمانی که Container را با ماشین مجازی مقایسه میکنیم، یعنی با یک شبیه ساز، طرف حساب هستیم. اما دقیقا چه چیزی را شبیه سازی میکنیم؟ برای درک بهتر موضوع بهتر است از یک مثال استفاده کنیم. فرض کنید در شرکتی مشغول به کار هستید و ناهار خود را هر روز در خانه درست کرده و آن را داخل یک ظرف به شرکت میبرید تا آنجا میل بفرمایید. دیگر لازم نیست داخل شرکت شروع به پختن غذا کنید چون احتمالا زمان زیادی را از شما میگیرد. کار Container هم تا حدودی شبیه به این است. شما پروژه خود را (غذا) داخل Container ظرف غذا قرار داده و آن را هر کجا که دوست داشتید (مثلا شرکت) میبرید.
مطلب پیشنهادی: بهترین نرم افزارهای شبیه سازی
پلتفرم چیست؟
پلتفرم گروهی از تکنولوژی هایی است که به عنوان یک پایه و بیس در کنار اپلیکیشن ها، فرایندها و تکنولوژی های دیگر کار می کند. پلتفرم در کامپیوتر و لپتاپ، یک سخت افزار پایه، نرم افزار یا همان سیستم اجرایی محسوب می شود که در آن برنامه های نرم افزاری می توانند اجرا شوند و در واقع پلتفرم تعیین می کند که کدام برنامه یا نرم افزار قابل اجرا خواهد بود.
خوشه های کوبرنتیز چیست؟ (Kubernetes clusters)
به کمک این ویژگی میتوانید گروههایی از میزبانهای دارای کانتینرهای لینوکس را به صورت خوشه ای دستهبندی کنید و کوبرنتیز به شما کمک میکند تا به راحتی و به صورت کارآمد آن خوشهها را مدیریت کنید. خوشههای کوبرنتیز میتوانند میزبانها را در سراسر فضای ابری داخلی، عمومی، خصوصی یا ترکیبی گسترش دهند. به همین دلیل است که کوبرنتیز یک پلت فرم ایدهآل برای میزبانی برنامههای بومی ابری است که نیاز به مقیاسگذاری سریع دارند، مانند جریان دادهها که به صورت بی وقفه در بستر آپاچی کافکا در حال گردش است.
چه کسی به کوبرنتیز کمک می کند؟
کوبرنتیز در ابتدا توسط مهندسان گوگل طراحی و سپس توسعه داده شد. گوگل یکی از اولین مشارکت کنندگان در فناوری کانتینر لینوکس بود و به طور عمومی در مورد این که چگونه همه چیز در گوگل در کانتینرها اجرا می شود به بحث پرداخته است. (این فناوری در بستر پشتی سرویسهای ابری گوگل قرارمیگیرد). گوگل بیش از 2 میلیارد کانتینر در هفته مستقر میکند که همگی توسط پلتفرم داخلی خود Borg پشتیبانی میشوند. borg هم خود درابتدا از کوبرنتیز استفاده میکرد و بعد ها دست به توسعه آن زد، درسهایی که از توسعه کوبرنتیزتوسط borg آموختیم پیش زمینه و عنصر اصلی پیشرفت های فناوری کوبرنتیز در آینده گردید.
آیا میدانستید: عدد 7 در نماد کوبرنتیز به نام اصلی پروژه یعنی پروژه هفت از نه اشاره دارد. Red Hat یکی از اولین شرکتهایی بود که حتی قبل از راه اندازی کوبرنتیز به صورت رسمی با گوگل بر روی کوبرنتیز کار کرد و به دومین شرکت پیشرو در پروژه بالادستی کوبرنتیز تبدیل گردیده است. گوگل در سال 2015 پروژه کوبرنتیز را به بنیاد محاسبات بومی ابری تازه تاسیس CNCF اهدا کرد.
با کوبرنتیز چه کارهایی را می توانید انجام دهید؟
مزیت اصلی استفاده از کوبرنتیز در بستر خود، (بهویژه اگر برنامهنویس هستید و برنامه را برای فضای ابری بهینهسازی میکنید) این است که به شما بستری میدهد تا کانتینرها را بر روی خوشههایی از ماشینهای فیزیکی یا مجازی که اختصارا به آنها (VM) میگویم زمانبندی کرده و به اجرا آنها بپردازید. به طور گسترده تر، به شما کمک می کند تا به طور کامل یک زیرساخت مبتنی بر کانتینر را در محیط های تولید پیاده سازی کنید. از آنجایی که کوبرنتیز تماماً در مورد اتوماسیون وظایف عملیاتی در یک سیستم یا یک برنامه است، میتوانید بسیاری از فعالیت و قابلیت های مشابهی را که پلتفرمهای مدیریتی کاربردی یا سیستمهای مدیریتی دیگر برنامه ها در اختیار شما قرار میدهد را به کمک کوبرنتیز بر روی کانتینر شخصی خود انجام دهید. توسعه دهندگان همچنین می توانند با استفاده از الگوهای کوبرنتیز، اپلیکیشن های بومی ابری را با این بستر به عنوان یک پلتفرم ایجاد کنند. همچنین الگوها ابزارهایی هستند که یک توسعه دهنده کوبرنتیز برای ساخت برنامه ها و سرویس های مبتنی بر کانتینر به آن نیاز دارد.
از دیگر کاربرد های کوبرنتیز میتوان به موارد ذکر شده در زیر اشاره کرد:
- کانتینرها را در چندین میزبان هماهنگ میکند.
- به حداکثر رساندن کیفیت استفاده از منابع سخت افزاری مورد نیاز برای اجرای برنامه های سازمانی.
- استقرار و به روز رسانی برنامه ها به صورت تماما خودکار کنید.
- برای اجرای برنامه های دارای فضای ذخیره سازی، فضای مورد نیاز ذخیره سازی را نصب و اضافه کنید.
- برسی برنامه های کاربردی کانتینری و منابع آنها در حالت اجرا.
- به کمک اعلان ها سرویسها را مدیریت کنید، که تضمین میکند برنامههای مستقر شده همیشه به روشی که شما میخواهید اجرا شوند.
- برنامه های خود را به کمک قابلیت خودکار این بستر به صورت مداوم برسی کرده و کارایی آن را اندازه گرفته و به صورت مستمر بهبود بخشید.
با این حال، کوبرنتیز برای ارائه کامل این خدمات هماهنگ به پروژه های دیگری متکی است. با اضافه شدن سایر پروژه های منبع باز می توانید به طور کامل به قدرت کوبرنتیز پی برده و از قابلیت های ان به طور کامل استفاده کنید. از برنامه های مکمل کوبرنتیز میتوان به موارد زیر اشاره کرد”
- رجیستری، از طریق پروژه هایی مانند Docker Registry.
- شبکه سازی، از طریق پروژه هایی مانند OpenvSwitch و مسیریابی هوشمند لبه (intelligent edge routing)
- تله متری، از طریق پروژه هایی مانند Kibana، Hawkular و Elastic.
- امنیت، از طریق پروژه هایی مانند LDAP، SELinux، RBAC و OAUTH با لایه های چند اجاره ای (multitenancy)
- اتوماسیون با اضافه شدن کتابخانه های باز Ansible برای نصب و مدیریت چرخه عمر خوشه ها.
مطلب پیشنهادی: AWS چیست؟
اصطلاحات مورد استفاده در کوبرنتیز
همان طور که میدانید یکی از مشکلات استفاده از زبان های برنامه نویسی و یا بستر هایی مانند کوبرنتیز، زبان مخصوص به آنهاست از این جهت به معرفی برخی از اصطلاحات رایج در این مبحث پرداخته تا با درک بهتری کوبرنتیز را تجزیه و تحلیل کنیم.
Control plane: مجموعه ای از فرآیندهایی که گره های کوبرنتیز را کنترل می کنند. این جایی است که همه عمکردها از آن منشا میگیرند.
Nodes: این ماشین ها وظایف درخواستی تعیین شده توسط صفحه کنترل را انجام می دهند.
POD: گروهی از یک یا چند کانتینر که در یک گره منفرد مستقر شده اند. همه کانتینرها در یک pod یک آدرس IP، IPC، نام میزبان و سایر منابع را به اشتراک می گذارند. این به شما امکان می دهد کانتینرها را راحت تر در اطراف خوشه جابجا کنید.
Replication controller: این کنترلر به کنترل چند نسخه یکسان از یک پاد که باید در جایی روی خوشه اجرا شود میپردازد.
Service: تعاریف کاری را از غلاف ها (pods) جدا می کند. پراکسیهای سرویس Kubernetes، بهطور خودکار درخواستهای سرویس را به غلاف (pod) درست متصل میکنند.
Kubelet: این سرویس بر روی گره ها اجرا می شود، اطلاعات باز شده کانتینر را می خواند و اطمینان می دهد که کانتینرهای تعریف شده راه اندازی و اجرا می شوند.
نحوه کار کوبرنتیز
بخش از کوبرنتیز که در حال کار است، خوشه نامیده می شود. شما می توانید یک خوشه کوبرنتیز را به صورت دو بخش مجسم کنید: صفحه کنترل و ماشین های محاسباتی یا گره ها. هر گره، محیط لینوکسی خاص خودش را داراست و می تواند یک ماشین فیزیکی یا مجازی باشد. هر گره، غلافهایی (pots) را اجرا می کند که از کانتینرها تشکیل شده اند. صفحه کنترل، مسئول حفظ وضعیت مطلوب خوشه است؛ مثلا به نحوه کار برنامه ها و نوع کار انها نظارت میکند. ماشین های محاسباتی در واقع برنامه ها داده های تحلیل شده را اجرا می کنند. کوبرنتیز در بالای یک سیستم عامل اجرا می شود. صفحه کنترل کوبرنتیز دستورات را از یک مدیر یا تیم DevOps می گیرد و آن دستورالعمل ها را به ماشین های محاسباتی منتقل می کند. این انتقال داده با ابزار متعددی کار می کند تا به طور خودکار تصمیم بگیرد که کدام گره برای این کار مناسب تر است. سپس منابع را به هر بخش تخصیص می دهد و غلاف ها را در آن گره برای انجام کار درخواستی اختصاص می دهد.
حالت مطلوب یک خوشه کوبرنتیز مشخص میکند که کدام برنامه ها با ابزار باید برای عملکرد بهینه سیستم درحال کار باشند. از نقطه نظر زیرساخت، تغییر کمی در نحوه مدیریت کانتینرها وجود دارد و اعمال بر روی کانتینرها فقط در سطح بالاتری توسط کارفرما اتفاق می افتد و بدون نیاز به مدیریت جزء هر کانتینر یا گره جداگانه امکان کنترل بهتری به شما می دهد. عملکرد ها شامل پیکربندی کوبرنتیز و تعریف گره ها , غلاف ها و کانتینرهای درون آنها است. کوبرنتیز هماهنگی کانتینرها را انجام می دهد و اینکه کجا کوبرنتیز را اجرا کنید به شما بستگی دارد. این می تواند در سرورهای فلزی خام، ماشین های مجازی، ارائه دهندگان فضای ابری عمومی، فضای ابری خصوصی و محیط های ابری ترکیبی باشد. یکی از مزایای کلیدی کوبرنتیز این است که روی بسیاری از انواع زیرساخت قابل اجراست.
مقایسه کوبرنتیز با داکر
در ادامه مطالب به مقایسه این نرمافزار مدیریتی با داکر میپردازیم. مقایسه و انتخاب بین کوبرنتیز و داکر اغلب اشتباه است؛ این دو، فناوریهای متفاوت و در عین حال مکمل برای اجرای اپلیکیشنهای کانتینری هستند. داکر به شما این امکان را میدهد هر آنچه که برای اجرای اپلیکیشن خود نیاز دارید را در جعبهای قرار دهید که میتواند در زمان و مکان مورد نیاز ذخیره و باز شود. هنگامی که شروع به دستهبندی اپلیکیشنهای خود کردید، به راهکاری برای مدیریت آنها هم نیاز دارید و این کاری است که کوبرنتیز انجام میدهد. کوبرنتیز یک کلمه یونانی به معنای “کاپیتان” در انگلیسی است. همانطور که کاپیتان مسئول سفر امن کشتی در دریا است، کوبرنتیز نیز مسئول حمل و تحویل آن دستهها به مکانهایی است که میتوان از آنها استفاده کرد.
هر Container داکر، با یک فایل داکر شروع به کار میکند. Dockerfile یک فایل متنی بوده که داخل آن با یک سینتکس ساده و قابل فهم دستورالعملهای ساخت Docker Image قرار داده شده است (کمی جلوتر این مفهوم را بررسی خواهیم کرد) این فایل اطلاعات بسیار مهمی را در برمی گیرد که برای راه اندازی داکر استفاده از آنها ضروری است. در واقع Dockerfile مشخص میکند که پشت Container ما چه سیستم عاملی قرار بگیرد، همینطور از چه زبان ها، متغیرهای محلی، پورتهای شبکه یا غیره استفاده شود. و مهمتر از همه این که مشخص میکند Container ما بعد از این که واقعا اجرا شد، قرار است چه کاری انجام دهد.
Docker run
قابلیت Docker run در واقع یک دستور است که Container را راه اندازی میکند. میدانیم که هر Container یک instance یا نمونه از Image است و ماهیت Container به صورت موقتی میباشد. اما با این حال میتوان آنها را متوقف (Stop) یا راه اندازی مجدد (Restart) کرد. هر Image میتواند تعداد زیادی Container داشته باشد (تا زمانی که هر کدام نام منحصر به فردی داشته باشند)
Docker Hub
هر چند ساخت Containerها کار راحتی است، اما لزومی ندارد برای هر Image از اول Container بسازید. Docker Hub یک مخزن Saas برای به اشتراک گذاری و مدیریت Containerها است. در آنجا میتوانید Imageهای رسمی داکر که معمولا به صورت متن باز هستند را پیدا کنید. همینطور عموم مردم هم پروژههای خود را به این Repository اضافه میکنند.
مطلب پیشنهادی: خدمات SaaS چیست؟
METAL3 چیست؟
Metal3 یک پروژه بالادستی، برای استقرار و مدیریت چرخه عملکردی کاملاً خودکار سرورهای فیزیکی خالی با استفاده از کوبرنتیز است.
چرا به Kubernetes نیاز دارید؟
کوبرنتیز میتواند به شما در ارائه و مدیریت برنامههای کانتینری، قدیمی و بومی ابری و همچنین برنامههایی که به میکروسرویسها تبدیل میشوند کمک کند. برای برآوردن نیازهای در حال تغییر کسب و کار، تیم توسعه شما باید بتواند به سرعت برنامه ها و خدمات جدید بسازد. توسعه Cloud-Native با میکروسرویسها در کانتینرها شروع میشود، که توسعه سریعتر را امکانپذیر میکند و تغییر و بهینهسازی برنامههای موجود را آسانتر میکند. برنامه های تولیدی، چندین کانتینر را در بر می گیرند و آن کانتینرها باید در چندین میزبان سرور مستقر شوند. کوبرنتیز به شما قابلیت های هماهنگی و مدیریتی لازم برای استقرار کانتینرها، در این مقیاس و برای حجم های بالا فراهم میکند.
هماهنگسازی کوبرنتیز به شما امکان میدهد سرویسهای کاربردی ایجاد کنید که چندین کانتینر را شامل میشوند، آن کانتینرها را در یک خوشه برنامهریزی کنید سپس آن کانتینرها را مقیاسبندی کنید و سلامت آن کانتینرها را در طول اجرای پروژه مدیریت کنید. همچنین با کوبرنتیز می توانید گام های موثری در جهت امنیت IT بهتر بردارید. کوبرنتیز همچنین نیاز دارد تا با شبکه ها ادغام شود، ذخیره سازی انجام دهد، روش های امنیتی خاص روی ان اجرا شود تا تمامی خدمات لازم را در اختیار شما قرار دهد.برای پاسخدهی به نیازهای در حال تغییر کسبوکار، تیم برنامهنویس باید بتواند به سرعت برنامهها و سرویسهای جدید را ایجاد و منتشر کند. پیادهسازی مبتنیبر ابر باعث افزایش سرعت و سهولت در پیادهسازی، بهینهسازی و اصلاح برنامهها میشود. از طرفی اپلیکیشنهای تولیدی بزرگ، چندین کانتینر ایجاد میکنند که باید روی چندین سرور نیز اجرا شوند. کوبرنتیز قابلیت مدیریت و ساماندهی لازم برای پیادهسازی کانتینرها در مقیاس بالا را برای ما فراهم میکند. همچنین با استفاده از کوبرنتیز میتوان از سرویسهای اضافه مانند Load Balance و Health Check بهراحتی بهره مند شد.
DevOps و استفاده از کوبرنتیز جهت پشتیبانی از آن:
توسعه کاربردهای مدرن نیازمند فرآیندهای متفاوتی نسبت به رویکردهای گذشته است. DevOps سرعت انتقال یک ایده از توسعه به استقرار را افزایش می دهد. DevOps در هسته خود به خودکارسازی وظایف عملیاتی معمول و استانداردسازی محیطها در طول چرخه عمر برنامه متکی است. کانتینرها از یک محیط یکپارچه برای توسعه و تحول و همچنین اتوماسیون پشتیبانی میکنند و جابهجایی برنامهها را بین محیطهای توسعه و آزمایشی آسانتر میکنند. مدیریت چرخه حیات کانتینرها با کوبرنتیز در کنار رویکرد DevOps به همسوسازی توسعه نرمافزار و عملیات فناوری اطلاعات برای پشتیبانی از CI/CD کمک میکند. با پلتفرمهای مناسب، چه در داخل و چه در خارج از کانتینر میتوانید به بهترین وجه از تغییرات بنیادی و فرآیندی که پیادهسازی کردهاید بهره ببرید.
کوبرنیتز را با روش های سنتی اشتباه نکنیم
کوبرنیتز یک سیستم فراگیر پلتفرم PaaS (Platform as a Service) به عنوان یک سرویس سنتی نیست. از آنجایی که کوبرنیتز در سطح کانتینر در جایگاه سطوح سختافزاری عمل میکند، برخی از ویژگیهای عمومی قابل اجرای مشترکی با PaaS دارند، مانند استقرار، مقیاسبندی، متعادلسازی داده ها و به کاربران اجازه میدهد روش های گزارش دهی، نظارت و هشدار خود را در یک سیستم یکپارچه جایگزین کنند. با این حال، کوبرنیتز یکپارچه نیست و این راه حل های پیش فرض اختیاری و قابل نصب هستند. کوبرنیتز بلوکهای اجرایی را برای ساخت پلتفرمهای توسعهدهنده فراهم میکند اما انتخاب کاربر و انعطافپذیری را در جایی که به ان نیاز است برای کاربر حفظ میکند.
کوبرنیتز، کد منبع را در محل اجرا مستقر نمی کند و در ساخت برنامه کاربر به صورت مستقیم دخالت ندارد. راهحلهای ثبت، نظارت یا هشدار را دیکته نمیکند و اجبرای برای کاربر در انتخاب و یا اجرای بخش های نظارتی در نظر ندارد. هیچ گونه پیکربندی، نگهداری، مدیریت، یا سیستم های خود ترمیم کننده جامعی را ارائه نمی دهد و نمی پذیرد. علاوه بر این، کوبرنیتز صرفا یک سیستم ارکستراسیون نیست. در واقع نیاز به ارکستراسیون را از بین می برد, تعریف فنی ارکستراسیون اجرای یک گردش کار تعریف شده است: مثلا ابتدا A، سپس B، سپس C را انجام دهید. در مقابل، کوبرنیتز شامل مجموعه ای از فرآیندهای کنترل مستقل و قابل ترکیب است که به طور مداوم حالت فعلی را به سمت حالت مطلوب جهت میدهد.
دیدگاه شما