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

در زمان های نه چندان دور عموما اپلیکیشن ها یک پارچه بودند یعنی همه چیز در یک سیستم اجرا می شد اما با پیشرفت و گسترش نرم افزار ها و نیاز به بخش های مختلف دیگر امکان اینکه کل نرم افزار روی یک سیستم اجرا شود نبود!
هر پروژه به بخش های مختلفی نیاز پیدا کرد که باید کاملا هماهنگ و در یک بستر باهم کار می کردند و نباید هیچ اختلالی بین این سرویس ها بوجود می آمد چون می توانست قطعی های طولانی مدت ایجاد کند و پیدا کردن عیب و رفع آن زمان بر بود.
بنابراین کم کم معماری نرم افزار ها تغییر کرد و به سمت میکروسرویس ها رفت!
مفهوم میکروسرویس ها یک سبک جدید از معماری نرم افزاری بودند که در آن یک برنامه بزرگ به چندین بخش کوچک و مستقل تقسیم می شد که در کنار همدیگر یک سیستم بزرگ را تشکیل می دادند!
به این شکل که هر بخش از برنامه برای مثال پرداخت، پنل کاربری، جستجو و … جدا شدند و هر بخش می توانست با زبان برنامه نویسی که مناسب همان بخش بود نوشته شود و به صورت مستقل اجرا شود.
این استقلال در اجرا کمک کرد هر بخش به صورت مجزا فعالیت کند و آپدیت های جداگانه هم دریافت کند!
در کنار تمام مزایایی که میکروسرویس ها داشتند که این کار باعث شد تعداد سرویس ها به چند ده مورد برسد و اینجا یک ایراد بزرگ پیدا شد!
مدیریت این حجم از سرویس ها به صورت دستی دیگر تقریبا غیرممکن شده بود و اینجا بود که یک مفهموم به نام Kubernetes شکل گرفت!
Kubernetes چیست؟
کوبرنتیز که توسط گوگل به شکل متن باز در سال 2014 توسعه یافت توانست در مدت زمان کوتاهی به یک ابزار اصلی برای مدیریت کانتینر ها تبدیل شود!
کوبرنتیز که برای مدیریت و کنترل کانتینر هاست به توسعه دهندگان کمک کرد تا نرم افزار های خود را که در مقیاس های بزرگ بود ساده تر مدیریت کنند.
این پلتفرم فرآيندهای زیادی را مانند توزیع بار، افزایش یا کاهش منابع برای حفظ پایداری سرویس ها و جلوگیری از داون تایم ها را خودکارسازی کرد. و نقش مهمی را در زیرساخت های نرم افزار های مدرن برعهده گرفت.
امروزه شرکت های زیادی از کوبرنتیز برای بهینه سازی و اجرای برنامه های خود استفاده می کنند.
کوبرنتیز که همچنان یکی از استاندارد های اصلی در حوزه مدیریت کانتینر ها می باشد برخلاف سرور های مجازی نیازی به سیستم عامل کامل ندارند و فقط بخش های ضروری برنامه مورد نیاز است را به همراه دارند همین موضوع باعث شد سرعت اجرا بالاتر برود و مصرف منابع کمتر شود.
وقتی هر کانتینر به صورت مستقل اجرا می شود از سایر بخش ها مجزا می شود و هم مورد هم باعث می شود امنیت بیشتری فراهم شود و احتمال تداخل بین برنامه ها کاهش پیدا کند!
ابزارهایی مانند Docker معمولا برای ساخت و اجرای کانتینرها استفاده می شوند و امکان انتقال آسان بین محیط های مختلف را فراهم می کنند.
داکر در واقع ساخت و اجرای کانتینر را بلد بوند و نمی توانستند به سوالاتی نظیر :
هر کانتینر کجا اجرا شود؟
اگر یک کانتینر خراب شد چه کسی دوباره آن را اجرا کند؟
اگر ترافیک زیاد شد چطور تعداد سرویس ها را زیاد کنیم؟
چطور بین سرور ها بار را تقسیم کنیم؟
چطور آپدیت بدون قطعی انجام دهیم؟
پاسخ دهند بنابراین کوبرنتیز روی همین کانتینر ها لایهای مدیریتی ایجاد می کند و کنترل تعداد زیادی از آن ها را به شکل خودکار انجام می دهد.
و به سوالات بالا به شکل اساسی پاسخ می دهد و دخالت نیرو انسانی برای رفع این موارد را به حداقل می رساند.
ارزش اصلی کوبرنتیز در این است که پیچیدگی مدیریت سیستم های بزرگ را کاهش می دهد. به کمک آن می توان اپلیکیشن هایی که از سرویس های متعدد تشکیل شده اند را به صورت هماهنگ اجرا و مدیریت کرد، بدون اینکه نیاز به کنترل دستی تک تک اجزا باشد.
در واقع، با گسترش معماری های مبتنی بر میکروسرویس، ابزار هایی مثل کوبرنتیز به یک نیاز اساسی تبدیل شده اند و علت هم واضح بود چون بدون آن ها مدیریت چنین ساختارهایی بسیار دشوار و زمان بر خواهد بود.
مفاهیم پایه در Kubernetes:
اگر بخواهیم به صورت مختصر به مفاهیم اصلی و بخش های مختلف کوبرنتیز بپردازیم باید چند بخش را مورد بررسی قرار دهیم.
برای اینکه با ساختار کوبرنتیز آشنا شویم باید با مفاهیم پایه آن آشنایی داشته باشیم که شامل:
Pod:
پاد ها کوچکترین واحد قابل استقرار در کوبرنتیز می باشند که یک یا چند کانتینر را در خود جای می دهند و به عنوان محیط اجرایی مشترک برای کانتینرها عمل می کنند و آن ها منابعی مثل شبکه و فضای ذخیره سازی را به اشتراک می گذارند.
کانتینر هایی که داخل یک پاد قرار می گیرند عموما به هم وابسته می باشند و برای انجام وظایفی مشخص در کنار هم اجرا می شوند.
هر Pod بر اساس یک آدرس آی پی منحصر به فرد در کلاستر قرار می گیرد تا ارتباط بین سرویس ها را ساده تر کند.
برخلاف کانتینر ها که بعد از حذف اتوماتیک ساخته نمی شوند! پاد ها در صورتی که مشکل حذف رخ دهد مجدد به صورت خودکار ساخته خواهند شد.
زمانی که پاد ها حذف می شوند داده های موقتی آن ها از بین می رود مگر اینکه در دیسک ها ذخیره شده باشند و این موضوع بسیار مهمی هست که اگر به اشتباه داده ها در داخل پاد قرار بگیرد با هر ریستارت یا حذف و فعال شدن مجددی داده ها پاک خواهد شد.
با درک مفهوم پاد به عنوان یکی از پایه ای ترین قسمت های کوبرنتیز می توان کم کم عملکرد و معماری این پلتفرم آشنا شد.
Node یا Worker Node:
اگر بخواهیم خیلی ساده Node را تعریف کنیم باید بگوییم که Node یک کامپیوتر می باشد که برنامه شما روی آن اجرا می شود!
Node در واقع می تواند یک سرور اختصاصی یا یک سرور مجازی باشد و برنامه ها روی آن ها ران شوند.
روی هر Node در واقع پاد ها اجرا می شوند و اگر به طور عامیانه تر بخواهیم تشبیه کنیم باید بگوییم اگر کوبرنتیز مغز سیستم باشد Node ها دست و پای این سیستم می باشند.
روی هر Node یک برنامه به نام Kubelet اجرا می شود که دستورات را از بخش مرکزی میگیرد و Pod ها را اجرا می کند.
همچنین Node منابعی مثل CPU، RAM و شبکه را در اختیار برنامه ها قرار می دهد.
اگر یک Node خراب شود یا از دسترس خارج شود، کوبرنتیز به صورت خودکار Pod ها را روی Node های دیگر اجرا میکند تا برنامه از کار نیفتد Node از کار می افتد بالاتر خواهد بود چون پاد ها در Node های دیگر ساخته می شوند.
در کوبرنتیز در واقع تفاوتی از نظر عملکرد و کارایی و مفهوم بین Node و Worker نمی باشد.
Cluster:
کلاستر در واقع به مجموعه ای از چندین نود گفته می شود که به صورت هماهنگ برای اجرا و مدیریت اپلیکیشن ها فعال می کنند.
این ساختار باعث می شود وابستگی به یک ماشین خاص از بین برود و سیستم در برابر خطا مقاوم تر شود.
در یک کلاستر، نودها به دو دسته اصلی شامل Control Plane و Worker Node تقسیم می شوند.
کلاستر امکان مقیاس پذیری افقی را فراهم میکند، به این معنا که با افزایش بار می توان نودهای جدیدی به آن اضافه کرد.
و این بار پروژه های بزرگی که در بستر کوبرنتیز فعال هستند یک مزیت فوق العاده محسوب میشود که با رشد نرم افزار های موجود در کلاستر به سادگی می توان Node های جدید به آن اضافه کرد و همچنین در صورت بروز مشکل در یک نود، کلاستر میتواند بهصورت خودکار بار کاری را به سایر نودها منتقل کند.
این ویژگی ها باعث افزایش دسترسی پذیری و پایداری سرویس ها می شود.
در مجموع، کلاستر یکی از مفاهیم کلیدی در درک معماری و عملکرد کوبرنتیز به شمار می آید.
اجزای کنترلی:
اجزای کنترلی یا همان Control Plane بخش مدیریتی سیستم هستند که کل کلاستر را تحت کنترل دارند و دستورات اجرایی را برای هدایت ارسال می کنند.
این اجزا تصمیم می گیرند چه چیزی در کجا اجرا شود و وضعیت سیستم همیشه در حالت پایدار باقی بماند!
قسمت های مختلف اجزای کنترلی را به صورت مختصر خدمت شما عرض می کنیم.
API Server:
یکی از مهمترین قسمت های مربوط به اجزای کنترلی کوبرنتیز در واقع API Server می باشد.
تمام درخواست ها از طرف کاربران، ابزار ها یا سایر اجزای کوبرنتیز ابتدا باید به API Server ارسال شوند و این درخواست ها می توانند شامل ایجاد، حذف یا مشاهده منابعی مثل پاد ها باشند!
API Server ابتدا درخواست ها را دریافت می کند و بعد از اعتبار سنجی و اطمینان از صحت درخواست آن ها را پردازش می کند و سپس وضعیت جدید در دیتابیس کلاستر یعنی etcd ذخیره می شود!
در واقع API Server نقش واسطه بین اجزای مختلف سیستم را برعهده دارد و به طور خلاصه می توان گفت در کوبرنتیز هیچ بخشی مستقیم با سایر بخش ها ارتباط ندارد و همه چیز از طریق API Server انجام می شود.
این طراحی باعث افزایش امنیت، یکپارچگی و قابلیت کنترل سیستم می شود.
Scheduler:
یکی دیگر از اجزای اصلی بخش کنترل Scheduler می باشد که وظیفه دارد تصمیم گیری کند که هر پاد روی کدام Node اجرا شود!
در واقع وقتی یک Pod جدید ایجاد می شود Scheduler بررسی می کند که کدام Node منابع کافی مثل رم و سی پیو را در اختیار دارد و بر این اساس تصمیم می گیرد بهترین Node برای اجرای آن Pod کدام است.
البته نمی توان گفت تنها عاملی که باعث می شود Scheduler انتخاب کند که کدام پاد در کدام Node ساخته شود تنها میزان رم و سی پیو هست بلکه مواردی نظیر سیاست های تعریف شده و نزدیکی سرویس ها به همدیگر هم در تصمیم گیری نقش دارند.
اگر هیچ Node در دسترس نباشد و منابع کافی برای اجرا وجود نداشته باشد پاد در وضعیت Pending باقی می ماند تا منابع آزاد شود.
Scheduler ها به صورت منظم وضعیت کلاستر را مداوم بررسی می کنند تا توزیع بار به شکل بهینه انجام شود و سیستم در وضعیت پایدار تر و کارآمد تر باقی بماند.
اگر Scheduler در کلاستر وجود نداشته باشد مدیریت توزیع بار و جابه جایی پاد ها برای بالا بردن راندمان Node ها کاملا دستی و پیچیده می شد و می توان گفت تقریبا غیرممکن خواهد شد.

