Kubernetes یک پلتفرم پرتابل، توسعهپذیر و متنباز برای مدیریت بارهای کاری و خدمات Containerizeشده است که هم خودکارسازی و هم پیکربندی Declarative را تسهیل میکند. این پلتفرم یک اکوسیستم بزرگ و در حال رشد سریع دارد. خدمات، پشتیبانی و ابزار Kubernetes بهطور گستردهای قابلدسترسی هستند.
نام Kubernetes از زبان یونانی آمده است و به معنی سکاندار یا پیشرو است. K8s بهعنوان یک مخفف از شمردن هشت حرف بین K و S ساخته شده است. Kubernetes چیست ؟ بیش از 15 سال از تجربهی گوگل در تولید بارهای کاری در مقیاس مناسب را با بهترین ایدهها و راهکارها از سوی جامعه ترکیب میکند.
دورهی پیادهسازی قدیمی: در ابتدا، سازمانها برنامههای کاربردی را روی سرورهای فیزیکی اجرا میکردند. هیچ راهی برای تعریف محدودیت منابع برای برنامههای کاربردی روی یک سرور فیزیکی وجود نداشت و همین امر موجب مشکلاتی در تخصیص منابع شد. مثلاً اگر چندین برنامه کاربردی روی یک سرور فیزیکی اجرا شوند، ممکن است Instanceهایی وجود داشته باشد که یک برنامه کاربردی اکثر منابع را اشغال کند و در نتیجه، عملکرد برنامههای کاربردی دیگر دچار مشکل شود. یکی از راهکار برای حل این مشکل این است که هر برنامه کاربردی روی یک سرور فیزیکی متفاوت اجرا گردد. اما این راهکار مقیاسپذیر نیست، زیرا به حد کافی از منابع استفاده نمیشود و نگهداری چند سرور فیزیکی برای سازمانها پرهزینه است.
راهکار Kubernetes چیست و چه مزایایی دارد
ویدیوهای بیشتر درباره Kubernetes
دورهی پیادهسازی مجازی: مجازیسازی بهعنوان یک راهکار مطرح شد. این راهکار به کاربران اجازه میدهد که چندین ماشین مجازی یا VM را روی CPU یک سرور فیزیکی واحد اجرا کنند. مجازیسازی به برنامههای کاربردی این امکان را میدهد که بین VMها جداسازی شوند و سطحی از امنیت را فراهم میکند، زیرا اطلاعات یک برنامه کاربردی نمیتواند آزادانه مورد دسترسی برنامه کاربردی دیگری قرار بگیرد.
بیشتر بخوانید: معرفی و نحوه عملکرد Kubernetes در vSphere به همراه بررسی مزایای این تکنولوژی
مجازیسازی امکان استفادهی بهتر از منابع را در یک سرور فیزیکی فراهم میکند و امکان مقیاسپذیری بالاتری را نیز ایجاد میکند، زیرا یک برنامه کاربردی به سادگی اضافه یا بروزرسانی میگردد، هزینهی سختافزار کاهش مییابد و مزایای بسیار بیشتری نیز وجود دارد. با مجازیسازی، میتوان مجموعهای از منابع فیزیکی را بهعنوان کلاستری از ماشینهای مجازی ارائه داد که امکان کنار گذاشتن آنها وجود دارد. هر VM یک ماشین کامل است که تمام اجزا، از جمله سیستمعامل خودش را روی سیستم مجازیسازیشده اجرا میکند.
دورهی پیادهسازی Container : Containerها مشابه VMها هستند، اما ویژگیهای جداسازی سادهتری دارند تا بتوان سیستمعامل را بین برنامههای کاربردی به اشتراک گذاشت. در نتیجه، Containerها سبکوزن محسوب میشوند. مثل یک VM، یک Container هم دارای Filesystem، اشتراک CPU، حافظه، فضای فرایند و غیره مخصوص به خودش است. ازآنجاییکه Containerها از زیرساخت زیرین جداسازی میشوند، بین Cloudها و توزیعهای سیستمعامل تحرکپذیر هستند.
Container به این دلیل محبوب شدهاند که مزایای اضافهای فراهم میکنند، مثلاً:
- ایجاد و پیادهسازی برنامه کاربردی سریع: ساده و کارآمدتر بودن ایجاد یک Container Image در مقایسه با استفاده از VM Image.
- توسعه، یکپارچهسازی و پیادهسازی مداوم: ساخت Container Image را بهطور قابلاطمینان و مرتب با Rollbackهای سریع و کارآمد فراهم میکند.
- جداسازی مسائل Dev and Ops :Container Imageها در زمان ساختن یا انتشار و نه زمان پیادهسازی ایجاد میشوند و در نتیجه برنامههای کاربردی از زیرساخت جداسازی میگردد.
- قابلمشاهده بودن: نه تنها اطلاعات و معیارهای سنجش در سطح سیستمعامل نمایان میشود، بلکه سلامت و سیگنالهای دیگر برنامه کاربردی نیز نمایان میگردد.
- ثبات محیطی در توسعه، تست و تولید: اجرا شدن آن روی لپتاپ و Cloud یکسان است.
- تحرکپذیر بودن توزیع Cloud و سیستمعامل: روی Ubuntu، RHEL ،CoreOS ،On-Premises، روی Cloudهای عمومی بزرگ و هر جای دیگری اجرا میگردد.
- مدیریت متمرکز بر برنامه کاربردی: سطح جداسازی را بالا میبرد و از اجرای یک سیستمعامل روی سختافزار مجازی به اجرای یک برنامه کاربردی روی یک سیستمعامل با استفاده از منابع منطقی میرساند.
- میکروسرویسهایی که Couple شدهاند، توزیعی، منعطف و آزاد هستند: برنامههای کاربردی به بخشهای کوچکتر و مستقل تقسیمبندی شدهاند و بهصورت پویا مدیریت میشوند و یک Stack یکپارچه نیستند که روی یک ماشین با هدفی واحد اجرا شوند.
- جداسازی منابع: عملکرد قابل پیشبینی برنامه کاربردی.
- استفاده از منابع: کارآمدی و چگالی بالا.
دلیل نیاز به Kubernetes چیست و کاربردهای آن
Containerها راه خوبی برای کنار هم قرار دادن برنامههای کاربردی و اجرای آنها هستند. در یک محیط تولیدی، باید Containerهایی که برنامههای کاربردی را اجرا میکنند مدیریت شوند و اطمینان حاصل شود که هیچ Downtimeی وجود ندارد. مثلاً، اگر یک Container قطع شود، Container دیگری باید شروع به کار کند. اما اگر یک سیستم به این رفتار رسیدگی کند، همهی چیز سادهتر میشود.
بیشتر بخوانید: قابلیت های نسخه جدید Kubernetes
Kubernetesچارچوبی را فراهم میکند که میتوان سیستمهای توزیعی را روی آن با قابلیت خودترمیمی ایجاد کرد. این چارچوب به مقیاسپذیری و Failover برای برنامه کاربردی رسیدگی میکند، الگوهای پیادهسازی را فراهم میکند و غیره. مثلاً Kubernetes میتواند به سادگی یک پیادهسازی Canary را برای سیستم مدیریت کند.
مزایای Kubernetes
- کشف سرویس و تعدیل بار: Kubernetes میتواند با استفاده از نام DNS یا آدرس IP خودش یک Container را در معرض افشا قرار دهد. اگر ترافیک به یک Container بالا باشد، Kubernetes میتواند تعدیل بار کند و ترافیک شبکه را توزیع نماید تا پیادهسازی باثبات گردد.
- تنظیم Storage : Kubernetes امکان Mount کردن یک سیستم Storage مثل Storageهای Local، ارائهدهندههای Cloud عمومی و غیره را به طور خودکار فراهم مینماید.
- Rolloutها و Rollbackهای خودکارسازیشده: میتوان با استفاده از Kubernetes وضعیت مطلوب خود را برای Containerهای پیادهسازی شده توصیف کرد و این امر میتواند با سرعتی کنترلشده وضعیت را به وضعیت مطلوب تبدیل کند. مثلاً میتوان Kubernetes را خودکارسازی کرد تا Containerهای جدیدی برای پیادهسازی ایجاد شوند، Containerهای موجود حذف شوند و منابع آنها با Container جدید تطبیق پیدا کند.
- خودکارسازی Bin Packing: برای Kubernetes کلاستری از Nodeها فراهم میشود که میتواند با استفاده از آنها Taskهای Containerizeشده را اجرا کند. به Kubernetes گفته میشود که هر Container چقدر به CPU و حافظه (RAM) نیاز دارد. Kubernetesمیتواند Containerها را در Nodeها جا دهد تا بهترین استفاده از منابع انجام گردد.
- خودترمیمی: Kubernetes میتواند Containerهایی که دچار قطعی میشوند را Restart کند، Containerها را جایگزین کند، Containerهایی که به برررسیهای سلامت تعریف شده توسط کاربر پاسخ نمیدهند را از بین ببرد و تا زمانی که آمادهی خدمترسانی شوند آنها را برای Clientها تبلیغ نمیکند.
- مدیریت پیکربندی و رمز: Kubernetes به کاربران این توانایی را میدهد که اطلاعات حساسی مثل رمزهای عبور Tokenهای OAuth و Keyهای SSH را ذخیره و مدیریت کنند. میتوان بدون بازسازی Container Imageها و بدون افشای رازها در پیکربندی Stack، رمزها و پیکربندی برنامه کاربردی را پیادهسازی و بروزرسانی کرد.
Kubernetes چه چیزی نیست !!!
Kubernetes یک سیستم قدیمی و فراگیر PaaS یا Platform as a Service نیست. ازآنجاییکه Kubernetes در سطح Container فعالیت میکند، نه در سطح سختافزار، چندین ویژگی قابلاعمال که در ارائههای PaaS متداول هستند را فراهم میکند؛ از جمله پیادهسازی، مقیاسپذیری و تعدیل بار و به کاربران این امکان را میدهد که راهکارهای Logging، مانیتورینگ و هشداردهی خود را یکپارچهسازی کنند. اما Kubernetes یکپارچه نیست و این راهکارهای پیشفرض اختیاری و قابل افزودن هستند. Kubernetes موارد لازم برای ساختن پلتفرمهای توسعهدهنده را فراهم میکند، اما انتخاب و انعطافپذیری کاربر را در جایی که اهمیت دارد حفظ میکند.
Kubernetes
- نوع برنامههای کاربردی تحت پشتیبانی را محدود نمیکند. هدف Kubernetes چیست ؟ هدف این است که از انواع مختلفی از بارهای کاری از جمله بارهای کاری Stateless، Stateful و پردازش داده پشتیبانی کند. اگر یک برنامه کاربردی بتواند در یک Container اجرا شود، خیلی خوب روی Kubernetes کار میکند.
- کد منبع را پیادهسازی نمیکند و برنامه کاربردی را نمیسازد. جریانهای کاری یکپارچهسازی، ارائه و پیادهسازی (CI/CD) مداوم توسط فرهنگ و ترجیحات سازمانی و همچنین الزامات فنی تعیین میشود.
- خدمات در سطح برنامه کاربردی را بهعنوان خدمات Built-In فراهم نمیکند؛ مثلاً میانافزار مثل Message Busها، چارچوبهای پردازش داده، مانند Spark، دیتابیسها مانند MySQL ،Cacheها یا Storage Systemهای کلاستر مانند Ceph. این اجزا میتوانند روی Kubernetes اجرا شوند و یا میتوان توسط برنامههای کاربردی که از طریق مکانیزمهای پورتابل مثل Open Service Broker روی Kubernetes اجرا میشوند به آنها دسترسی پیدا کرد.
- راهکارهای Logging، مانیتورینگ و هشداردهی را دیکته نمیکند. یکپارچهسازیهایی را بهعنوان اثبات مفهوم و همچنین مکانزیمهایی را برای جمعآوری و صادر کردن معیارهای سنجش فراهم میکند.
- زبان یا سیستم پیکربندی مثلاً Jsonnet را ارائه یا اجبار نمیکند. یک API اعلامی را فراهم میکند که ممکن است مورد هدف فرمهای دلخواه بل مشخصات اعلامی قرار بگیرد.
- هیچ پیکربندی ماشینی، حفظ و نگهداری، مدیریت یا سیستمهای خودترمیمی جامعی را فراهم یا اتخاذ نمیکند.
- به علاوه، Kubernetes صرفاً یک سیستم تنظیم نمی باشد، در حقیقت نیاز به تنظیم را از بین میبرد. تعریف فنی تنظیم Orchestration عبارت است از اجرای یک جریان کاری تعریفشده بدین صورت که اول A انجام میشود، بعد B، سپس C. در مقابل Kubernetes متشکل از مجموعهای از فرایندهای کنترلی مستقل و قابل ایجاد شدن هستند که بهطور مداوم وضعیت کنونی را به سمت وضعیت مطلوب موردنظر میبرند. نباید اهمیتی داشته باشد که چطور از A به C میرسیم. کنترل متمرکز نیز نیاز نیست. این امر منجر میشود به سیستمی که استفاده از آن سادهتر است و قدرتمندتر، منعطفتر و توسعهپذیرتر میباشد.