نمای کلی
این صفحه یک نمای کلی از کوبرنتیز است.
نام کوبرنتیز از ریشه یونانی٬ به معنی خلبان یا ناخدا است. K8s به عنوان مخفف حاصل شمارش ۸ حرف بین "K" و "s" ابتدا و انتهای Kubernetes است. گوگل پروژه کوبرنتیز را در سال ۲۰۱۴ متن باز کرد. کوبرنتیز حاصل بیش از ۱۵ سال تجربه گوگل در اجرای بارکاری محصولات در مقیاس بالا با ایدهها و عملکردهای بهترین-در-نوع-خود در جامعه است.
چرا به کوبرنتیز نیاز دارید و چهکاری انجام میدهد؟
کانتینر ها راه خوبی برای بسته بندی و اجرای اپلیکیشنهای شما هستند. در یک محیط عملیاتی٬ شما نیاز دارید تا کانتینر هایی که اپلیکیشن را اجرا می کنند٬ مدیریت کنید و مطمئن باشید هیچ زمان توقفی ندارد. برای مثال٬ اگر یک کانتینر متوقف شود٬ یک کانتینر دیگر باید شروع به کار کند. اگر این کار توسط سیستم انجام شود٬ آسانتر نیست؟
اینجاست که کوبرنتیز برای نجات میآید! کوبرنتیز برای شما چارچوبی فراهم می کند که سیستم های توزیع شده را به صورت انعطاف پذیر مدیریت کنید. این ابزار مقیاس پذیری و تحمل خطا برنامه شما را پایش میکند٬ الگو های استقرار ارائه می کند و دیگر موارد. برای مثال: کوبرنتیز می تواند به سادگی یک انتشار تدریجی برای بروزرسانی برنامه شما فراهم کند.
کوبرنتیز موارد زیر را برای شما فراهم می کند:
- پایش سرویس و توزیع بار کوبرنتیز میتواند یک کانتینر را با استفاده از نام DNS یا استفاده از آدرس IP خودش نمایان کند. اگر ترافیک یک کانتیر زیاد است٬ کوبرنتیز قادر است ترافیک را توزیع و متعادل کند تا استقرار پایدار باشد.
- ارکستراسیون فضای ذخیره سازی کوبرنتیز به شما امکان میدهد تا به صورت خودکار فضای ذخیره سازی دلخواه٬ از جمله فضای داخلی٬ سرویسدهنده ابری و ... را متصل کنید.
- رونمایی و عقبگرد خودکار شما میتوانید با استفاده از Kubernetes وضعیت مطلوب را برای کانتینرهای مستقر شده خود توصیف کنید و Kubernetes میتواند وضعیت واقعی را با سرعت کنترل شده به وضعیت مطلوب تغییر دهد. برای مثال٬ میتوانید کوبرنتیز را خودکار کنید تا کانتینر های جدیدی برای استقرار شما ایجاد کند٬ کانتینر های موجود را حذف کند و تمام منابع آنها را به کانتینر های جدید اختصاص دهد.
- bin packing خودکار شما به کوبرنتیز٬ کلاستری از نود ها را میدهید که میتواند برای انجام وظایف کانتینری شده از آن استفاده کند. شما میتوانید به کوبرنتیز بگویید چه میزان رم و CPU برای هر کانتینر نیاز است. کوبرنتیز میتواند کانتینر ها را برای بهترین مصرف منابع در نود های شما ساماندهی کند.
- خود درمانی کوبرنتیز کانتینر های خطا خورده را ری-استارت می کند٬ کانتینر ها را جایگزین می کند٬ کانتینر هایی که به بررسی سلامت تعریف شده توسط کاربر پاسخ نمیدهند از بین میبرد٬ و آنها را تا زمانی که آماده خدماتدهی نباشند٬ ارایه نمیکند.
- مدیریت Secret و پیکربندی کوبرنتیز به شما امکان می دهد اطلاعات حساس مانند رمزعبور٬ توکن های احراز هویت و کلید های SSH را ذخیره سازی و مدیریت کنید. شما میتوانید Secret ها و پیکربندی برنامه را بدون بازسازی image آن و بدون افشای Secret در بسته های پیکربندی٬ مستقر و بروزرسانی کنید.
- اجرای دستهای علاوه بر سرویس٬ کوبرنتیز قادر است تا در صورت تمایل بارکاری دستهای و CI شما را مدیریت و کانتینرهای خطا دار را جایگزین کند.
- مقیاس بندی افقی مقیاس برنامه خودرا با یک دستور ساده٬ از طریق رابط کاربری٬ یا به صورت خودکار بر اساس مصرف CPU بالا و پایین ببرید.
- IPv4/IPv6 dual-stack اختصاص دادن آدرس IPv4 و IPv6 به پاد ها و سرویس ها.
- طراحی شده برای توسعهپذیری بدون نیاز به تغییر کد منبع٬ قابلیت های دلخواه خودرا به کلاستر کوبرنتیز اضافه کنید.
کوبرنتیز چی نیست
کوبرنتیز یک سیستم PaaS (Platform as a Service) سنتی شامل-همه-چیز نیست. از آنجایی که کوبرنتیز در سطح کانتینر و نه در سطح سختافزار کار می کند٬ برخی ویژگی های عمومی و رایج در ارائه دهندگان PaaS مانند استقرار٬ مقیاسبندی٬ توزیع بار ارائه میدهد و کابران را قادر میسازد تا ثبت وقایع٬ مانیتورینگ و راهکار های هشداردهی را ادغام کنند. با اینحال٬ کوبرنتیز یکپارچه نیست و این راهکار های پیشفرض اختیاری و قابل اتصال هستند. کوبرنتیز بلوک های سازنده برای ساخت پلتفرم های توسعهدهندگان را فراهم می کند٬ اما در مواردی که مهم است٬ انتخاب و راحتی کاربر را حفظ می کند.
کوبرنتیز:
- انواع اپلیکیشن های پشتیبانی شده را محدود نمیکند. کوبرنتیز قصد دار تا از انواع بسیار متنوعی از بارهای کاری٬ از جمله باوضعیت (statefull)٬ بدون وضعیت(stateless)٬ و پردازش داده٬ پشتیبانی کند. اگر برنامه ای روی کانتینر اجرا شده٬ باید به خوبی روی کوبرنتیز اجرا شود.
- کد های منبع را مستقر نمیکند و برنامه شما را نمیسازد. فرآیند ادغام٬ همرسانی و استقرار مستمر (continous Itegration, Delivery, Deployment) توسط فرهنگ و ترجیحات سازمانی و همچنین نیازمندی های فنی تعیین میشود.
- خدمات سطح اپلیکیشن از جمله میان-افزار (برای مثال٬ گذرگاه پیام)٬ فریم ورک پردازش داده(برای مثال٬ Spark)٬ پایگاه داده (برای مثال٬ MySQL)٬ کش ها و نه حتی فضای ذخیره سازی کلاستری (برای مثال٬ Ceph) را به عنوان سرویس درونی ندارد. چنین اجزایی میتوانند روی کوبرنتیز اجرا شوند٬ و/یا می توانند توسط برنامه های اجرا شده روی کوبرنتیز از طریق مکانیزم های قابل حمل مانند Open Service Broker مورد استفاده باشند.
- راهکارهای ثبت وقایع٬ مانیتورینگ و هشدار را اجبار نمیکند. برخی یکپارچه سازی ها را برای نمایش مفهوم٬ و مکانیزم های دریافت متریک را ارایه می کند.
- ه یک زبان یا سیستم پیکربندی (مانند Jsonnet) ارائه میدهد و نه استفاده از آن را الزامی میکند. در عوض، یک API اعلامی (Declarative API) فراهم میکند که میتواند توسط هر نوع مشخصات اعلامی مورد استفاده قرار گیرد.
- هیچ سیستم پیکربندی٬ نگهداری٬ مدیریت یا خوددرسمانی را ارائه یا اتخاذ نمیکند.
- به علاوه٬ کوبرنتیز تنها یک سیستم ارکستراسیون نیست. در واقع٬ نیاز به ارکستراسیون را از بین میبرد. تعریف فنی ارکستراسیون٬ اجرای یک جریان کاری تعریف شده است: اول الف را انجام بده٬ آنگاه ب آنگاه ث. در مقابل٬ کوبرنتیز شامل تعدادی . In contrast, Kubernetes comprises a set of independent, composable control processes that continuously drive the current state towards the provided desired state. It shouldn't matter how you get from A to C. Centralized control is also not required. This results in a system that is easier to use and more powerful, robust, resilient, and extensible.
گذشته تاریخی کوبرنتیز
بیایید نگاهی به گذشته بندازیم تا ببینیم چرا کوبرنتیز مفید است.
دوره توسعه سنتی:
در اوایل٬ سازمان ها برنامه ها را روی سرور های فیزیکی اجرا می کردند. هیچراهی برای تعریف مرز های منابع برنامه ها روی سرور فیریکی وجود نداشت و این موضوع٬ باعث مشکلاتی در تخصیص منابع میشد. برای مثال، اگر چندین برنامه روی یک سرور فیزیکی اجرا شوند، ممکن است مواردی وجود داشته باشد که یک برنامه بیشتر منابع را اشغال کند و در نتیجه، برنامههای دیگر عملکرد ضعیفی داشته باشند. یک راه حل٬ اجرای هر برنامه روی یک سرور فیزیکی مجزا است. اما این امر به دلیل کمبود منابع مقیاسپذیر نبود و برای سازمان ها نگهداری سرور های فیزیکی متعدد پرهزینه است.
دوره توسعه مجازی سازی شده:
به عنوان یک راهکار٬ مجازی سازی معرفی شد. مجازی سازی به شما امکان میدهد چندین ماشین مجازی (VM) را روی CPU یک سرور فیزیکی اجرا کنید. مجازیسازی امکان جداسازی برنامهها بین ماشینهای مجازی را فراهم میکند و سطحی از امنیت را فراهم میکند، زیرا اطلاعات یک برنامه نمیتواند آزادانه توسط برنامه دیگری قابل دسترسی باشد.
مجازیسازی امکان استفاده بهتر از منابع در یک سرور فیزیکی را فراهم میکند و مقیاسپذیری بهتری را فراهم میکند زیرا یک برنامه میتواند به راحتی اضافه یا بهروزرسانی شود، هزینههای سختافزاری را کاهش میدهد و موارد بسیار دیگری را نیز به همراه دارد. با مجازیسازی میتوانید مجموعهای از منابع فیزیکی را به عنوان خوشهای از ماشینهای مجازی یکبار مصرف ارائه دهید.
هر ماشین مجازی یک ماشین کامل است که تمام اجزا، از جمله سیستم عامل خود را، بر روی سختافزار مجازی اجرا میکند.
دوره توسعه کانتینری:
کانتینرها مشابه ماشینهای مجازی هستند، اما ویژگیهای ایزولهسازی سادهتری دارند تا بتوانند سیستم عامل (OS) را بین برنامهها به اشتراک بگذارند. بدینترتیب٬ کانتینر ها سبک تلقی میشوند. مشابه یک ماشین مجازی، یک کانتینر سیستم فایل، سهم CPU، حافظه، فضای پردازش و موارد دیگر مخصوص به خود را دارد. از آنجایی که آنها از زیرساخت اصلی جدا شدهاند، میتوانند در میان ابرها و توزیعهای سیستم عامل قابل حمل باشند.
کانتینرها به دلیل مزایای اضافی مانند موارد زیر محبوب شدهاند:
- ایجاد و استقرار چابک برنامهها: افزایش سهولت و کارایی ایجاد ایمیج کانتینر در مقایسه با استفاده از تصویر ماشین مجازی.
- توسعه، ادغام و استقرار مداوم: امکان ساخت و استقرار مداوم و قابل اعتماد ایمیج کانتینر را با بازگشتهای سریع و کارآمد (به دلیل تغییرناپذیری تصویر) فراهم میکند.
- جداسازی دغدغههای توسعه و عملیات: ایجاد ایمیج کانتینر برنامه در زمان ساخت/انتشار به جای زمان استقرار، و در نتیجه جداسازی برنامهها از زیرساخت.
- قابلیت مشاهده: نه تنها اطلاعات و معیارهای سطح سیستم عامل را نشان میدهد، بلکه سلامت برنامه و سایر سیگنالها را نیز پوشش میدهد.
- سازگاری محیطی در طول توسعه، آزمایش و تولید: همانطور که در فضای ابری اجرا میشود، روی لپتاپ نیز به همان شکل اجرا میشود.
- قابلیت حمل توزیع ابری و سیستم عامل: روی اوبونتو، RHEL، CoreOS، در محل، روی ابرهای عمومی بزرگ و هر جای دیگر اجرا میشود.
- مدیریت برنامه محور: سطح دیدگاه را از اجرای یک سیستم عامل روی سخت افزار مجازی به اجرای یک برنامه روی یک سیستم عامل با استفاده از منابع منطقی ارتقا میدهد.
- میکروسرویسهای آزاد، توزیعشده، الاستیک و با اتصال سست: برنامهها به قطعات کوچکتر و مستقل تقسیم میشوند و میتوانند به صورت پویا مستقر و مدیریت شوند - نه یک پشته یکپارچه که روی یک ماشین بزرگ تک منظوره اجرا میشود.
- جداسازی منابع: عملکرد قابل پیشبینی برنامه.
- استفاده از منابع: راندمان و تراکم بالا.
- نگاهی بر اجزای کوبرنتیز
- نگاهی بر API کوبرنتیز
- نگاهی بر ساختار کلاستر
- آماده شروع؟