کوبرنتیز (که با نام k8s یا Kube نیز شناخته میشود) یک بستر اوپنسورس ارکستراسیون کانتینر است که فرایندهای دستی دخیل در دیپلوی، مدیریت و مقیاسدهی به اپلیکیشنهای کانتینری را خودکار میکند.
کلاستر کوبرنتیز چیست؟
با استفاده از کوبرنتیز (Kubernetes) میتوانید مجموعهی هاستهای کانتینرهای لینوکس را کلاستربندی کرده و به آسانی و به صورت کارآمد مدیریت کنید. کلاسترهای کوبرنتیز هاستها را در سراسر محیطهای ابری (cloud) داخلی، عمومی (public cloud)، خصوصی (private cloud) و ترکیبی (hybrid cloud) پوشش میدهند.
به همین خاطر کوبرنتیز پلتفرمی ایدهآل برای هاستینگ اپلیکیشنهای ابری اصیل مانند جریان دادههای همزمان از طریق Apache Kafka است که نیازمند مقیاسپذیری سریع هستند.
پیشینهی کوبرنتیز
کوبرنتیز در اصل توسط مهندسان گوگل طراحی شد و توسعه پیدا کرد. گوگل یکی از اولین دستاندرکاران فناوری کانتینر لینوکس بود و در عموم اعلام کرد که چطور همه چیز در گوگل بر پایهی کانتینرها اجرا میشود (این تکنولوژی پشت سرویسهای ابری گوگل قرار دارد).
گوگل در هفته بیش از دو میلیارد کانتینر دیپلوی میکند که همه توسط پلتفرم داخلی آن، یعنی بورگ (Borg)، پشتیبانی میشوند. بورگ نسل قبلی کوبرنتیز بود و درسهایی که از توسعهی بورگ در سالیان گذشته به دست آمد، عامل اصلی رشد فناوری کوبرنتیز بود.
نکته جالب: هفت اهرم موجود در لوگوی کوبرنتیز به نام اصلی پروژه، یعنی”Project Seven of Nine” اشاره دارد. گوگل در سال ۲۰۱۵ کوبرنتیز را به بنیاد تازهتأسیس Cloud Native Computing Foundation (CNCF) اهدا کرد.
مزایای استفاده از کوبرنتیز چیست؟
مزیت استفاده از کوبرنتیز، به ویژه در فضاهای ابری، این است که به شما بستری برای اجرای کانتینرها بر روی کلاسترهای کوبرنتیز میدهد.
با استفاده از کوبرنتیز میتوانید به طور کامل یک زیرساخت مبتنی بر کانتینر را در محیطهای تولید پیادهسازی و به آن تکیه کنید. از آنجایی که کاربرد اصلی کوبرنتیز در اتوماسیون تسکهای تیم عملیات IT است، بسیاری از قابلیتهای بسترهای نرمافزاری و سیستمهای مدیریتی تیم عملیات را کوبرنتیز هم برای کار با کانتینرها در اختیار شما قرار میدهد. توسعهدهندگان میتوانند با استفاده از الگوهای کوبرنتیز برنامههای Cloud Native را به عنوان پلتفرم ایجاد و اجرا کنند. الگوها ابزارهایی هستند که توسعهدهندهی کوبرنتیز برای ساخت برنامهها و سرویسهای مبتنی بر کانتینر به آن نیاز دارد.
به طور خلاصه با استفاده از کوبرنتیز میتوانید:
• کانتینرها را میان چندین هاست ارکستر کنید.
• برای افزایش ظرفیت منابع اجرای اپلیکیشنهای سازمانی، از سختافزار استفادهی بهینه کنید.
• دیپلوی و بهروزرسانی برنامهها را کنترل و خودکار کنید.
• فضای ذخیرهسازی مورد نیاز برای اجرای اپلیکیشنهای Stateful را افزایش دهید.
• سرعت اجرای اپلیکیشنهای کانتینرشده و منابع مورد نیاز آنها را افزایش دهید.
• سرویسها را به طور Declaratively مدیریت کنید تا تضمین کند که اپلیکیشنها با روش مورد نظر شما اجرا میشوند.
• با خودکارسازی فرایندهای راهاندازی، ریپلیکیشن یا انتشار، مقیاسگذاری اپلیکیشنها، کنترل سلامت و خودترمیمی اپلیکیشنها را بهبود ببخشید.
با این حال، کوبرنتیز برای ارائه کامل سرویسهای ارکرستراسیون به پروژههای دیگر متکی است. با اضافه شدن سایر پروژههای اوپن سورس، قدرت کوبرنتیز عیانتر میشود. این سرویسهای ضروری عبارتند از :
• رجیستری از طریق پروژههایی مثل Docker Registry
• نتورکینگ از طریق پروژههایی مثل OpenSwitch و روتینگ به روش Intelligent Edge
• تلهمتری از طریق پروژههایی مانند Kibana، Hawkular و Elastic
• امنیت از طریق پروژههایی مانند LDAP، SELinux، RBAC و OAUTH با چندین لایهی multitenancy
• اتوماسیون با افزودنplaybook هایAnsible برای نصب و مدیریت چرخه عمر کلاستر
• سرویسهای متنوع از طریق کاتالوگی حاوی الگوهای پرطرفدار توسعه اپلیکیشن
اصطلاحات مربوط به کوبرنتیز
مانند تمام تکنولوژیهای دیگر، زبان مخصوص کوبرنتیز به نوعی مانع استفاده از آن میشود. در ادامه اصطلاحات رایج برای شناخت بهتر کوبرنتیز را با هم بررسی میکنیم.
- مرکز کنترل (Control Plane): مجموعهای از فرآیندهایی که نودهای کوبرنتیز را کنترل میکنند. تخصیص تسکها در مرکز کنترل صورت میگیرد.
- نودها (Nodes): نودها ماشینهایی هستند که وظایف درخواستی تعیین شده توسط مرکز کنترل را اجرا میکنند.
- پاد (Pod) : مجموعهی یک یا چند کانتینر که بر یک نود مستقر شده است. تمام کانتینرهای یک پاد آدرس IP، IPC، هاستنیم (hostname) و فضاهای ذخیرهسازی مشترک دارند. پادها اتصالات شبکه و فضای ذخیرهسازی را از کانتینرهای خود میگیرند. به این ترتیب جابهجایی کانتینرها در کلاستر آسانتر میشود.
- کنترلر رپلیکیشن (Replication controller): با این قابلیت تعداد نسخههای کپی شدهی یک پاد کنترل میشود. در واقع کنترلر ریپلیکیشن تعیین میکند که چه تعداد نسخهی یکسان از یک پاد باید در یک جای مشخص روی کلاستر اجرا شود.
- سرویس (Service): این قابلیت تعاریف کاری را از پادها جدا میکند. سرویسپراکسیهای کوبرنتیز به طور خودکار سرویسریکوئستها را به پاد مناسب میفرستند، حتی اگر این سرویسپراکسیها در کلاستر جابهجا یا جایگزین شده باشند.
- کوبلت (Kubelet): این سرویس بر روی نودها اجرا میشود، مانیفستهای کانتینر را میخواند و اطمینان مییابد که کانتینرهای تعریف شده راهاندازی و اجرا گردند.
- کوبکتل (Kubectl): کوبکتل ابزاری است برای پیکربندی خط فرمان در کوبرنتیز.
طرز کار کوبرنتیز چیست؟
دیپلویمنت کوبرنتیز در حال کار، کلاستر نامیده میشود. یک کلاستر کوبرنتیز به دو بخش تقسیم میشود: مرکز کنترل و ماشینهای محاسباتی (compute machines) یا نودها.
هر نود محیط لینوکس مجزایی محسوب میشود و میتواند یک ماشین فیزیکی یا مجازی باشد. هر نُد پادهایی را اجرا میکند که از چند کانتینر تشکیل شده است. مرکز کنترل مسئول حفظ وضعیت مطلوب کلاستر است، مثلاً اینکه کدام اپلیکیشنها در حال اجرا هستند و از کدام ایمیج کانتینر استفاده میکنند. ماشینهای محاسباتی در واقع برنامهها و بارهای کاری (workloads) را به اجرا در میآورند. کوبرنتیز بر سیستم عامل نظارت میکند و با پادهای کانتینرهای در حال اجرا بر روی نودها تعامل دارد. مرکز کنترل کوبرنتیز دستورات را از ادمین (یا تیم DevOps) دریافت کرده و آن دستورالعملها را به ماشینهای محاسباتی میفرستد.
این جابهجایی با سرویسهای متعددی انجام میشود تا به طور خودکار مشخص گردد که کدام نود برای تسک مورد نظر مناسب است، سپس منابع را تخصیص داده و پادهای موجود در آن نود را برای کار مورد نظر تعیین میکند.
وضعیت مطلوب یک کلاستر کوبرنتیس مشخص میکند که کدام اپلیکیشنها یا بارهای کاری باید همراه با ایمیجهایی که استفاده میکنند، اجرا شوند، کدام منابع باید در دسترس آنها قرار بگیرند و از این دست جزئیات مرتبط با پیکربندی.
از نظر زیرساخت، تفاوت کمی در نحوه مدیریت کانتینرها وجود دارد. کنترل شما بر روی کانتینرها فقط مربوط به سطح بالاتر است و نیازی به مدیریت جداگانهی هر کانتینر یا نود نخواهید داشت.
کار شما شامل پیکربندی کوبرنتیز و تعریف نودها، پادها و کانتینرهای درون آنها است. کوبرنتیز ارکستراسیون کانتینرها را انجام میدهد.
اینکه کجا کوبرنتیز را اجرا کنید، به خود شما بستگی دارد. اجرای کوبرنتیز در سرورهای فیزیکی، ماشینهای مجازی، ارائهدهندگان سرویسهای ابر عمومی و خصوصی و محیطهای ابری ترکیبی امکانپذیر است. در واقع یکی از مزایای کلیدی Kubernetes این است که بر روی زیرساختهای مختلف قابل اجراست.
نقش Docker چیست؟
داکر (Docker) میتواند بستر اجرای کانتینرهایی باشد که کوبرنتیز ارکستراسیون آنها را بر عهده دارد. زمانی که Kubernetes یک پاد را برای نود مشخصی در نظر میگیرد، کوبلت موجود در آن نود به داکر دستور میدهد که کانتینرهای مشخص شده را لانچ کند. سپس کوبلت به طور مداوم استاتوس کانتینرها را از داکر جمعآوری کرده و اطلاعات به دست آمده را روی مرکز کنترل ادغام میکند. داکر کانتینرها را در نود مورد نظر pull کرده و سپس این کانتینرها را اجرا و متوقف میکند.
بنابراین مزیت استفاده از داکر این است که به جای دستی انجام دادن تمام این کارها در تک تک کانتینرها، سیستم به طور اتوماتیک تمام این فرایندها را بر عهدهی داکر میگذارد.
چرا به کوبرنتیز نیاز دارید؟
کوبرنتیز اپلیکیشنهای کانتینرشده، ورژن قدیمی، cloud-native و برنامههایی را که به صورت میکروسرویسها بازسازی میشوند، ارائه و مدیریت میکند.
برای برآوردن نیازهای متغیر کسبوکار، تیم توسعه باید بتواند به سرعت برنامهها و سرویسهای جدید بسازد. توسعه Cloud-native با میکروسرویسهای کانتینرها شروع میشود؛ به این ترتیب فرایند توسعه با سرعت بیشتری پیش میرود و تغییر و بهینهسازی اپلیکیشنهای موجود آسانتر میشود.
اپلیکیشنهای تولیدی باید چندین کانتینر را پشتیبانی کنند و کانتینرها نیز باید در چندین هاست سرور دیپلوی شوند. Kubernetes به شما قابلیتهای مدیریت و ارکستراسیون لازم برای دیپلوی کردن کانتینرها در این مقیاس و برای این حجم کاری را میدهد.
با استفاده از ارکستراسیون Kubernetes میتوانید سرویسهای کاربردی ایجاد کنید که چندین کانتینر را پشتیبانی میکنند، کانتینرها را در یک کلاستر schedule و سپس مقیاسگذاری کنید و سلامت آنها را در طول زمان تحت کنترل داشته باشید.
کوبرنتیس برای ارائهی یک زیرساخت کانتینری جامع نیاز دارد که با سرویسهای نتورکینگ، ذخیرهسازی، امنیت، تلهمتری و بسیاری از سرویسهای دیگر ادغام شود. واضح است که وقتی مقیاس مورد نظر شما به اندازهی فضای تولید بزرگ باشد و اپلیکیشنهای مختلفی را شامل شود، برای اجرای سرویسهای مجزا، به چندین کانتینر روی یک سرور نیاز دارید که همزمان و در کنار یکدیگر کار کنند.
کانتینرهای لینوکس به برنامههای مبتنی بر میکروسرویس شما یک واحد دیپلوی ایدهآل و یک فضای اجرای مستقل اختصاص میدهد. میکروسرویسهای کانتینرها نیز سازماندهی سرویسها، از جمله ذخیرهسازی، نتورکینگ و امنیت را آسانتر میکنند. این قابلیت به طور قابل توجهی تعداد کانتینرها را چندین برابر می کند و با زیاد شدن کانتینرها، پیچیدگی محیط افزایش مییابد. Kubernetes بسیاری از مشکلات رایج مربوط به تکثیر کانتینرها را با دستهبندی آنها به صورت «پاد» برطرف میکند. پادها یک لایهی abstraction را به کانتینرهای گروهبندیشده اضافه میکنند تا بارهای کاری را schedule کنید و سرویسهای لازم (مانند نتورکینگ و ذخیرهسازی) را به کانتینرها ارائه دهید.
سایر بخشهای کوبرنتیز به شما کمک میکنند تا بار کاری را در این پادها متعادل کنید و اطمینان یابید که تعداد مناسبی از کانتینرها برای پشتیبانی از بارهای کاری در حال اجرا هستند.
با اجرای درست Kubernetes – و با کمک سایر پروژههای اوپن سورس مانند Open vSwitch،OAuth و SELinux – میتوانید تمام بخشهای زیرساخت کانتینر خود را ارکستراسیون کنید.
با کوبرنتیز رویکرد DevOps را نیز پیادهسازی کنید
توسعه اپلیکیشنهای مدرن نیازمند فرآیندهای متفاوتی نسبت به رویکردهای گذشته است. DevOps فرایند توسعه تا دیپلوی ایده را سرعت میبخشد.
DevOps در واقع به خودکارسازی وظایف عملیاتی معمول و استانداردسازی محیطها در طول چرخه عمر اپلیکیشن متکی است. کانتینرها از یک محیط یکپارچه برای توسعه، تحویل و اتوماسیون پشتیبانی میکنند و جابجایی اپلیکیشنها را بین بخشهای توسعه، آزمایش و تولید آسانتر میکنند.
از مزایای اصلی پیادهسازی دوآپس، ایجاد یک پایپلاین (pipeline) ادغام و دیپلوی مستمر (CI/CD) است. پایپلاین CI/CD به شما کمک میکند که به طور مداوم اپلیکیشنها را در دسترس مشتریان خود قرار داده و با کمترین دخالت انسانی کیفیت نرمافزار را بسنجید.
مدیریت چرخه عمر کانتینرها با Kubernetes و در کنار رویکرد DevOps به هماهنگی فرایندهای توسعه و فناوری اطلاعات برای پشتیبانی از پایپلاین CI/CD کمک میکند.
بنابراین با پلتفرمهای مناسب، چه در داخل و چه در خارج از کانتینر، میتوانید به بهترین وجه از تغییرات در فرهنگ و فرآیندها بهره ببرید.