تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

کوبرنتیز (Kubernetes) چیست و چگونه کار می‌کند؟


۱۰ اسفند ۱۴۰۳

کوبرنتیز (Kubernetes) یک پلتفرم متن‌باز، توسعه‌پذیر و قابل‌حمل برای مدیریت برنامه‌های کانتینری است. در کوبرنتیز با خودکارسازی فرایندها و ساده‌سازی پیکربندی اپلکیشن‌ها، زمان و منابع مورد نیاز برای اجرای برنامه کاهش پیدا می‌کند. محبوبیت کوبرنتیز به خاطر داشتن ابزارها و پشتیبانی‌ای گسترده آن است.

در این مقاله می‌خوانید:

  • کوبرنتیز چیست؟
  • کوبرنتیز چگونه کار می‌کند؟
  • کانتینر چیست؟
  • کاربردهای کوبرنتیز چیست؟
  • مقایسه داکر و کوبرنتیز
  • معماری کوبرنتیز به چه صورت است؟
  • مزایای استفاده از کوبرنتیز
  • جمع‌بندی
  • سوالات متداول

کوبرنتیز چیست؟

Kubernetes از کلمه یونانی سکان‌دار یا خلبان گرفته شده و به عنوان K8S شناخته می‌شود، کوبرنتیز یک پلتفرم ارکستراسیون کانتینر متن‌باز است. این پلتفرم امکان استقرار و مدیریت بهینه برنامه‌های کانتینری را در میان مجموعه‌ای از کامپیوترها یا زیرساخت‌های ابری فراهم می‌کند. Kubernetes با خودکارسازی وظایف مختلف، فرایند اجرای برنامه‌های ابری را ساده‌تر می‌کند. شاید جالب باشد بدانید، این ابزار نتیجه تجربه ۱۵ ساله گوگل در مدیریت اپلیکیشن‌های کانتینری است و جامعه متن‌باز هم در توسعه آن مشارکت زیادی داشته‌اند.

گوگل از اولین شرکت‌های پیشگام در فناوری کانتینر لینوکس بود که برای استقرار بیش از دو میلیارد کانتینر در هفته از پلتفرم Borg استفاده می‌کند که پایه‌گذار Kubernetes به‌شمار می‌رود. کانتینرها به‌خاطر مزایای زیادی مثل اجرای پروژه‌‌ها مستقل از زیرساخت، محبوبیت زیادی پیدا کرده‌اند.

کوبرنتیز چگونه کار می‌کند؟

همانطور که در بالا مطرح کردیم، کوبرنتیز به عنوان یک پلتفرم ارکستراسیون کانتینر، مسئولیت مدیریت و خودکارسازی فرایندهای استقرار، مقیاس‌پذیری و نظارت روی برنامه‌های کانتینری را بر عهده دارد.

حالا بیایید برای درک بهتر روش کار کوبرنتیز نگاهی به اجزای اصلی آن بیاندازیم:

کلاستر Kubernetes: کوبرنتیز برنامه‌های کانتینری را در یک مجموعه از ماشین‌ها به‌نام کلاستر مدیریت و نگهداری می‌کند. هر کلاستر شامل دو بخش اصلی است: Node‌ها و Master Node است.

Pod: کوچک‌ترین واحد اجرایی در کوبرنتیز، Pod است. یک Pod می‌تواند یک یا چند کانتینر را که منابع مشترک مانند شبکه و حافظه دارند، در خود جای دهد. به‌طور معمول، هر Pod یک کانتینر را اجرا می‌کند، اما گاهی برای مقاصد خاص، چند کانتینر با هم در یک Pod قرار می‌گیرند.

Deployment: برای مدیریت تعداد Pod و به‌روزرسانی آن‌ها، از مفهوم Deployment استفاده می‌شود.با این ابزار شما می‌توانید تعداد Podهای در حال اجرا را مشخص کنید.

Service: برای دسترسی به Pod از خارج از کلاستر، از Service‌ها استفاده می‌شود. این‌ها یک لایه انتزاعی برای دسترسی به برنامه‌های در حال اجرا در Pods فراهم می‌کنند و امکان مسیریابی درخواست‌ها را به‌صورت خودکار بین Pods مختلف فراهم می‌کنند.

Scheduler: وقتی یک Pod نیاز به اجرا دارد، Scheduler وظیفه دارد که آن را به یک Node مناسب اختصاص دهد. این فرآیند بر اساس منابع موجود، اولویت‌ها و سیاست‌های تعریف‌شده انجام می‌شود.