Controller Manager:
کوبرنتیز همیشه یک وضعیت استاندارد و ایده آل برای منابع در نظر می گیرد و وظیفه ای که Controller Manager دارد این است که بررسی کند وضعیت در نظر گرفته شده با آن مطابقت دارد یا خیر!
اگر تفاوتی وجود داشته باشد به صورت خودکار سریعا آن را اصلاح می کند.
برای مثال وقتی یک پاد حذف یا خراب می شود Controller Manager سریع متوجه این موضوع می شود و پاد جدید را جایگزین می کند و دوباره آن را اجرا می گیرد.
در کوبرنتیز تعریف می شود که تعداد پاد ها چه اندازه باشد و اگر از تعداد استاندارد خارج شود Controller Manager آن را به تعداد درست می رساند.
Controller Manager به صورت مرتب وضعیت کلاستر را مانیتور می کند و تغییرات لازم را عمال می کند تا سیستم همیشه پایدار باقی بماند.
etcd:
etcd یا حافظه مرکزی کوبرنتیز یک دیتابیس از نوع Key-value می باشد که برای ذخیره سازی تمام اطلاعات و وضعیت کلاستر استفاده می شود.
در این بخظ تمام چیزهای مهم ذخیره می شود مثل وضعیت Pod ها، تنظیمات، نود ها و اطلاعات منابع!
etcd بسیار سبک، سریع و قابل اعتماد طراحی شده تا بتواند در محیط های خیلی بزرگ و حساس کار کند.!
اطلاعات در etcd بین چند سرور ذخیره می شود تا اگر یکی از سرور ها از کار افتاد داده ها از بین نرود.
کنترل پلن برای تصمیم گیری همیشه به etcd مراجع می کند تا دچار اشتباه نشود.
هر تغییر در کلاستر مثل ساخت یا حذف یک پاد ابتدا در etcd ذخیره می شود.
اجزای Worker:
اجزای ورکر نود در واقع نقش اجرای واقعی اپلیکیشن را بر عهده دارند و هر کدام وظیفه مشخصی در این فرآند ایفا می کنند.
Kubelet:
Kubelet یکی از اجزای مهم و حیاتی هر ورکر نود می باشد که به عنوان یک عامل اجرایی روی نود ها عمل می کند و به صورت همیشگی با Control Plane ارتباط می گیرد و دستوراتی که از آن دریافت می کند را روی Node اجرا می کند.
Kubelet در واقع مسئول اجرای پاد ها و اطمینان حاصل کردن از این مورد می باشد که کانتینرها دقیقا همانطور که تعریف شده اند در حال اجرا باشد و ناهماهنگی و تضادی در این میان رخ ندهد!
اگر یک پاد دچار مشکل شود و از دسترس خارج شود Kubelet سریعا با شناسایی پاد مربوطه تلاش می کند دوباره آن را راه اندازی کند و به صورت منظم وضعیت نود ها و پاد ها را به اجزای کنترلی ارسال می کند تا سیستم به طور کامل دید خوبی نسبت به وضعیت کلاستر داشته باشد.
Kubelet خودش کانتینر اجرا نمی کند، بلکه از طریق Container Runtime مثل Docker این کار را انجام می دهد.
اگر بخواهیم خیلی خلاصه Kubelet را تعریف کنیم باید بگوییم مدیر اجرایی روی هر نود هست که دستورات را می گیرد و اجرا می کند و گزارش ها را ارسال می کند تا سیستم همیشه در وضعیت پایدار باقی بماند.
Kube Proxy:
یکی دیگر از اجزای مهمی که در ورکر نود ها وجود دارد Kube Proxy هست که وظیفه مدیریت کردن ارتباطات شبکه را برعهده دارد.
Kube Proxy ها باعث می شوند به راحتی با یکدیگر و با سرویس ها ارتباط برقرار کنند و برای مثلا فرانت و بک اند به درستی با هم ارتباط بگیرند و درخواست ها را رد و بدل کنند.
Kube Proxy با تنظیم قوانین شبکه مسیر درست ارسال درخواست ها را مشخص می کنند و وقتی یک سرویس در کوبرنتیز تعریف می شود Kube Proxy ترافیک ورودی بین پادها را توزیع می کند و به صورت خلاصه و ساده می توان گفت به نوعی یک Load Balancing انجام می شود.
یک کار مهم دیگر آن ها این است که اگر پادی از ورکری به ورکر دیگر جابه جا شد و ای پی تغییر کرد Kube Proxy این تغییرات را مدیریت می کند تا کاربر هیچ قطع ارتباط یا تغییر ای پی را حس کند.
Kube Proxy به صورت مداوم وضعیت کلاستر را از API Server دریافت می کند و قوانین شبکه را بروز و بازنویسی می کند.
به زبان ساده Kube Proxy مثل یک مسیریاب هوشمند داخل Node هست که تعیین می کند هر درخواست به کدام Pod برد.
Container Runtime:
نرم افزاری که اجرای واقعی کانتینر ها را روی هر Node انجام می دهد در واقع Container Runtime می باشد!
وقتی کوبرنتیز تصمیم می گیرد یک پاد اجرا شود این Container Runtime می باشد که ایمیج را دریافت می کند و باعث اجرا می شود!
به عبارت ساده تر کوبرنتیز دستور اجرا بدهد این Container Runtime است که دستور را عملی می کند.
این نرم افزار در واقع مسئول کارهایی مانند دانلود ایمیج، ساخت کانتینر، اجرا و توقف آن ها می باشد و همچنین منابعی مثل CPU و حافظه را برای مدیریت کانتینر ها مدیریت می کند.
یکی از نمونه های معروف این نرم افزار ها Docker می باشد.
این نرم افزار ها به طور مستقیم با Kubelet در ارتباط هست و دستورات اجرا را از آن دریافت می کند.
آبجکت های مهم کوبرنتیز:
برای تعریف وضعیت و رفتار اپلیکیشن ها در خود کلاستر شما به ابزار هایی نیاز دارید که هسته اصلی کار با کوبرنتیز را تشکیل می دهند و هر کدام وظیفه مشخص دارند در این قسمت می خواهیم به آبجکت های مهم کوبرنتیز بپردازیم!
Deployment:
در کوبرنتیز دیپلویمنت ها یکی از مهمترین آبجکت ها برای مدیریت اجرای اپلیکیشن می باشد که به شما این امکان را می دهد که مشخص کنید چند نسخه از یک پاد باید همیشه در حال اجرا باشد! این مورد که به اصطلاح رپلیکا گفته می شود به شما اجازه می دهد از یک پاد چند دیپلویمنت روی ورکرهای مختلف برای توزیع بار داشته باشید تا علاوه بر اینکه سرعت کار هر پاد بالاتر برود در صورت قعطی برای یک ورکر پاد شما همچنان در وضعیت اجرا باقی بماند. و اگر یک پاد قطع شد پاد جایگزین سریعا بالا می آید.
این آبجکت دیپلویمنت امکان بروزرسانی بدون قعطی را فراهم می کند! یعنی می توانید نسخه جدید اپلیکیشن را بدون اینکه سرویس قبلی قطع شود جایگزین نسخه قبلی کنید!
این قابلیت بسیار کاربردی هست و فرض کنید در زمان بروزرسانی یک اشتباه در پروژه صورت گرفته و شما دیپلوی کردید و آپدیت جدید جایگزین آپدیت قبلی شده است! در این شرایط شما بدون بروز مشکل و به سادگی می توانید از قابلیت Rollback استفاده کنید و به آپدیت قبلی برگردید!
خیلی خلاصه می توان گفت که دیپلویمنت کمک می کند اپلیکیشن شما همیشه به تعداد درست و با نسخه صحیح در حال اجرا باشد.
Service:
یک موضوع مهم در کوبرنتیز این است که هیچ پادی در واقع به صورت پایدار در دسترس نیست و تحت هر شرایطی می تواند قطع شود و دوباره ساخته شود و هر بار ای پی آن تغییر کند! در این شرایط دسترسی به پاد هر بار با چالش رو به رو می شود به این خاطر که ممکن است با هر حذف و ساخت مجدد آدرس تغییر کند.
اینجاست که Service وارد عمل می شود و امکان دسترسی پایدار به پاد ها را با قرار دادن آدرس ثابت برای پاد ها فراهم می کند.
Service درخواست ها را دریافت می کند و آن ها را به پاد مناسب هدایت می کند.
این کار به وسیله لیبل ها انجام می شود و سرویس تشخیص می دهد که کدام پاد متعلق به آن هاست.
همچنین وظیفه سرویس این است که لود بالانسینگ ساده انجام می دهد و ترافیک را بین چند پاد تقسیم می کند.
در سرویس ما با چند مفهوم رو به رو هستیم:
ClusterIP (فقط داخل کلاستر)
NodePort (دسترسی از بیرون)
LoadBalancer (دریافت IP خارجی در فضای ابری)
در واقع سرویس یک روش ثابت برای دسترسی به پاد ها می باشد حتی اگر خود پاد تغییر کند و به ورکر دیگر منتقل شود.
ConfigMap و Secret:
برای مدیریت تنظیمات و داده هایی که اپلیکیشن ها از آن ها استفاده می کنند بدون اینکه اطلاعات مستقیم داخل کد برنامه قرار بگیرد از ConfigMap و Secret استفاده می شود.
کانفیگ مپ برای نگهداری اطلاعات معمولی و غیرحساس به کار می رود مثل تنظیمات برنامه و آدرس سرویس ها و متغییر های محیطی که این کاربر باعث می شود بدون تغییر در کد، تنظیمات اپلیکیشن را به راحتی تغییر داد.
و در مقابل سکرت ها برای ذخیره و اطلاعات حساس مانند رمز عبور، توکن ها یا کلید های API طراحی شدند و داده ها به صورت امن تر نگهداری می شوند و دسترسی به آن ها محدود تر هست.
هر دو این آبجکت ها می توانند به پاد ها متصل شوند تا برنامه در زمان اجرا به راحتی به آن ها دسترسی داشته باشد.
Namespace:
یکی دیگر از قابلیت های خوب کوبرنتیز این است که شما می توانید در داخل یک کلاستر که تعداد بالایی پاد و سرویس وجود دارد آن ها را دسته بندی و جداسازی کنید.
وقتی تعداد زیادی آیتم داخل یک کلاستر دارید بدون دسته بندی مدیریت کردن بسیار دشوار می شود و اینجاست که Namespace به کمک ما می آيد.
با استفاده از Namespace می توانید منابع را بر اساس پروژه یا محیط مثل پروداکشن یا تست و حتی دولوپ دسته بندی کنید.
هر Namespace به صورت یک فضای مستقل عمل می کند و این مورد حتی اگر همه در یک کلاستر هم باشند برقرار است.
برای مثال، می توانید یک Namespace برای تیم فرانت اند و یکی برای بک اند داشته باشید، بدون اینکه منابعشان با هم تداخل پیدا کند.
همچنین میتوان برای هر Namespace محدودیت منابع (مثل CPU و RAM) یا سطح دسترسی جداگانه تعریف کرد.
Namespace ها در واقع باعث نظم و امنیت می شوند و به همراه اینکه مدیریت بهتری هم می توانید روی منابع داشته باشید.
نحوه استفاده از کوبرنتیز:
برای شروع کار و استفاده از کوبرنتیز به صورت عملی باید مراحل مختلفی طی شود که در ابتدا با نصب ابزار ها شروع می شود که نتیجه کار مدیریت اپلکیشن ها می باشد.
به طور خلاصه این فرآیند نصب ابزار تا رسیدن به مدیریت اپلیکیشن ها اگرچه ساده به نظر نمی رسد اما در صورتی که منطق کار کوبرنتیز را کاملا درک کنید یک شیوه بسیار معمول و ساده می باشد که شرکت های بزرگی در دنیا به سراغ آن رفته اند!
قدم به قدم این مراحل را جلو می رویم!
شروع کار با Kubectl:
در اولین گام برای اینکه شما با کوبرنتیز کار کنید نیاز به نصب ابزاری به نام kubectl دارید! این ابزار خط فرمانی در واقع رابط اصلی شما برای ارتباط با کلاستر محسوب می شود.
بعد از نصب kubectl آن را باید به یک کلاستر متصل کنید تا بتوانید منابع را مدیریت کنید.
kubectl به شما اجازه می دهد منابع مختلف مثل Pod، Deployment و Service را ایجاد، مشاهده و حذف کنید.
همچنین می توانید وضعیت کلاستر و اجزای مختلف آن را با دستوراتی مانند kubectl get بررسی کنید.
بدون kubectl به عنوان ابزار اصلی برای کنترل و تعامل با کوبرنتیز تقریبا مدیریت کلاستر غیرممکن می شود.
ساخت یا اتصال به کلاستر:
در کوبرنتیز بعد از نصب kubectl باید یک کلاستر در اختیار داشته باشید تا بتوانید منابع را اجرا و مدیریت کنید! در واقع کلاستر همان محیطی هست که اپلیکیشن ها روی آن اجرا می شوند و از چندین نود تشکیل می شوند.
شما برای داشتن یک کلاستر هم می توانید از سرویس های ابری استفاده کنید و به آن متصل شوید تا نیاز به مدیریت زیرساخت سخت افزاری نداشته باشید.
هم می توانید سرور اضافه کنید و با کانفیگ های سخت افزاری و نرم افزاری که انجام می دهید یک کلاستر برای خود ایجاد کنید.
البته در شرایط تست استفاده از ابزارهایی نظیر Minikube به شما کمک می کند یک کلاستر ساده را روی سیستم شخصی خود ایجاد کنید که برای یادگیری و تست بسیار مناسب هست.
بعد از ایجاد یک کلاستر باید با تنظیماتی که انجام می دهید kubectl بتواند به آن متصل شود و شروع به ایجاد و مدیریت منابع در کلاستر کنید.
ایجاد اپلیکیشن یا همان پاد:
بعد از نصب خط فرمان Kubectl و راه اندازی کلاستر در قدم بعدی برای اجرای یک اپلیکیشن باید یک Pod بسازید.
پاد همانطور که گفته شد کوچکترین واحد اجرایی کوبرنتیز می باشد.
برای ایجاد یک پاد معمولا از فایل های Yaml استفاده می شود.
در این فایل مشخص می شود چه ایمیج اجرا شود و چه نامی داشته باشد و تنظیمات اعمال شده روی آن به چه صورت باشد.
بعد از آماده کردن فایل Yaml با اجرای دستورات مربوطه آن را به کلاستر ارسال می کنید تا پاد ساخته شود.
پس از ایجاد، میتوانید وضعیت Pod را با دستور kubectl get pods بررسی کنید و مطمئن شوید که در حالت Running قرار دارد.
استفاده از Deployment برای مدیریت بهتر:
در قدم آخر به جای اینکه به صورت مستقیم پاد ها را مدیریت کنیم که در کلاستر هایی که تعداد پاد های زیادی قرار دارد کار بسیار دشواری هست همانطور که در بالا و تعریف های عامیانه کوبرنتیز گفته شد از Deployment استفاده می کنیم تا کنترل کامل تر و پایدار تری روی اجرای اپلیکیشن داشته باشیم.
دیپلویمنت ها به ما اجازه می دهد مشخص کنیم چند نسخه از یک پاد همیشه در حال اجرا باشد و اگر پادی دچار قعطی شد سریعا پاد دیگر ساخته و جایگزین شود.
در بالا هم گفته شد که فرآیند بروزرسانی برنامه را ساده می کند و وقتی نسخه جدید از اپلیکیشن ارائه می شود تا زمانی که استقرار پیدا نکرد نسخه قبلی قطع نمی شود و برای همین داون تایم وجود ندارد و اگر هم مشکلی داشت به راحتی می توان به نسخه قبلی برگشت.
ایجاد Service برای دسترسی :
بعد از ایجاد کلاستر و اتصال به kubectl و اجرای اپلیکیشن با پاد و دیپلویمنت آخرین مرحله مهم ایجاد Service می باشد.
در این مرحله اپلیکیشن ها واقعا قابل استفاده می شوند چون تا از قبل این مورد پاد ها فقط داخل کلاستر در دسترس هستند و ای پی ها مداوم تغییر می کند.
Service یک آدرس ثابت و پایدار ایجاد می کند تا بتوانید همیشه به اپلیکیشن دسترسی داشته باشید، حتی اگر Pod ها حذف یا دوباره ساخته شوند.
مزایای کوبرنتیز:
همانطور که گفته شد کوبرنتیز در راه اندازی پروژه ها و نحوه مدیریت کردن ساده پاد ها یک تحول بود که بسیاری از شرکت های بزرگ به سراغ این پروژه رفتند و هنوز هم در دنیا طرفداران زیادی دارد و پلتفرم های ابری مختلفی بر این بستر راه اندازی شدند
مزایای کوبرنتیز بسیار زیاد هست که اگر بخواهیم به صورت خلاصه به آن بپردازیم باید بگوییم:
1- مقیاس پذیری خودکار:
شاید اولین و مهمترین ویژگی کوبرنتیز این است که مقیاس پذیری خودکار در اختیار پروژه و کاربر قرار می دهد به این مفهوم که وقتی میزان بار افزایش یافت با کانفیگ هایی که از قبل گرفته است میت وانید تعداد پاد ها را به صورت خودکار کم یا زیاد کند.
به طور واضح یعنی وقتی ترافیک سایتی بالا می رود و ورودی افزایش می یابد بدون این سایت داون شود پاد های بیشتری از پروژه اجرا می شود که کمک می کند ترافیک ها بالانس شود بین پاد های مختلف تا برنامه دچار افت سرعت نشود.
و وقتی هم بار ترافیکی کم می شود منابع اضافه را حذف می کند تا هزینه و مصرف کاهش یابد در نتیجه این مقیاس پذیری می توان گفت که خیال کاربر از اینکه همیشه یک تعادلی بین عملکرد بالا و هزینه پایین وجود خواهد داشت بدون نیاز به دخالت!
2- مدیریت خودکار:
کوبرنتیز مانند سایر سیستم های سنتی نیست که نیاز باشد به صورت مداوم وضعیت سرویس ها توسط شخص بررسی شود در واقع خود کوبرنتیز مداوم وضعیت پاد ها و نود ها را بررسی می کند تا اطمینان حاصل کند همه چیز در بهترین حالت در حال اجرا می باشد!
اگر یک Node از دسترس خارج شود سریعا پاد ها را روی یک ورکر سالم دیگر بالا می آورد و اجرا می کند تا ورکری که دچار مشکل شده است دوباره در دسترس قرار بگیرد و بالانس کند.
اگر پادی دچار خطا شود بلافاصله ریستارت یا حذف می کند و پاد جدید جایگزین می کند.
این ویژگی از مزایای بسیار خوب کوبرنتیز هست چون باعث افزایش پایداری و کاهش داون تایم ها شده و کمتر نیرو انسانی را هم درگیر می کند.
3- دیپلوی راحت و بدون قطعی:
همانطور که در بالا هم گفته شد در کوبرنتیز دیپلوی تقریبا راحت و بدون دردسر می باشد شما دیگر نگران این نیستید که نسخه جدید ممکن است دچار مشکل باشد و باعث قطعی سیستم شود! چون کوبرنتیز تا از صحبت دیپلوی و اجرای پروژه اطمینان نداشته باشد نسخه قبلی را از دسترس خارج نمی کند!
به عبارت دیگر نسخه های جدید تنها در صورتی قرار می گیرند که به درستی کار کنند و اگر هم استقراری دچار مشکل در کدنویسی بود به سادگی می توانید به استقرار و دیپلوی قبلی برگردید!
این ویژگی برای اپلیکیشن هایی که به صورت منظم توسط یک تیم توسعه پیدا می کنند ضروری می باشد.
4- استفاده بهینه از منابع:
کوبرنتیز با استفاده از کانفیگ های قبلی که گرفته هست مشخص می کند هر کانتینر چه مقدار به رم و سی پیو نیاز دارد یا دیسکی که باید روی آن پاد را ایجاد کند باید تا چه میزان فضای خالی داشته باشد و در این شرایط تصمیم می گرد کدام ورکر برای این کار مناسب هست و منابع در دسترس بهتری دارد و پاد را روی آن ایجاد می کند.
همچنین می تواند چندین کانتینر را روی یک نود اجرا کند بدون اینکه منابع هدر برود یا تداخل ایجاد شود.
در صورتی که نیاز باشد کوبرنتیز پاد ها را برای تقسیم بار کاری بین نود ها جابه جا می کند تا از کرش ناگهانی نود جلوگیری بخاطر پر شدن منابع سخت افزاری جلوگیری کند.
5- قابلیت حمل یا پورتابل بودن:
ویژگی خوب دیگر کوبرنتیز این است که شما دیگر وابسته به یک زیرساخت خاص نیستید! در واقع شما می توانید پروژه خود را روی لپ تاپ، سرور های مختلف و سرویس های ابری گوناگون اجرا کنید بدون اینکه نیاز باشد تغییری در کد داشته باشید.
این موضوع بخاطر استاندارد بودن کانتینر ها می باشد.
برای همین به سادگی می توان از یک پلتفرم ابری به پلتفرم ابری دیگر مهاجرت کند بدون اینکه نیاز باشد کار خاصی در کد ها انجام دهید.
بنابراین نیاز نیست نگران افزایش قیمت شرکت ها باشید چون همچنان امکان جابه جایی به شکل ساده فراهم هست.
6- مدیریت سرویس و شبکه:
کوبرنتیز همانطور که در بالا هم گفته شد به صورت داخلی روش هایی برای لود بالانسینگ و ارتباط بین پاد ها فراهم می کند.
به عبارت دیگر سرویس ها می توانند بدون نیاز به تنظیمات پیچیده و کانفیگ های سخت به سادگی همدیگر را پیدا کنند.
کوبرنتیز با قابلیت Service به مجموعه از پاد ها در یک پروژه آدرس ثابت ارائه می کند و کمک می کند سرویس ها به سادگی همدیگر را پیدا کنند.
7- اکوسیستم قدرتمند:
کوبرنتیز یک اکوسیستم بسیار گسترده و قدرتمند هست که ابزار ها و پروژه های متن باز زیادی دارد که امکانات آن را چند برابر می کند.
برای مانیتورینگ و مشاهده وضعیت سیستم، ابزارهایی مثل Prometheus و Grafana بهکار می روند.
همچنین ابزارهایی مثل Istio قابلیت های پیشرفته ای مثل مدیریت ترافیک و امنیت را فراهم می کنند.
این اکوسیستم باعث می شود تقریبا برای هر نیازی یک راه حل آماده وجود داشته باشد و توسعه و نگهداری سیستم ها سریع تر و حرفه ای تر انجام شود.
8- اتوماسیون بالا:
کوبرنتیز برای بسیاری از کارها اصلا نیازی به دخالت انسان ندارد و فرآیند های تکراری و زمان بر را به صورت خودکار انجام می دهد.
در واقع کار هایی مانند استقرار، مقیاس دهی، بازیابی خطا و مدیریت منابع کاملا خودکار می باشد.
به عبارت دیگر شما فقط باید وضعیت مطلوب سیستم را مشخص کنید و کوبرنتیز براساس این وضعیت خودش بقیه کارها را اجرا می کند.
کوبرنتیز به صورت منظم وضعیت سیستم را بررسی می کند و در صورتی که از حالت مطلوب خارج شد آن را اصلاح می کند.
9 پشتیبانی از میکروسرویس ها:
یکی دیگر از مزیت های خوب کوبرنتیز سازگاری کامل و بالا با معماری میکروسرویس ها هست.
هر سرویس می تواند به صورت یک پاد مجزا اجرا و مدیریت شود و این کمک می کند هر بخش از سیستم به صورت جداگانه توسعه یابد و تست و منتشر شود.
از مزیت های خوب این روش این است که تغییر یا بروزرسانی روی یک سرویس معمولا روی سرویس دیگر اثر نمی گذارد و ریسک تغییرات را کاهش می دهد.
10- توسعه پذیری بالا:
طراحی و ساختار کوبرنتیز بسیار توسعه پذیر می باشد و می توان قابلیت های جدیدی به آن اضافه کرد بدون اینکه هسته اصلی سیستم هیچ تغییری داشته باشد.
یعنی شما می توانید نوع منابع جدید تعریف کنید و کوبرنتیز را برای نیاز های خاص خود شخصی سازی کنید این انعطاف پذیری باعث می شود که کوبرنتیز فقط یک ابزار ثابت نباشد بلکه یک پلتفرم قابل گسترش برای انواع سناریوهای پیچیده ای باشد که یک سازمان یا شخص نیاز دارد.
11- امنیت قابل اطمینان:
کوبرنتیز از چند لایه امنیتی استفاده می کند که باعث می شود کنترل دقیق روی دسترسی ها و ارتباطات سیستم وجود داشته باشد!
این مورد یکی از مهمترین علت هایی هست که می توان به امنیت کوبرنتیز اتکا کرد!
کوبرنتیز مشخص می کند هر کاربر دقیق به چه منابع و سرویسی باید دسترسی داشته باشد و با قابلیت Secrets همانطور که گفته شد می توان اطلاعات حساس را به صورت امن ذخیره و مدیریت کرد بدون اینکه نیاز باشد در کد یا ایمیج قرار بگیرد.
کوبرنتیز با قابلیت های خاصی که دارد اجازه می دهد ارتباط بین پاد ها محدود و کنترل شود، یعنی فقط سرویس های مجاز بتوانند با هم ارتباط داشته باشند.
پارس وب سرور و راه اندازی پلتفرم ابری Runflare:
پارس وب سرور با دیدن همین ویژگی های مثبت و فوق العاده کوبرنتیز و با هدف ساده تر کردن استفاده از این پلتفرم و درخواست ها و خلا هایی که در سرویس های سنتی برای دیپلوی کردن پروژه های مختلف از جمله میکرو سرویس ها وجود داشت شروع به راه اندازی پلتفرم ابری رانفلر بر بستر کوبرنتیز کرد!
این پلتفرم که از سال 1402 شروع به فعالیت کرده است به گونه ای طراحی شد که کاربران بدون درگیر شدن با پیچیدگی های فنی بتوانند اپلیکیشن های خود را به صورت کانتینری اجرا و مدیریت کنند.
ایده اصلی Runflare این است که همان قابلیت هایی مثل مقیاس پذیری خودکار، استقرار بدون قطعی و مدیریت هوشمند منابع را در قالب یک سرویس آماده ارائه دهد.
در واقع به جای اینکه کاربر مستقیما با اجزای پیچیده کوبرنتیز مثل Node و Pod درگیر شود، همه چیز در یک رابط ساده تر و قابل استفاده تر در اختیار او قرار می گیرد.
این رویکرد کمک می کند تیم های کوچک و متوسط هم بتوانند از مزایای معماری ابری و میکروسرویس ها استفاده کنند.
همچنین تمرکز روی اتوماسیون باعث میشود مدیریت زیرساخت، مانیتورینگ و بروزرسانی ها تا حد زیادی خودکار انجام شود و برعهده تیم توسعه و فنی رانفلر باشد و کاربران دغدغه ای از بابت مانیتورینگ و توسعه زیرساخت نداشته باشند.
در چنین پلتفرمی، هدف اصلی کاهش پیچیدگی DevOps و افزایش سرعت توسعه و انتشار نرم افزار است.
Runflare در واقع یک لایه ساده سازی شده روی زیرساخت های مدرن ابری محسوب می شود که قدرت کوبرنتیز را در قالبی کاربردی تر ارائه می دهد.
این مدل باعث می شود توسعه دهندگان بیشتر روی منطق کسب و کار تمرکز کنند تا مدیریت سرور و زیرساخت!
در نهایت، چنین پلتفرم هایی نشان می دهند که آینده توسعه نرم افزار به سمت سرویس های ابری خودکار و مدیریت شده حرکت می کند و از شیوه های سنتی سابق مانند هاست ها فاصله گرفته است.
یکی از مزیت های مهم رانفلر این است که فرآیند استقرار اپلیکیشن ها ساده شده است در حالی که کار کردن با کوبرنتیز به شیوه مستقیم نیازمند دانش فنی عمیق و تنظیمات متعدد هست!
در رانفلر این مورد به یک جریا ساده و قابل فهم تبدیل شده که کاربران در پنل کاربری خود به شیوه هایی مانند دیپلوی از طریق CLI یا Drag $ Drop و حتی اتصال به گیت می توانند پروژه را دیپلوی کنند.
از دیگر مزایای مهم این پلتفرم، مدیریت خودکار منابع و مقیاس پذیری هوشمند است. همان طور که در کوبرنتیز امکان افزایش یا کاهش خودکار منابع وجود دارد، Runflare این قابلیت را در قالبی ساده تر ارائه می دهد تا سیستم بتواند بر اساس میزان ترافیک، منابع را بهینه مدیریت کند.
کاربران در رانفلر می توانند با خاموش کردن آيتم خود در زمان هایی که نیاز به پروژه ندارند هزینه ای پرداخت نکنند و کاملا بودجه ای که برای پروژه اختصاص داده اند را به سادگی مدیریت کنند.
استقرار بدون قطعی نیز یکی دیگر از ویژگی های کلیدی رانفلر می باشد. در بسیاری از سیستم ها، بروزرسانی نسخه جدید می تواند منجر به داون تایم شود، اما Runflare با استفاده از مکانیزم های مشابه خود کوبرنتیز که استقرار بدون قطعی را فراهم می کند نسخه جدید بدون توقف سرویس جایگزین شود.
در رانفلر کاربران به انواع زبان های برنامه نویسی و فریم ورک های معروف در کنار دیتابیس های مختلفی دسترسی دارند و برای راه اندازی میکروسرویس ها بسیار کاربردی و مناسب هست.
در کنار همه موارد تیم فنی رانفلر به صورت شبانه روزی در تیکت و پاسخگویی تلفنی آماده هست تا مشکلات مربوط به پروژه ها را بررسی کند و این موارد را برطرف کند.








