هدف مقیاس پذیری چیست و در تلاش است که به چی دست یابد؟

مقیاس پذیری: Kubernetes دقیقاً در تلاش است به چه چیزی دست یابد؟

درک انتزاع پشت گره ها و غلاف ها


من مطمئن هستم که در مورد آن شنیده اید، اما اگر هرگز از آن استفاده نکرده اید، یا تازه شروع کرده اید، Kubernetes می تواند بسیار قوی و گیج کننده باشد. البته که همه چیز در چشم بیننده است، اما این همان چیزی است که من در ابتدای شروع کارم احساس کردم و مطمئنم که در این مورد تنها نیستم.

انجام پروژه در فریلنس پروژه

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

منبع: Unreal Engine 5 Pixel Streaming Overview

سفارش طراحی سایت با بهترین طراحان سایت

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


با در نظر گرفتن این موضوع، بیایید شروع کنیم!

تجسم ابر


من همیشه به Kubernetes به عنوان یک ابزار مشتری فکر می کردم. در حالی که این تا حدودی درست است، زیرا دارای یک جزء مشتری است، من در واقع از جهت دیگر به آن نگاه می کردم. Kubernetes به‌عنوان چارچوبی برای مدیریت منابع شما، معمولاً به‌عنوان یک ارائه‌دهنده خدمات بک‌اند ساخته شده است. توضیح خواهم داد.


تصور کنید که شما مزرعه ای از کامپیوترها دارید که احتمالاً هزاران عدد از آنها را شامل می شود. رایانه‌ها از نظر قابلیت‌ها و سخت‌افزار متفاوت هستند - برخی از آنها هسته‌های بیشتری نسبت به بقیه دارند و برخی حافظه بیشتری دارند. اما در طرح بزرگ، شما منابع زیادی دارید. هدف شما این است که این منابع را به مستاجران مختلف اجاره دهید - می خواهید مردم برای قدرت محاسباتی به شما پول بدهند، مانند املاک و مستغلات که در آن فضاهای خالی را اجاره می کنید تا مردم بتوانند هر کاری که می خواهند انجام دهند. اما اگر شما فقط آپارتمان های 4 خوابه دارید و اکثر مستاجران به یک اتاق خواب علاقه مند هستند چه؟ البته، شما به هر مستأجر یک اتاق خواب تک نفره اجاره می‌دهید و اجازه می‌دهید در یک آپارتمان مشترک باشند. این کاری است که Kubernetes فقط با رایانه انجام می دهد.

متلب انجام پروژه متلب با متلب دانان

Kubernetes مجموعه ای از ابزارها است که ارکستراسیون را روی شبکه ای از رایانه ها پیاده سازی می کند. به عبارت دیگر - این یک مدیر املاک و مستغلات برای رایانه ها است. در اینجا برخی از موارد استفاده Kubernetes برای مقابله با آنها طراحی شده است:


    پیگیری همه منابع - ببینید چه چیزی در دسترس است، چه چیزی در دسترس نیست و چه چیزی نادرست است.

    اگر یک کامپیوتر به طور ناگهانی کار نمی کند، شاید به دلیل اتصال کوتاه، به دنبال جایگزینی برای جا دادن مستاجرینی باشید که روی آن کامپیوتر میزبانی شده اند.

    اطمینان حاصل کنید که چیزها از هم جدا شده اند، بنابراین مستاجران به منابعی که به آنها تعلق ندارد دسترسی پیدا نکنند.

    همه چیز را ایمن نگه دارید، تا مهمانان ناخواسته به شبکه های مستاجران دسترسی نداشته باشند، مشابه کاری که فایروال انجام می دهد.

    تکرار برنامه‌های مستاجر و تقسیم ترافیک ورودی بین چندین رایانه به شیوه‌ای کارآمد، که به عنوان «تعادل بار» نیز شناخته می‌شود.


همه موارد فوق مستلزم سیستمی است که بتواند همه چیز را با پشتکار پیگیری و مدیریت کند. Kubernetes چندین مؤلفه را ارائه می دهد که در کنار هم قرار گرفتن آنها می تواند به هدف مورد نظر دست یابد. در اینجا برخی از این مؤلفه ها وجود دارد که به نظر من درک آنها از نظر مفهومی ساده تر از سایرین است:


    kube-apiserver - یک سرور API REST که می تواند توسط مستاجرین برای ارسال درخواست های استقرار برنامه به ابر استفاده شود.

    kubelet - عاملی که بر روی هر کامپیوتری نصب شده است و اساساً آن را به بخشی از شبکه Kubernetes تبدیل می کند. این مسئول استقرار برنامه های مستاجر و اجرای بررسی های سلامت بر اساس مجموعه ای از دستورالعمل های ارسال شده از apiserver است.

    etcd - یک پایگاه داده کلید-مقدار که متغیرهای مربوط به ابر Kubernetes را ذخیره می کند، به عنوان مثال، پیکربندی ها، و وضعیت هر رایانه و برنامه هایی که باید در آنها اجرا شوند. برای هماهنگی وظایف در سطح سیستم استفاده می شود. به عبارت دیگر - این منبع حقیقت ابر در هر نقطه است.

طراحی لوگو با بهترین طراح لوگو با طراحی لوگو حرفه ای

اگر می‌خواهید به لیست کامل اجزای Kubernetes بروید، نمودار رسمی را به شما ارائه می‌دهم که در وب‌سایت رسمی Kubernetes قابل مشاهده است:

لیست کامل اجزای Kubernetes، از وب سایت رسمی Kubernetes