Controller: کنترلرها مسئول مدیریت وضعیت مطلوب سیستم هستند. به‌طور مثال، ReplicaSet به‌طور خودکار تعداد معین Pod را نگه می‌دارد و در صورت خرابی یک Pod، آن را مجدداً راه‌اندازی می‌کند.

Namespace: برای جدا کردن و مدیریت منابع در سطح کلاستر، از Namespaces استفاده می‌شود. این ابزار به شما امکان می‌دهد منابع مختلف را به بخش‌های مختلف تخصیص دهید، که به ویژه در محیط‌های بزرگ و پیچیده مفید است.

کانتینر چیست؟

کانتینر را به عنوان یک بسته‌ای در نظر بگیرید که محیطی ایزوله و مستقل برای اجرای برنامه‌ها فراهم می‌کند. برخلاف ماشین‌های مجازی که وابسته به سیستم‌های عامل هستند، کانتینرها بدون نگرانی درباره سیستم‌عامل و یا زیرساخت، پروژه را در محیط‌های مختلف تست و راه‌اندازی می‌کنند.

کانتینرها به‌طور مستقل از زیرساخت عمل می‌کنند و می‌توان آن‌ها را در توزیع‌های مختلف سیستم‌عامل‌ها اجرا کرد. در مقایسه با ماشین‌های مجازی می‌توان مزایای زیر را برای کانتینرها شمرد:

  • عدم وابستگی به زیرساخت
  • کاهش دغدغه‌های تولید و استقرار اپیلیکیشن
  • سرعت بالا در راه‌اندازی
  • توزیع‌های پرتابل در OS و فضای ابری
  • امنیت بالا
  • کاهش بار روی زیرساخت

تکنولوژی ماشین مجازی به‌خوبی شناخته شده است، اما کانتینرها تکنولوژی جدیدتری هستند که هنوز به‌طور کامل شناخته نشده‌اند و به معرفی بیشتری نیاز دارند. این تکنولوژی به‌ویژه برای محیط‌های سروری و ابری جذاب است. کمپانی‌هایی مانند فیسبوک و گوگل سرمایه‌گذاری زیادی در فناوری کانتینر کرده‌اند؛ به‌طور مثال، هر یک از سرویس‌های Google Docs برای هر کاربر یک کانتینر اختصاص می‌دهد. مایکروسافت دیرتر وارد این عرصه شد، اما کانتینر، ویندوز را به‌عنوان راهی برای ارائه سرویس‌های کانتینر روی پلتفرم ویندوز معرفی کرده است.

کاربردهای کوبرنتیز چیست؟

اگر شما فقط به یک کانتینر برای اپلیکیشن خود نیاز دارید، استفاده از کوبرنتیز ممکن است برای شما مناسب نباشد. تصور کنید که شما یک نفر در یک شرکت کوچک دارید؛ در این شرایط، نیازی به داشتن یک شرکت بزرگ برای مدیریت یک نفر نخواهید داشت. در حقیقت، کوبرنتیز هم برای چنین وضعیتی ضروری نیست.

پس چه زمانی باید از کوبرنتیز استفاده کنیم؟ برای روشن شدن این موضوع، بیایید به مثال شرکت‌های بزرگ نگاه کنیم. فرض کنید شما یک شرکت بزرگ با تیم‌های مختلف از جمله فروش، مارکتینگ، فنی و منابع انسانی دارید. در اینجا، شما نیاز به استخدام و مدیریت افراد مختلف خواهید داشت.

کوبرنتیز ارزش واقعی خود را زمانی نشان می‌دهد که شما تعداد زیادی اپلیکیشن کانتینری داشته باشید و نیاز به مدیریت و هماهنگی این اپ‌ها در مقیاس بزرگ داشته باشید. کار اصلی کوبرنتیز مدیریت اپلیکیشن‌ها و ساده‌سازی در استقرار و توسعه‌پذیری تعداد زیاد کانتینرهاست.

اگر به دنبال بهینه‌سازی فرایند توسعه اپلیکیشن‌هایتان در محیط ابری باشید، کوبرنتیز (Kubernetes) در پیاده‌سازی کامل زیرساخت مبتنی‌بر کانتینر در محیط‌های توسعه به شما کمک می‌کند.

از آن‌جا که این پلتفرم به‌طور خاص برای خودکارسازی تسک‌های عملیاتی طراحی شده، به شما این امکان را می‌دهد که بسیاری از وظایف دیگر را نیز روی کانتینرها انجام دهید. توسعه‌دهندگان با استفاده از ابزارهای خاص کوبرنتیز و الگوهای آن، می‌توانند برنامه‌های ابری خاص را به‌عنوان پلتفرم‌های ران‌تایم تولید کنند.

