کوبرنتیز چیست؟ آشنایی با معماری، کاربرد و مزایای آن
اگر به دنبال یک سیستم همهجانبه و کاربردی برای مدیریت برنامهها و سیستمهای تحت کانتینر (Container) هستید، در ادامه این مطلب با ما همراه باشید تا ببینیم ابزار کانتینر ارکستریشن کوبرنتیز چیست و چطور میتوان از آن استفاده کرد.
کوبرنتیز چیست؟
قبل از آن که بخواهیم با ویژگی و کاربردهای Kubernetes آشنا شویم و بخواهیم آن را بیشتر معرفی کنیم، بهتر است به پاسخ این سؤال بپردازیم که کوبرنتیز چیست و دقیقاً چه کاری انجام میدهد. کوبرنتیز، که به K8s نیز شناخته میشود، در سال ۲۰۱۴ توسط گوگل و به صورت اوپن سورس عرضه شد. هدف کوبرنتیز ارائه روشهای بهتر و کاربردی برای مدیریت،، مقیاسبندی، نگهداری خودکار و توزیع سرویسهای مبتنی بر کانتینر و به عبارتی پیادهسازی سرویسها به صورت مایکروسرویس. پیش از این در مقالهای جداگانه به این موضوع پرداختیم که کانتینر چیست. علاوه بر این در صورتی که میخواهید با ابزارهای کانتینر ارکستریشن آشنا شوید، پیشنهاد میکنیم مقاله «ارکستریشن چیست» را مطالعه نمایید.
برای آن که یک برنامه بهعنوان ابزاری کامل و همهجانبه در نظر گرفته شود، باید کانتینرهای زیادی را شامل شده و همه آنها باهم بر اساس روشهای خاصی کار کنند. کوبرنتیز مجموعهای از هاستهای مجازی (سرورها) یا هاستهای فیزیکی را به پلتفرمهای دومنظوره تبدیل میکند که…
- بارهای کاری کانتینر را میزبانی کرده و منابع موردنیاز آنها برای ذخیرهسازی، محاسبات و شبکه را فراهم کند.
- همچنین مدیریت تعداد قابلتوجهی از اپلیکیشنهای پیادهسازی شده به صورت مایکروسرویس را برعهده گرفته و با تطابق آنها با تغییرات و چالشها، به دردسترس بودن مداوم آنها کمک کند.
اصطلاحاتی که باید درباره Kubernetes بدانیم؟
حالا که میدانیم کوبرنتیز چیست و چه کاری انجام میدهد، برای شروع یادگیری کار با آن بهتر است بدانیم رایجترین اصطلاحات کوبرنتیز چیست.
صفحه کنترل (Control Plane)
صفحه کنترل (Control plane) شامل مجموعه فرایندهایی است که گرهها (Nodes) را در کوبرنتیز کنترل کرده و بهعنوان مبدأ تمام وظایف (task) در این پلتفرم، شناخته میشود. صفحه کنترل شامل موارد زیر است:
- سرور Kubernetes API برای فراهم کردن رابط برنامهنویسی (API) جهت کنترل Kubernetes
- Etcd یک ذخیرهسازی key-value برای دادههای کلاستر
- Kubernetes Scheduler برای مقایسه podهای جدید با گرههای موجود
- Kubernetes Controller Manager برای اجرای تعدادی فرایند جهت مدیریت خرابی گرهها، کنترل تکرار، تجمیع سرویسها و پادها در نقاط پایانی، و کنترل حسابها و توکنهای دسترسی
- Cloud controller manager برای کمک به مدیریت APIهای ارائهدهندگان ابری خاص در مورد جنبههایی مانند مسیرهای زیرساخت خاص و تعادل بار
گرهها (Nodes)
گرهها، ماشینهایی هستند که وظایف درخواستی و تعیینشده توسط صفحه کنترل را اجرا میکنند. هر گره، میزبانی بخشی از برنامه توزیعشده را برعهده دارد. این میزبانی، با استفاده از Docker یا فناوری کانتینر مشابه، ازجمله Rocket در CoreOS، انجام میشود. علاوه بر این، گرهها وظیفه اجرای دو نرمافزار دیگر، یعنی kube-proxy برای دسترسی برنامه در حال اجرا و kubelet برای دریافت دستورها از صفحه کنترل k8s را هم برعهده دارند. یکی دیگر از کارهایی که گرهها انجام میدهند، اجرای فلانل (flannel) است. فلانل یک فرم شبکه با پشتوانه etcd برای کانتینرها است.
گرهها شامل موارد زیر هستند؛
- Kubelet برای بررسی در حال اجرا بودن کانتینرها در یک pod
- پراکسی شبکه Kubernetes برای حفظ قوانین شبکه
- Docker در یک کانتینر یا نوع دیگری از runtime کانتینر
کلاستر (Cluster)
یک خوشه یا کلاستر شامل مجموعهای از یک گره اصلی یا Master و تعدادی گرههای فرعی یا Worker Node است که از آن برای اجرای برنامههای کانتینری مدیریتشده، استفاده میشود.
Pod
به گروهی از یک یا چند کانتینر که در یک گره مستقر (deployed) شده باشند، pod گفته میشود. هر کانتینر، یک آدرس IP، نام میزبان یا Hostname و منابع دیگر را در یک pod به اشتراک میگذارد.
پیادهسازی یا Implementation
پیادهسازی (Implementation) وظیفه مدیریت برنامههای شبیهسازی شده (replicated) و نمایش داده شده توسط پادها را برعهده دارد.
Replica Set
ست رپلیکا به تعداد مشخصی از کپیهای پاد اجازه اجرای همزمان میدهد.
Replication controller
وظیفه کنترل اجرای چند نسخه مشابه از یک پاد روی کلاستر، برعهده Replication Controller است.
سرویس (Service)
سرویس، نحوه دسترسی به اپلیکیشنهایی که با مجموعهای از پادها مرتبط هستند را مشخص میکند. سرویسها معمولا مشخصکننده پورتها و لود بالانسرها هستند و میتوانند برای کنترل دسترسی داخلی یا خارجی به کلاستر کاربرد داشته باشند..
Kubelet
وظیفه دارد اجرای کانتینرها در پادها را بررسی کند.
Kubectl
Kubectl یک ابزار پیکربندی خط فرمان برای Kubernetes است.
همانطور که میبینید، برخی اصطلاحات و عملکردهای اساسی وجود دارد که درک آنها برای آن که بدانیم کوبرنتیز چیست و چطور کار میکند، اهمیت دارد. این اصطلاحات را در خاطر داشته باشید تا به بررسی جزئیات دیگری درباره Kubernetes بپردازیم.
ویژگیهای Kubernetes
یکی از مهمترین مواردی که در این مقاله باید به آن بپردازیم، این است که ویژگیهای کوبرنتیز چیست و چه قابلیتهایی را ارائه میدهد. این ویژگیها عبارتاند از:
۱. ایجاد و از بین بردن کانتینر
امکان ایجاد منابع بهصورت خودکار و بر اساس فایلهای پیکربندی YAML، یکی از مهمترین مزایای استفاده از کوبرنتیز است. این ویژگی به صرفهجویی در زمان هم کمک میکند؛ زیرا لازم نیست برای ایجاد منابعی مانند پادها بهصورت دستی اقدام کرده و زمانی را برای این کار اختصاص دهید. همچنین میزان خطاهای انسانی کاهش پیدا کرده و روند تکرار منابع در چندین سرور، ساده میشود.
۲. زیرساخت مقیاسپذیر خودکار
برای مدیریت استقرار یا دیپلویمنت در مقیاسهای بزرگ، ویژگی مقیاسپذیری خودکار در کوبرنتیز اهمیت ویژهای پیدا میکند. این قابلیت بر اساس عواملی مانند استفاده از CPU، استفاده از حافظه و ترافیک شبکه، به اجرای روان برنامهها ازطریق فراهم کردن منابع موردنیاز آنها کمک میکند. این ویژگی هم مداخلات دستی را حذف کرده و هم به شما اطمینان میدهد که میتوانید جهشهای ناگهانی ترافیک را بدون مشکل مدیریت کنید.
۳. Horizontal Scaling
با ویژگی مقیاسپذیری افقی یا Horizontal Scaling در کوبرنتیز میتوانید تعداد گرهها را در یک کلاستر افزایش یا کاهش دهید. این کار را میتوان با افزودن یا حذف کپی از دیپلویمنت انجام داد. کنترلکننده دیپلویمنت باعث میشود تا تعداد کپیها با تعداد موردنظر، تطابق داشته باشد.
۴. متعادل کننده بار (Load Balancer)
برای متعادل کردن بارهای کاری در چندین گره در یک کلاستر، ویژگی Load Balancer در Kubernetes اضافه شده است. این ویژگی تضمین میکند که هیچیک از گرهها overload نشده و درنتیجه حجم کاری بهصورت یکسان توزیع شود. درنهایت، این ویژگی باعث میشود عملکرد کلاستر بهبودیافته و احتمال خرابی سیستم، کاهش پیدا کند.
۵. Liveness و Readiness
اگر بخواهیم بگوییم که یکی از مهمترین ویژگیهای کوبرنتیز چیست احتمالاً باید به ویژگی Liveness و Readiness اشاره کنیم. این ویژگی به شما اطمینان میدهد که اجرای برنامهها همانطور که در نظر گرفته شده، انجام میشود. کاوشگرهای Liveness بررسی میکنند که آیا یک برنامه هنوز زنده است یا نه. درصورتیکه برنامه اجرا نشود، آن را مجدداً راهاندازی میکنند. از کاوشگرهای Readiness برای تعیین آماده بودن برنامه برای دریافت ترافیک، استفاده میشود.
۶. زیرساخت بسیار قابل پیشبینی (Highly predictable)
یکی دیگر از ویژگیهای مهم Kubernetes، فراهم کردن زیرساخت Highly predictable است. با استفاده از این ویژگی، همیشه میتوانید ببینید که دادههای شما کجا ذخیره شده و چطور به آنها دسترسی پیدا میکنید. این قابلیت، موجب میشود زیرساخت را بهتر مدیریت کرده و دادهها را امن نگه دارید. همچنین این سطح از قابلپیشبینی بودن کمک میکند تا پشتیبانگیری خودکار و بازیابی اختلالات احتمالی، سادهتر شود. درنهایت، این روند باعث میشود زمان و عملکردهای لازم برای مدیریت زیرساخت، به حداقل برسد.
۷. سیستم نصب (Mount) و ذخیرهسازی برای اجرای اپلیکیشنها
یکی دیگر از ویژگیهای کوبرنتیز، ارائه یک سیستم Mount و ذخیرهسازی برای اجرای برنامهها است. طراحی این سیستم بهگونهای است که دسترسی به دادههای ذخیرهشده در یک سرور را بدون نیاز به کپی کردن دادهها، فراهم کند. این ویژگی معمولاً زمانی اهمیت پیدا میکند که باید دادههای برنامه در یک مکان مشترک مانند یک دیتابیس، بررسی شود. توسعهدهندگان با استفاده از این ویژگی میتوانند از ایجاد و نگهداری زیرساخت ذخیرهسازی جداگانه بینیاز شوند.
۸. استفاده کارآمد از منابع
با یک زمانبندی هوشمند، Kubernetes اطمینان حاصل میکند که پادها فقط روی گرههایی اجرا میشوند که منابع کافی برای پشتیبانی از آنها وجود دارد. این ویژگی باعث میشود تا استفاده بهینه از منابع تا حد امکان تضمین شده و هیچ یک از گرهها دچار مشکل Overload نشوند. همچنین کوبرنتیز قادر است بر اساس تغییرات در میزان تقاضا، بهصورت پویا، پادها را کاهش یا افزایش دهد. این ویژگی باعث میشود تا Podها همیشه عملکرد بهینهای داشته باشند و منابع هدر نرود.
۹. مدیریت خودکار امنیت، شبکه و اجزای شبکه
میدانیم که کوبرنتیز یک سیستم همهجانبه کانتینر است که مدیریت امنیت، شبکه و اجزای شبکه را بهصورت خودکار فراهم میکند. این قابلیت به کاربران اجازه میدهد تا اپلیکیشنهای کانتینری را در یک محیط کلاستری، مستقر و مدیریت کنند. نحوه طراحی کوبرنتیز بهگونهای است که با توزیع بارهای کاری در چند Node، همچنان دسترسی و مقیاسپذیری بالایی را ارائه دهند.
کاربردهای کوبرنتیز چیست؟
یکی از مهمترین مزیتهای استفاده از کوبرنتیز، بهخصوص اگر یک برنامهنویس آن را برای فضای ابری بهینهسازی کند، آن است که میتواند بستری برای زمانبندی و اجرای کانتینرها روی کلاسترهایی از ماشینهای فیزیکی یا مجازی (VM) فراهم کند.
به طور عمده، با کوبرنتیز میتوانید یک زیرساخت مبتنی بر کانتینر را در محیطهای پروداکشن پیادهسازی کنید. ازآنجاییکه کوبرنتیز روی اتوماسیون وظایف تمرکز دارد، میتوانید بسیاری از کارهایی را که پلتفرمهای برنامه یا سیستمهای مدیریت دیگر ارائه میدهند، برای کانتینرهای خود انجام دهید.
توسعهدهندگان با استفاده از الگوهای کوبرنتیز میتوانند اپلیکیشنهای داخلی روی سرویس ابری را بهعنوان یک پلتفرم زمان اجرا، ایجاد کنند. اما الگوهای کوبرنتیز چیست و چطور میتوان از آن استفاده کرد؟ الگوها ابزارهای موردنیاز برای ساخت برنامهها و سرویسهای مبتنی بر کانتینر هستند که توسط توسعهدهندگان استفاده میشود.
بیایید ببینیم مهمترین کاربردها و عملکردهای Kubernetes چیست. مهمترین کاربردهای این نرمافزار، عبارت است:
- هماهنگی کانتینرها در چند هاست
- استفاده بهینهتر از سختافزار برای به حداکثر رساندن بهینگی منابع موردنیاز
- کنترل دیپلویمنت (Deployment) و بهروزرسانی برنامهها و خودکار کردن آنها
- نصب و اضافه کردن فضای ذخیرهسازی برای اجرای برنامههای Stateful
- مقیاسبندی اپلیکیشنهای کانتینری و منابع آنها
- مدیریت سرویسها برای تضمین اجرای مطلوب برنامههای مستقرشده
- بررسی و اصلاح برنامهها با استقرار خودکار، راهاندازی خودکار، تکثیر خودکار و مقیاسبندی خودکار
اگرچه با کوبرنتیز میتوانید تمام این عملکردهای مهم را اجرا کنید، اما ارائه کامل آنها، به پروژههای دیگر هم متکی است. با اضافه شدن برخی پروژهها و افزونههای بیشتر میتوان به طور کامل درک کرد که کارایی کوبرنتیز چیست. برخی از مهمترین عملکردها و پروژههای اضافی موردنیاز برای Kubernetes عبارتاند از:
- رجیستری، ازطریق پروژههایی مانند Docker Registry
- شبکهسازی، ازطریق پروژههایی مانند OpenvSwitch و intelligent edge routing
- مانتورینگ، ازطریق پروژههایی مانند Kibana ،Hawkular و Elastic.
- امنیت، ازطریق پروژههایی مانند LDAP ،SELinux ،RBAC و OAUTH
- اتوماسیون، با اضافه شدن playbookهای Ansible برای نصب و مدیریت چرخه عمر کلاستر
- سرویسها، ازطریق کاتالوگ غنی از الگوهای محبوب برنامهها
مزایای کوبرنتیز چیست؟
با استفاده از کوبرنتیز و با کانتینرها، مطمئن خواهید بود که برنامههای شما همه آن چیزی را که برای اجرا نیاز دارند، خواهند داشت. اما مهمترین مزایای کوبرنتیز چیست و بهخصوص سازمانها چه ویژگیهای مثبتی را با استفاده از Kubernetes دریافت میکنند؟ این مزایا عبارتاند از:
- مقیاسبندی خودکار (Autoscale) و افزایش یا کاهش دیپلویمنت بر اساس تقاضا
- یافتن سرویسها و امکان نظارت روی خدمات کانتینر ازطریق آدرس DNS یا IP
- امکان تثبیت دیپلویمنت از طریق توزیع ترافیک شبکه
- مدیریت فضای ذخیرهسازی و امکان انتخاب بین گزینههای ذخیرهسازی محلی (local) یا ابری
- امکان مدیریت نسخهها و انتخاب انواع کانتینرهای موردنظر برای اجرا یا جایگزین کردن
- حفظ امنیت ازطریق بهروزرسانی ایمن رمزهای عبور، نشانههای OAuth و کلیدهای SSH مربوط به تصاویر کانتینر خاص
شما میتوانید از این نرمافزار برای کاربردهای بسیار متنوع از فرایند توسعه جتهای جنگنده گرفته تا روند یادگیری ماشینی (Machine Learning) استفاده کنید.
معایب و چالشهای استفاده از Kubernetes
اگرچه ویژگیهای متنوع Kubernetes باعث شده بتوان آن را برحسب نیاز پیکربندی کرده و علاوه بر این هر نوع برنامهای را پشتیبانی میکند، اما لازم است بدانیم که چالشهای استفاده از کوبرنتیز چیست.
برای مثال، یکی از مهمترین نقاط ضعف این نرمافزار آن است که درک و استفاده از آن چندان هم ساده نیست. بهطورکلی، نمیتوان گفت که کوبرنتیز میتواند همواره راهحل مناسبی برای حجم کاری مشخص باشد. به همین دلیل است که در اکوسیستم کوبرنتیز تعدادی ابزارهای داخلی گنجانده شده تا سازمانها متناسب با حجم کاری خاص خود، بتوانند با استفاده از این ابزارها مشکلاتشان را حل کنند.
کوبرنتیز بهجای استقرار کد منبع، کانتینرها را مستقر میکند، و به همین دلیل اپلیکیشنها را نمیسازد. برای ورود به این سیستم و همچنین استفاده از میانافزارها (middleware)، نظارت، پیکربندی، CI/CD و بسیاری عملکردهای دیگر، به ابزارهای اضافی در کوبرنتیز نیاز دارید. البته نمیتوان توسعهپذیری کوبرنتیز را نادیده گرفت.
نحوه عملکرد کوبرنتیز
پس از آن که با کوبرنتیز و اصطلاحات رایج آن آشنا شدیم، وقت آن است تا روند کار این نرمافزار را بررسی کنیم. بهطورکلی، میتوان نحوه عملکرد این پلتفرم را در چهار مرحله اصلی خلاصه کرد. در ادامه میبینیم این مراحل در Kubernetes چیست و روند عملکرد آن به چه صورت است.
مرحله اول: برنامهریزی عملکرد
در مرحله اول، زمانی که توسعهدهندگان یک برنامه چند کانتینری را ایجاد میکنند، برای کار هماهنگ همه قسمتها برنامهریزی کرده و تعیین میکنند که چه تعدادی از هر مؤلفه باید اجرا شود. علاوه بر این، برای مواجه شدن با چالشهای احتمالی، مانند ورود ناگهانی و همزمان تعداد زیادی از کاربران، آماده میشوند.
مرحله دوم: ذخیره مؤلفههای برنامه کانتینری
در این مرحله، ذخیره مؤلفههای برنامه کانتینری در یک رجیستری کانتینر انجام شده و روند آن در یک یا چند فایل متنی حاوی پیکربندی، ذخیره میشود. سپس برای شروع برنامه، اعمال پیکربندی به کوبرنتیز انجام میشود.
مرحله سوم: ارزیابی و پیادهسازی وظایف کوبرنتیز
در این مرحله، تعیین میشود که وظایف ارزیابی و پیادهسازی پیکربندی تعیین شده در مرحله قبلی در کوبرنتیز چیست و تا زمانی که پیکربندی خلاف آن تعیین شود، حفظ خواهد شد. این روند شامل:
- تجزیهوتحلیل پیکربندی و همگامسازی الزامات آن با سایر پیکربندیهای برنامه اجراشده روی سیستم
- یافتن منابع مناسب برای اجرای کانتینرهای جدید (برای مثال، برخی کانتینرها ممکن است به منابعی مانند GPU نیاز داشته باشند که در هر هاست وجود ندارد)
- کمک به عملکرد مداوم برنامه ازطریق دریافت Containers images از رجیستری، راهاندازی کانتینرهای جدید و اتصال آنها به یکدیگر و به منابع سیستم (مانند ذخیرهسازی مداوم)
مرحله چهارم: نظارت و کنترل کوبرنتیز
درنهایت، کوبرنتیز همه این مراحل را بررسی کرده و با نظارت روی روند کلی عملکرد، از انحراف رویدادهای واقعی از حالتهای موردنظر جلوگیری و در چنین شرایطی، آنها را اصلاح میکند. برای مثال، در صورت از کار افتادن یک کانتینر، کوبرنتیز آن را مجدداً ریستارت کرده و یا اگر سرور اصلی از کار بیفتد، منابعی را برای اجرای کانتینرهای میزبانی شده روی آن گره، پیدا میکند.
همچنین اگر ترافیک ورودی به یک برنامه افزایش پیدا کند، کانتینرها مطابق با قوانین تعیین شده در پیکربندی اولیه، برای مدیریت بار اضافی کاهش پیدا میکند. پس بهطورکلی در پاسخ به این سؤال که نحوه عملکرد کوبرنتیز چیست میتوان گفت که شامل چهار مرحله برنامهریزی، ذخیره مؤلفهها، ارزیابی و درنهایت، نظارت و کنترل است.
کجا میتوان Kubernetes را اجرا کرد؟
یکی از مهمترین سؤالاتی که درباره این نرمافزار وجود دارد، این است که پلتفرم موردنیاز و سازگار برای اجرای کوبرنتیز چیست و کجا میتوان آن را اجرا کرد؟
بهطورکلی، میتوان کوبرنتیز را روی طیف گستردهای از سیستمعاملهای لینوکس اجرا کرد و حتی نودهای ورکر امکان اجرا روی ویندوز سرور را دارند. یک کلاستر کوبرنتیز قادر است تا صدها ماشین مجازی یا فیزیکی را در یک دیتاسنتر خصوصی یا دیتاسنتر ابری، پوشش دهد. همچنین میتوان Kubernetes را روی دسکتاپهای توسعهدهندگان، سرورهای edge، مایکروسرورهایی مانند Raspberry Pi یا دستگاههای کوچکتر مانند موبایل و دستگاههای IoT، اجرا کرد.
جمعبندی
در این مطلب، به طور کامل بررسی کردیم که کوبرنتیز چیست و چه کاربردهایی دارد. همچنین با ویژگیها و نحوه عملکرد آن آشنا شده و دیدیم که قابلیتهای ویژه Kubernetes چیست که باعث شده این نرمافزار، تا این اندازه اهمیت داشته باشد. توسعهپذیری کوبرنتیز باعث میشود تا بتوان از این ابزارها برای کاربردهای بسیار متنوع، از استفاده از آن در فرایند تولید دستگاههای IoT گرفته تا حتی طراحی جتهای جنگی، کمک گرفت.
در صورتیکه نیاز به راهاندازی راهکار کوبرنتیز اختصاصی سازمان خود دارید، میتوانید طراحی و اجرای کوبرنتیز سازمانی خود را به ابر زَس بسپارید تا تحت «سرویس مدیریت شده» این امکان را در اختیارتان قرار دهد.