همانطور که می بینید، مشخصات Kubernetes دوست دارد از انتزاعات در بالای چیزهایی استفاده کند که قبلاً با آنها آشنا هستیم. خوشه به معنای مزرعه یا استخر و گره به معنای رایانه یا ماشین است. در مقطعی از تاریخ، یک گره حتی مینیون نامیده می شد (همانطور که در این شماره GitHub از سال 2014 بحث شد). برای من، نام ها یکی از گیج کننده ترین چیزها در مورد Kubernetes هستند، زیرا تعداد زیادی از آنها وجود دارد، و لزوما معنی زیادی ندارند. اما زمانی که فهمیدم Kubernetes چیزی بیش از یک چارچوب برای مدیریت نیست

مجموعه ای از منابع - همه چیز سریعتر کلیک می کرد. برای مرجع، می‌توانید به این فرهنگ لغت نگاهی بیندازید که فهرست کاملی از اصطلاحات Kubernetes و تعاریف آنها را دارد.

ذخیره سازی یک مشکل کاملا متفاوت است


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


    یک مستاجر دوست دارد یک بازی با حجم 120 گیگابایت آپلود کند، اما فقط هارد دیسک‌هایی با حداکثر 100 گیگابایت در دسترس هستند.

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

    گسترش / حذف / جایگزینی هارد دیسک بدون وقفه در عملیات روزانه توسط مستاجران.

    همه موارد فوق، در حالی که فضای ذخیره سازی را بین رایانه ها به اشتراک می گذارند و دسترسی مناسب خواندن / نوشتن را حفظ می کنند.


حل این مشکلات بی‌اهمیت نیستند و نیاز به تخصص ویژه در زمینه ذخیره‌سازی و نحوه عملکرد آن دارند. برخی از ارائه دهندگان ابر راه حل های ذخیره سازی مدیریت شده اختصاصی مانند AWS EBS، GCE Disk و Azure Disk را ارائه می دهند. اما اگر برای لحظه‌ای تصور کنیم که شما یک اتاق کامل پر از هارد دیسک دارید و می‌خواهید آن‌ها را به مستاجران بالقوه اجاره کنید - احتمالاً می‌خواهید این کار را با یک راه‌حل منبع باز داده‌های بزرگ مانند Ceph انجام دهید.


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

منبع: Ceph Intro and Architectural Review by Ross Turk


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

این فقط یک سرور HTTP است


برای شروع یک تماس API Kubernetes، باید یک درخواست به kube-apiserver ارسال کنیم. همانطور که قبلا ذکر شد، kube-apiserver یک مؤلفه است که توسط ارائه دهنده ابر نصب شده است و یک سرور REST است. بر این اساس، هر کلاینت HTTP را می توان برای پرس و جو از back-end استفاده کرد، به عنوان مثال، cURL یا axios. با این حال، درخواست‌ها باید مجاز باشند، و پاسخ‌ها باید تجزیه شوند، بنابراین، بسته به زبان و محیطی که استفاده می‌کنید، بسیاری از پیاده‌سازی‌های مشتری Kubernetes را مشاهده خواهید کرد. یکی از واضح ترین و محبوب ترین مشتریان Kubernetes ابزار CLI آن است - kubectl.


با kubectl می‌توانید به راحتی تماس‌های API مجاز برقرار کنید، و پاسخ‌ها همیشه در قالبی قابل خواندن بر روی صفحه نمایش داده می‌شوند، که هنگام کار با ترمینال عالی است. ما حتی می‌توانیم از kubectl در حالت کلامی استفاده کنیم تا جزئیات تماس HTTP اساسی را ببینیم:


kubectl دریافت pods --v=6



در حال حاضر، می توانید به pods به عنوان برنامه های کاربردی فکر کنید (خوب، به نوعی). اگر مقاله را مرور کرده باشید، احتمالاً متوجه خواهید شد که آنها می توانند بر روی هر رایانه ای که خودسرانه انتخاب شده است، بسته به آنچه در دسترس بوده اجرا شود.

شبیه سازی درخواست Kubernetes


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


موارد زیر به ما داده می شود:


    یک صف از کاربران.

    یک خوشه Kubernetes.

    یک تصویر Docker با یک بازی نصب شده است.


مشخصات پیشنهادی برای اجرای بازی به شرح زیر است:


    4 هسته.

    رم 16 گیگابایت.

    50 گیگابایت فضای ذخیره سازی.

    RTX A4000.


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


    هنگامی که کاربر به انتهای صف می رسد، درخواستی را با URL تصویر و مشخصات سخت افزاری مورد نظر به kube-apiserver ارسال کنید.

    Kube-apiserver از etcd برای جستجوی رایانه ای با منابع کافی برای میزبانی تصویر استفاده می کند.

    اگر چیزی پیدا شد، kube-apiserver از شناسه گره برای ارسال درخواست استقرار به kubelet مربوطه خود استفاده می کند.

    هنگامی که استقرار با موفقیت انجام شد، kubelet یک پورت را برای اتصال به جریان بازی باز می‌گرداند.

    Kube-apiserver پورت بازی را به همراه آدرس IP رایانه مورد نظر به کاربر باز می گرداند.

    کاربر می تواند از http://{IP}:{port} برای اتصال به جریان بازی از طریق مرورگر وب استفاده کند.


شبیه سازی درخواست Kubernetes ساده شده


امیدوارم از مقدمه من برای Kubernetes و اصول زیربنایی آن لذت برده باشید. اگر تصمیم به یادگیری یا استفاده از آن دارید، من را خبر کنید