در ادامه برخی از کاربردهای کوبرنتیز لیست شده است:

مدیریت کانتینرها در مقیاس بزرگ: کوبرنتیز می‌تواند هزاران کانتینر را مدیریت و باهم هماهنگ‌ کند، که برای سازمان‌های بزرگ و پروژه‌های مقیاس‌پذیر ضروری است.

خودکارسازی استقرار و به‌روزرسانی‌ها: کوبرنتیز فرآیند استقرار و به‌روزرسانی اپلیکیشن‌ها را خودکار می‌کند، این ویژگی به تیم‌های توسعه کمک می‌کند تا بدون دخالت دستی، تغییرات جدید را اعمال کنند.

مقیاس‌پذیری خودکار: کوبرنتیز توانایی مقیاس‌پذیری خودکار کانتینرها و منابع مورد نیاز برای اپلیکیشن‌ها را دارد و شما می‌توانید به‌طور دینامیک منابع را افزایش یا کاهش دهید.

مدیریت اپلیکیشن‌های حالت‌دار (Stateful): کوبرنتیز می‌تواند اپلیکیشن‌های حالت‌مند مانند پایگاه‌داده‌ها را نیز مدیریت کند.

مدیریت پیکربندی و اسرار (Secrets): کوبرنتیز به‌راحتی می‌تواند پیکربندی‌ها و اطلاعات حساس (مانند رمزهای عبور) را مدیریت کند و آن‌ها را به‌صورت ایمن به اپلیکیشن‌ها تحویل دهد.

نظارت و ثبت لاگ‌ها: کوبرنتیز با ابزارهایی مانند Prometheus و Grafana، نظارت بر وضعیت اپلیکیشن‌ها و منابع را فراهم می‌کند.

مقایسه داکر و کوبرنتیز

داکر (Docker) یک ابزار متن‌باز محبوب برای مدیریت کانتینرها است که در دو نسخه ارائه می‌شود: Community Edition (CE) که کاملاً رایگان است و Enterprise Edition (EE) که امکانات بیشتری برای مدیریت حرفه‌ای کانتینرها و پشتیبانی دارد. این ابزار به توسعه‌دهندگان کمک می‌کند تا برنامه‌های خود را در محیط‌های ایزوله اجرا کنند و از مزایای انعطاف‌پذیری و استقرار سریع بهره ببرند.

برای آشنایی با داکر (Docker) این مقاله را بخوانید: داکر (Docker) چیست؟

اگرچه داکر و کوبرنتیز هر دو برای مدیریت کانتینرها استفاده می‌شوند، اما تفاوت‌های مهمی دارند. داکر بیشتر بر ایجاد و اجرای کانتینرها تمرکز دارد، درحالی‌که کوبرنتیز یک پلتفرم قدرتمند برای ارکستراسیون و مدیریت مقیاس‌پذیر کانتینرها است. ویژگی‌های ماژولار و انعطاف‌پذیر کوبرنتیز باعث شده است که بسیاری از شرکت‌های بزرگ آن را برای مدیریت سرویس‌های خود ترجیح دهند. همچنین، داکر در زمینه امنیت قوی‌تر عمل می‌کند، اما کوبرنتیز با اکوسیستم گسترده‌تر خود، گزینه‌های بیشتری برای مدیریت کانتینرها فراهم می‌آورد.

برای استفاده بهتر در بسیاری از موارد، کوبرنتیز و داکر در کنار یکدیگر استفاده می‌شوند. زمانی که کوبرنتیز یک پاد (Pod) را برای اجرا در یک گره (Node) زمان‌بندی می‌کند، سرویس Kubelet در آن گره، داکر را برای راه‌اندازی کانتینرهای موردنظر فراخوانی می‌کند. سپس Kubelet به‌طور مداوم وضعیت این کانتینرها را نظارت کرده و داده‌های آن را به سطح کنترل کوبرنتیز ارسال می‌کند. در این معماری، داکر وظیفه اجرای کانتینرها را بر عهده دارد و کوبرنتیز مسئولیت مدیریت، هماهنگی و مقیاس‌بندی آن‌ها را برعهده می‌گیرد، که در نهایت بخشی از وظایف ادمین را خودکارسازی می‌کند.

معماری کوبرنتیز به چه صورت است؟

معماری Kubernetes حول خوشه‌ها می‌چرخد که از اجزای متعددی تشکیل شده است که با هم کار می‌کنند.

