اگر با نرمافزارهای کانتینری (containerized) سروکار داشته باشید، حتما اسم کوبرنتیز را شنیدهاید. کوبرنتیز (Kubernetes) که با عنوان K8s هم شناخته میشود، یکی از سیستمهای مدیریت و سازماندهی کانتینرها (Container Orchestration) است که کاربردهای زیادی در دواپس و توسعه و عملیات دارد. در این مقاله میخواهیم kubernetes را بررسی کنیم و به کاربردهای مختلف آن در فرآیند توسعه نرمافزار اشاره کنیم. همچنین از تفاوت بین داکر و کوبرنتیز صحبت میکنیم و نحوه راهاندازی این سیستم را توضیح میدهیم. با ما همراه باشید.
کوبرنتیس یا کوبرنتیز Kubernetes چیست؟
کوبرنتیز یک سیستم متن-باز است که برای خودکارسازی فرایندهای اجرا، استقرار و مدیریت نرمافزارهای کانتینری در مقیاس بزرگ استفاده میشود. اگر بخواهیم سادهتر بگوییم، kubernetes یک سیستم سازماندهی کانتینر است. برای این کار، Kubernetes کانتینرهایی را که برای ساخت یک برنامه استفاده میشوند، به صورت واحدهای منطقی گروهبندی میکند تا جستجو و مدیریت آنها آسانتر باشد. کوبرنتیز در سال ۲۰۱۴ توسط شرکت گوگل طراحی و عرضه شد. کلمه kubernetes در زبان یونانی به معنی ناخدا یا خلبان است؛ به همین خاطر لوگوی این نرمافزار شبیه سکان طراحی شده است. پروژه کوبرنتیز یکی از مهمترین پروژهها در بحث سازماندهی کانتینر است.
Container Orchestration چیست؟
کانتینرها مانند ماشینهای مجازی، به جداسازی فرایندها کمک میکنند؛ اما با سربار کمتر و انعطاف بیشتر. در نتیجه، کانتینرها شیوه تفکر افراد درباره توسعه، استقرار و نگهداشت نرمافزار را تغییر دادند. در یک معماری کانتینری، سرویسها و اجزای مختلفی که برای ساخت و اجرای یک نرمافزار لازمند، در کانتینرهای مختلف بستهبندی و در خوشههای فیزیکی یا ماشینهای مجازی اجرا میشوند.
این شیوه عملکرد، نیاز به سازماندهی کانتینرها یا همان Container Orchestration دارد. هدف از ارکستراسیون کانتینرها، مدیریت چرخه عمر کانتینرها در محیطهای عملیاتی بزرگ و پویا است. فرایند سازماندهی، اجرا، شبکهسازی، مقیاسپذیری و سرویسهای مختلف کانتینری را خودکار میکند. مدیریت کانتینرهای کوچک و در تعداد کم نیاز به انرژی و فرایندهای پیچیده ندارد. اما زمانی که تعداد و اندازه کانتینرها زیاد میشوند، بدون کمک container orchestration نمیتوانیم آنها را مدیریت کنیم. اینجا است که kubernetes به کمک سازمانها میآید.
اجزا و معماری کوبرنتیز
در معماری کوبرنتیز، از مفاهیم و تعاریف مختلفی استفاده میشود. بعضی از این تعاریف، از مفاهیم موجود قبلی الهام گرفتهاند و بعضی دیگر هم تنها به خود این پلتفرم تعلق دارند.
خوشهها
خوشه یا Cluster، یک مفهوم سطح بالا و مهم در kubernetes است است. خوشه به مجموعه ماشینهایی گفته میشود که کوبرنتیز (به عنوان یک برنامه خوشهای) و کانتینرهای تحت نظارت آن را اجرا میکنند. یک خوشه در kubernetes باید حتما یک master یا مدیر داشته باشد؛ مدیر سیستمی است که به سایر ماشینهای فعال در خوشه دستور میدهد و آنها را کنترل میکند. یک خوشه kubernetes با دسترسی خوب، میتواند امکانات و امتیازهای مستر را بین ماشینهای مختلف توزیع کند. اما فقط یک مستر در هر زمان میتواند به زمانبندی کارها و مدیریت و کنترل دسترسی داشته باشد.
نودها و پادها (Nodes and Pods)
هر خوشه شامل گره یا همان Node کوبرنتیز است. نودها میتوانند ماشینهای مجازی یا فیزیکی باشند. ایده نود یک ایده انتزاعی است؛ به این مفهوم که برنامه روی هر محیطی اجرا شود، kubernetes استقرار را روی همان محیط مدیریت میکند. Kubernetes حتی تعیین میکند که کانتینرها با برنامههای مشخص در کدام محیط اجرا شوند.
در کنار نود، پادها (Pods) هم وجود دارند. Pod جزئیترین و سادهترین شی در کوبرنتیز است که میتواند ساخته و مدیریت شود. نودها، پادها را اجرا میکنند و هر پاد، نماینده یک نمونه از برنامه یا فرایندهای کوبرنتیز است که از یک یا چند کانتینر تشکیل شده است. Kubernetes کانتینرهای مختلف را به صورت گروهی در هر Pod شروع، متوقف و جایگزین میکند.
پادها بر حسب نیاز روی نودها ایجاد یا از روی آنها پاک میشوند تا برنامه به حالتی که کاربر میخواهد برسد. کوبرنتیز برای این کار مفهومی انتزاعی تحت عنوان کنترلر (Controller) را در اختیار کاربر قرار میدهد تا بتواند پادها را مدیریت کند. کنترلرها با توجه به نیاز کاربر، انواع مختلفی دارند.
سرویسها
سرویس یک مفهوم انتزاعی دیگر در کوبرنتیز است. Service چگونگی دسترسی به یک گروه از پادها (یا هر شی دیگری در کوبرنتیز) از طریق شبکه را مشخص میکند. دلیل ایجاد این تعریف این است که Pod ها بنابر نیاز ساخته یا حذف میشوند، به همین خاطر باید رویهای برای مدیریت چرخه عمر برنامه ایجاد میشد.
از آن جایی که یک برنامه باید پایدار باشد و همزمان پادهای تشکیلدهنده کانتینر برنامه میتوانند پایدار نباشند، سرویس ایجاد شد. برای مثال اگر پادهای بک-اند یک برنامه تغییر کنند، پادهای فرانت-اند نباید متوجه این تغییر شوند و این دقیقا کاری است که سرویس در kubernetes انجام میدهد.
قوانین و مقررات
قوانین و مقررات kubernetes به ما این اطمینان را میدهند که تمام پادها طبق یک استاندارد مشخص رفتاری عمل میکنند. مقررات جلوی استفاده بیش از حد podها از پردازنده، حافظه، پروسس ID ها و … را میگیرد. در واقع برای هر پاد، حد مشخصی از استفاده از منابع تعیین میشود و در ترکیب با سهمیه منابع (Resource Quotas)، ترکیب بهینهای از منابع به هر تیم در کوبرنتیز تعلق میگیرد.
اینگرس (Ingress)؛ دروازه ورود و استفاده از سرویسهای کوبرنتیز
سرویسهای kubernetes برای اجرا درون یک خوشه طراحی شدهاند؛ اما شما باید بتوانید به این سرویسها از دنیای خارجی دسترسی داشته باشید. کوبرنتیز برای این کار اجزای مختلفی دارد که هرکدام درجات مختلفی از سادگی و توانمندی را دارند؛ مانند NodePort و LoadBalancer. اما سادهترین و منعطفترین ابزار برای این کار، Ingress است. اینگرس یک API است که دسترسی خارجی به سرویسهای خوشه را از طریق HTTP ایجاد میکند. البته ingress به برخی تنظیمات اولیه نیاز دارد تا بتواند به درستی کار کند.
داشبورد
یک بخش اساسی از kubernetes که به شما کمک میکند تا از سایر بخشها استفاده کنید، dashboard است. با استفاده از داشبورد، که یک رابط کاربری وب-محور است، میتوانید برنامهها را مستقر، عیبیابی و همچنین منابع خوشهها را مدیریت کنید. داشبورد به صورت پیشفرض روی سیستم نصب نشده است اما شما میتوانید به راحتی آن را به پلتفرم خود اضافه کنید.
مزایا و دلایل استفاده از kubernetes
از آنجایی که کوبرنتیز تعاریف و مفاهیم جدیدی را معرفی میکند و منحنی یادگیری آن نیز شیب تندی دارد، طبیعی است که بخواهید تاثیرات بلند مدت آن را بدانید. اما در ابتدا باید تواناییهای این نرمافزار را بشناسید تا مزایای آن را بهتر درک کنید.
کاربردهای کوبرنتیز چیست؟
Kubernetes وظیفه زمانبندی و اتوماسیون تسکها و رخدادهای مربوط به کانتینر را بر عهده دارد که در طول چرخه عمر نرمافزار ایجاد میشوند. این موارد عبارتند از:
- استقرار (Deployment): با کمک kubernetes میتوانید تعداد مشخصی کانتینر را روی یک هاست مشخص، مستقر کنید.
- عرضه (Rollouts): رول اوت تغییراتی است که در استقرار ایجاد میشود. با استفاده از kubernetes میتوانید یک رول اوت را ایجاد، متوقف، شروع و به عقب برگردانید.
- کشف سرویس (Service Discovery): کوبرنتیز میتواند به صورت خودکار یک کانتینر را در اینترنت یا برای سایر کانتینرها، با استفاده از DNS و IP آدرس به اشتراک بگذارد.
- تامین فضای ذخیرهسازی (Storage provisioning): با Kubernetes میتوانید کانتینر خود را به صورت دائمی روی فضای محلی یا ابری ذخیره کنید.
- توزیع متعادل بار (Load balancing): کوبرنتیز با توجه به ظرفیت سیستم، بار کاری را در شبکه پخش میکند تا سیستم بهینهترین عملکرد را داشته باشد.
- مقیاس خودکار (Autoscaling): با افزایش ترافیک و بار، kubernetes به صورت خودکار خوشههای جدیدی را برای توزیع مناسب بار ایجاد میکند.
- خود-ترمیمی برای دسترسی بهتر (Self-healing for high availability): با از کار افتادن یک کانتینر، کوبرنتیز به طور خودکار آن را جایگزین یا مجدد راهاندازی میکند تا دانتیم (Downtime) به حداقل برسد.
مزایای Kubernetes
با توجه به توانمندیهای کوبرنتیز، میتوانیم برای این نرمافزار به مزایای زیر اشاره کنیم:
- توانایی کنترل سلامت برنامه، روند جایگزینی، توزیع بار و ظرفیت منابع سختافزاری
- ساده کردن فرایند استقرار برنامهها از پیش تنظیم شده با استفاده از چارتهای هلم (Helm)
- تسهیل مدیریت حافظه، Secret ها و منابع مربوط به نرمافزار
- قابلیت اجرا در کلود هیبرید (Hybrid cloud) و کلود چندگانه (Multicloud)
طبق یک تحقیق، پس از استفاده از کوبرنتیز در پروژهها نتایج زیر به وجود آمد:
- بهبود ۶۵ درصدی نگهداشت، مانیتورینگ و اتوماسیون
- نوسازی و بهینهسازی ۴۶ درصدی زیرساخت
- افزایش ۲۶.۶ درصدی سرعت ارائه به بازار
راهاندازی و آموزش نصب Kubernetes
برای نصب و اجرای کوبرنتیز، باید ابتدا به خوبی این نرمافزار را بشناسید. آموزشهای مختلفی در سطح اینترنت برای نصب و کار با کوبرنتیز وجود دارد. در حالت کلی، شما باید ابتدا یک خوشه را ایجاد کنید. خوشهها همانطور که گفتیم میتوانند از یک یا چند ماشین فیزیکی یا مجازی ساخته شده باشند.
برای این کار میتوانید از minikube یا kubeadm استفاده کنید. سپس باید یک ران تایم کانتینر (Container Runtime) مانند داکر انجین یا همان پلتفرم داکر را برای اجرای کانتینرها انتخاب کنید. بعد از نصب داکر و استقرار کانتینرها، میتوانید کوبرنتیز را با کمک دو ابزاری که معرفی کردیم یعنی minikube یا kubeadm نصب کنید.
تفاوت داکر و کوبرنتیز
یکی از اشتباهات رایجی که هنگام معرفی kubernetes پیش میآید، معرفی داکر به عنوان رقیب این نرمافزار است؛ اما این معرفی درست نیست! داکر یک پلتفرم برای ساخت برنامههای کانتینری است، در حالی که کوبرنتیز برای سازماندهی و مدیریت کانتینرها یا همان Container Orchestration به کار میرود.
هرچند داکر یک سیستم سازماندهی کانتینر به نام Docker Swarm دارد، اما تعداد قابل توجهی از افراد به جای استفاده از این سیستم، از ترکیب Docker و Kubernetes استفاده میکنند. پس به طور دقیق باید بگوییم که داکر و کوبرنتیز رقیب نیستند و مکمل هم هستند؛ این در حالی است که kubernetes رقیب یکی از زیر مجموعههای داکر یعنی Docker Swarm است.
نکاتی که بهتر است درباره کوبرنتیز بدانید
در ادامه میخواهیم اشاره کوتاهی به بعضی از موارد مربوط به kubernetes داشته باشیم. این موارد بیشتر به نحوه عملکرد و استفاده از این پلتفرم مربوط میشوند و هرکدام به صورت مستقل مبحثی گسترده هستند که نیاز به آموزش نرمافزار دارند.
کشف شبکه و سرویس Kubernetes
همانطور که قبلتر هم اشاره کردیم، کوبرنتیز خود یک برنامه خوشهای است. بنابراین برای کار با این نرمافزار باید ابتدا شبکه لازم ساخته و به اصطلاح کشف شود و سپس خوشههای مربوط به برنامهها روی آن پیادهسازی شوند. سرویسها هم که بخش مهمی از شبکه کوبرنتیز هستند، بعد از شبکهسازی برای استفاده از شبکه و برنامههای مستقر در کوبرنتیز مورد استفاده قرار میگیرند.
امنیت و احراز هویت Kubernetes
بحث امنیت داده و اطلاعات یکی از بحثهای مهم در هر شرکت و سازمان است. شرکتهایی که در تیمهای توسعه و عملیات خود از کوبرنتیز استفاده میکنند، همواره دغدغه امنیت و دسترسی به کانتینرها را دارند. اما کوبرنتیز استراتژیهای امنیت و احراز هویت (Authentication) مختلفی برای کاربران دارد که از بین آنها میتوانیم به موارد زیر اشاره کنیم:
- گواهی کاربر (client certificates)
- توکنهای حامل (bearer tokens)
- پروکسی احراز هویت (authenticating proxy)
مدیریت ذخیرهسازی Kubernetes
مدیریت ذخیرهسازی در کوبرنتیز به معنای پیادهسازی الگوریتمها و ایجاد پیکربندی است که بتواند بخشهای مختلف kubernetes را کنترل کند. در ابتداییترین حالت، شما باید بتوانید ذخیرهسازی دائم را برای Pods یا همان کوچکترین بخش کوبرنتیز پیادهسازی کنید و سپس مرحله به مرحله پیش بروید تا در نهایت بتوانید خوشهها را مدیریت کنید.
جمعبندی
Kubernetes یکی از محبوبترین ابزارها برای مدیریت کانتینر است که توسط شرکتهای مختلف استفاده میشود. با کمک کوبرنتیز، مدیریت نرمافزارهای بزرگ که برای توسعه و اجرا نیاز به چندین کانتینر دارند سادهتر میشود. در این مقاله سعی کردیم تا بیشتر با کوبرنتیز آشنا شویم و بخشهای مختلف آن را توضیح دادیم.
دیدگاهتان را بنویسید