در کوبرنتیز، خوشه (Cluster) مجموعه‌ای از منابع محاسباتی است که برای اجرای و مدیریت کانتینرها به‌کار می‌رود. هر خوشه معمولاً شامل یک صفحه کنترل (Control Plane) و یک یا چند گره کارگر (Worker Node) است که با همکاری یکدیگر عملیات مختلف را انجام می‌دهند.

صفحه کنترل بخش مدیریتی، کوبرنتیز است که وظایف اصلی مانند زمان‌بندی پادها، نظارت بر وضعیت خوشه و مدیریت تنظیمات را بر عهده دارد. این بخش همچنین شامل سرور API است که به‌عنوان واسط اصلی برای تعامل کاربران و سایر اجزای سیستم عمل می‌کند.

در طرف دیگر، گره‌های کارگر مسئول اجرای کانتینرها هستند. هر گره شامل اجزایی مانند Kubelet (برای ارتباط با صفحه کنترل)، Container Runtime (مثل Docker یا containerd برای اجرای کانتینرها) و Kube Proxy (برای مدیریت شبکه) است. صفحه کنترل با دریافت درخواست‌ها از طریق API، تصمیم می‌گیرد که چگونه منابع بین این گره‌ها توزیع شود و عملیات موردنیاز را انجام دهد.

در کوبرنتیز، Kubectl نام رابط خط فرمان (CLI) است که برای مدیریت کلاسترها استفاده می‌شود. این ابزار برای مدیریت کلاسترها و فرمان دادن به سرور API کوبرنتیز به کار می‌رود. هنگامی که دستوری از Kubectl اجرا می‌شود، سرور API کانتینرهای کلاستر را اضافه یا حذف می‌کند تا با اهداف مورد نظر مطابقت داشته باشد.

فرایند ابتدایی  Kubernetes به این شکل می‌باشد:

  1. مدیر وضعیت دلخواه نرم‌افزار را تعریف می‌کند و سپس آن را در فایل manifest قرار می‌دهد.
  2. فایل مربوطه را با استفاده از زبان زیرساخت یا رابط کاربری مشترک به سرور API کوبرنتیز می‌فرستند.
  3. Kubernetes فایل را در پایگاه داده‌ای به نام Key-Value Store ذخیره می‌کند.
  4. سپس حالت دلخواه را روی تمام نرم‌افزارهای مرتبط درون کلاستر اجرا می‌کند.
  5. در نهایت به‌طور مداوم روی عناصر مختلف نظارت می‌کند تا مطمئن شود وضعیت نرم‌افزارها با وضعیت خواسته شده همخوانی دارند.

مزایای استفاده از کوبرنتیز

کوبرنتیز هم مانند هر ابزار دیگری، مزایا و معایبی دارد. توجه به این موارد است که می‌تواند متخصص دواپس (DevOps) را به این نتیجه برساند که آیا استفاده از این ابزار در پروژه‌، کاربردی است یا باید از ابزارهای دیگری استفاده کرد.

کوبرنتیز به شما این اطمینان را می‌دهد که اپلیکیشن‌های شما همیشه همان‌طور که می‌خواهید اجرا می‌شوند. مزایای استفاده از کوبرنتیز شامل موارد زیر است:

تعادل در اجرای بارکاری

با استفاده از کوبرنتیز، خیال‌تان از بابت پایداری سیستم راحت است زیرا این پلتفرم می‌تواند بهینه‌ترین روش برای مسیریابی ترافیک را انتخاب کند، زیرا کوبرنتیز می‌تواند میان استفاده‌ی کانتینر از DNS یا استفاده ازIP تصمیم بگیرد. در مواقعی که ترافیک شبکه روی یک کانتینر افزایش یابد، کوبرنتیز به‌طور خودکار بار درخواست‌ها را متعادل‌سازی کرده و آن را بین پادهای مختلف توزیع می‌کند.

مدیریت فضای ذخیره‌سازی

کوبرنتیز این امکان را به شما می‌دهد تا به انتخاب خودتان یک فضای ذخیره‌سازی را به سیستم اضافه کنید. این فضا می‌تواند فضای ابری عمومی یا حتی خصوصی باشد. با این حساب کوبرنتیز دست شما را باز می‌گذارد.

امنیت و مدیریت پیکربندی

با استفاده از کوبرنتیز می‌توانید، رمزها و توکن‌ها و کلیدهای SSH را ذخیره کنید، بدون آنکه نیازی به بازسازی داده‌ها در پیکربندی‌ها باشید.

بازآفرینی خودکار نقش‌ها

مزیت دیگر کوبرنتیز این است که می‌توانید شرایط ایده‌آلی برای هر کانتینر را توصیف و تنظیم کنید. کوبرنتیز به‌صورت خودکار وضعیت موجود را با وضعیت دلخواه مقایسه کرده و در صورت نیاز، تغییرات لازم را اعمال می‌کند.

برای مثال، می‌توانید قوانینی برای مدیریت مقیاس‌بندی تنظیم کنید تا کوبرنتیز به‌طور خودکار کانتینرهای جدیدی ایجاد کند و سپس با حذف کانتینرهای قدیمی، منابع آن‌ها را به نمونه‌های جدید اختصاص دهد. این فرآیند باعث بهینه‌سازی استفاده از منابع، افزایش کارایی و به‌روزرسانی بی‌وقفه سرویس‌ها می‌شود.

استفاده بهینه از منابع با کوبرنتیز

یکی از مهم‌ترین چالش‌ها در کلاسترهای، استفاده بهینه از منابع است. خوشبختانه، کوبرنتیز این امکان را فراهم می‌کند که شما به‌طور دقیق مشخص کنید که هر سرور Node به چه میزان پردازشگر (CPU) و RAM نیاز دارد. پس از تعیین این محدودیت‌ها، کوبرنتیز با تنظیمات هوشمند و مقداردهی دقیق منابع، آن‌ها را به‌طور بهینه بین سرورها توزیع می‌کند.

جمع بندی

تیم‌های برنامه‌نویسی و توسعه اغلب تمایل دارند با پیاده‌سازی سرویس‌های ابری، سرعت توسعه و استقرار برنامه‌ها و سرویس‌های جدید خود را افزایش دهند. کوبرنتیز یک پلتفرم قدرتمند برای مدیریت و ارکستراسیون کانتینرهاست که به شما امکان می‌دهد اپلیکیشن‌ها را به‌صورت خودکار، مقیاس‌پذیر و کارآمد مدیریت کنید. این ابزار برای بهینه‌سازی منابع و مدیریت پیچیدگی‌ها در اپلیکیشن‌های بزرگ بسیار مناسب است. شما در لیارا به‌راحتی می‌توانید کانتینرهای خود را به‌راحتی روی سرورهای ابری پیاده‌سازی کنید.

سوالات متداول

1- کوبرنتیز کاربردی‌تر است یا داکر؟

داکر کاربری آسان‌تری از کوبرنتیس دارد و برای پروژه‌های کوچک‌تر مناسب‌تر است. در‌مقابل، Kubernetes قابلیت‌های بیشتری از داکر دارد.

2- چگونه کوبرنتیز منابع را در یک خوشه (Cluster) مدیریت می‌کند؟

کوبرنتیز از مفهومی به نام پاد (Pod) برای مدیریت واحدهای کانتینری استفاده می‌کند. هر پاد می‌تواند شامل یک یا چند کانتینر باشد که به‌طور مشترک از منابع مانند شبکه و ذخیره‌سازی استفاده می‌کنند. کوبرنتیز از گروه‌بندی گره‌ها (Node) و کنترل‌پنل (Control Plane) برای انجام وظایف مدیریتی استفاده می‌کند. این ابزار می‌تواند به‌طور خودکار مقیاس‌بندی منابع را انجام دهد و ترافیک ورودی را بین گره‌ها توزیع کند.

3- کاربردهای کوبرنتیز چیست؟

استفاده بهینه از سخت‌افزار، توسعه سریع نرم‌افزار، بهینه‌سازی و اصلاح آسان محصول، افزایش آنی منابع، تست و توسعه پروژه و مستقل‌بودن از زیرساخت از کاربردی‌ترین استفاده‌های کوبرنتیز است.

4- چگونه کوبرنتیز با به‌روزرسانی‌های اپلیکیشن‌ها و rollback (بازگشت به نسخه قبلی) مدیریت می‌کند؟

کوبرنتیز از Deployments برای مدیریت به‌روزرسانی‌های اپلیکیشن‌ها استفاده می‌کند. زمانی که یک نسخه جدید از اپلیکیشن منتشر می‌شود، کوبرنتیز به‌طور خودکار تغییرات را در خوشه اعمال کرده و تعداد پادها را به‌طور تدریجی به‌روزرسانی می‌کند. اگر مشکلی پیش آید، کوبرنتیز به‌راحتی می‌تواند با استفاده از دستور kubectl rollout undo به نسخه قبلی برگردد و از Rolling Update و Blue-Green Deployment برای به‌روزرسانی بدون توقف سرویس‌ها پشتیبانی می‌کند.

برچسب‌ها: