تو قسمت هشتم از مسیر بلاگ پستهای کوبرنتیز، میریم سراغ مفاهیم استورج توی کوبرنتیز و با هم بررسی میکنیم که چطوری توی کلاستر میتونیم به پادها والیوم بدیم و دسترسی اونها به استورج کلاستر رو مدیریت کنیم.
خب یه مروری کنیم پستهای قبلی رو:
توصیه میکنم که حتما این پستها رو هم مطالعه کنید. بریم که ادامه بدیم.
قدم به قدم با هم بررسی میکنیم که از چه طریقی میتونیم به پادهامون توی کلاستر به استورج دسترسی بدیم و این دسترسی رو محدود کنیم و مدیریتش رو انجام بدیم.
اول ببینیم که Volume توی کوبرنتیز چیه؟
یه کوبرنتز والیوم در واقع یه دایرکتوری هست که شامل دیتایی میشه که در دسترس یک کانتینر هستن توی یه پاد مشخص توی کلاستر. بذارید در ادامه یه خرده بهتر اینو توضیح بدم و یه یادآوری کنیم از پستهای داکر.
توی مثال بالا یه پاد رو میبینیم سمت چپ که برای نوشتن دیتای خودش همونطور که قبلا توضیح دادیم روی یک لایه writeable بالای لایههای ایمیج کانتینر که فقط خواندنی هستند، مینویسه. اگه میخواید دقیقتر در موردش بدونید این بلاگ پست در مورد تکنولوژی که داکر ازش استفاده میکنه رو بخونید و Union FS رو اونجا ببینید. حالا اگه این کانتینر سمت چپ به هردلیلی از بین بره دیتایی هم که توی لایه سبز رنگ نوشته پاک میشه و کانتینر جدید سمت راست که جایگزینش میشه دیگه اون دیتا رو نداره و از اول باید توی لایه نوشتنی خودش دیتا رو بنویسه. اگه اون دیتا و فایلهایی که توی لایه سبز رنگ توسط کانتینر نوشته میشه برامون اهمیت داشته باشه باید به طریقی اون رو از کانتینر خارج کنیم و در بیرون کانتینر جایی اون رو نگهداریم.
بنابراین میاییم یه والیوم ایجاد میکنیم و دسترسی بهش رو به پاد میدیم تا کانتینرهای پاد بتونن دیتاشون رو روی اون بنویسن و وقتیکه یک کانتینر از بین رفت، کانتینر جدیدی که جایگزینش میشه به همون دیتا دسترسی داره و میتونه کارش رو ادامه بده.
حالا بریم ببینم انواع والیوم توی کوبرنتیز چی هستن؟
قبل از اینکه توضیحش بدم لازمه بدونید که به هیچ عنوان استفاده از این مدل والیوم توصیه نمیشه و نباید ازش استفاده کنید! مشکل امینتی داره و اگر درست کانفیگ نکنید هر کی میتونه به راحتی ادمین کوبرنتیز بشه و کلا کلاستر رو بفرسته اردوگاه توریستی که اصلا چیز مطلوبی نیست. این نوع از والیوم یهجورایی شبیه bind mount توی داکر هست.
والیوم از نوع hostPath یک فایل یا دایرکتوری هست که به صورت مستقیم از فایل سیستم نود کوبرنتیز mount میشه به پاد در حالیکه این میزان از دسترسی به فایل سیستم برای پاد دسترسی زیادی هست و میتونه خطرات امنیتی زیادی رو برامون به همراه بیاره. مثلا فرض کنید ما اومدیم یه مقدار دیسک بدیم به یه پاد که دیتاشو اونجا نگهداره بعد اون پاد از همون طریق سکرتهای ادمین کلاسترمون رو تونسته بره برداره!!! چون دسترسیای که بهش دادیم بیشتر از نیازیه که داشته. میتونید اینجا بیشتر در مورد hostPath بخونید. کلا توصیه میکنم که این نوع والیوم رو کلا جلوش رو بگیرید یا فقط یه سری مسیرهای خاص رو بهش اجازه بدید.
این نوع والیوم زمانیکه پاد به یک نود اختصاص داده میشه، ساخته میشه و مثل اسمش از اول خالیه. تمام کانتینرهای توی پاد میتونن توی این والیوم بنویسن و ازش بخونن، بنابراین این والیوم میتونه در مسیرهای یکسان یا متفاوت توی کانتینرهای مختلف mount بشه. زمانیکه پاد از روی نود کلاستر پاک بشه به هردلیلی، دیتای emptyDir هم به صورت کامل پاک میشه. اما crash کردن کانتینر درون پاد منجر به پاک شدن دیتای این نوع والیوم نمیشه. مثلا ازین نوع والیوم میتونیم برای چک پوینت گذاشتن طی انجام یک فرآیند محاسباتی استفاده کنیم تا اگر کانتینری crash کرد دیتا از بین نره.
توی کوبرنتیز emptyDir.medium کنترل میکنه که والیوم کجا ذخیره بشه، به صورت دیفالت والیومهای emptyDir روی همونجایی که نود بهش برمیگرده ذخیره میشن حالا میتونه دیسک HDD باشه یا SSD یا نتورک استورج. حتی میتونیم emptyDir.medium رو روی Memory تنظیم کنیم و عملکردی شبیه tmpfs توی داکر رو داشته باشیم و دیتای والیوم روی RAM ذخیره بشه، فقط در این حالت محدود به حجم مموری هستیم که باید حواسمون بهش باشه.
به طور کلی والیوم هارو توی کوبر میتونیم توی دوتا دسته کلی جا بدیم دسته اول Ephmeral Volumeها و دسته دوم که در ادامه توضیح میدیم Persistent Volumeها. دسته اول در واقع والیومهایی هستن که ماندگار نیستند مثل همین emptyDir که توضیش دادیم، انواع دیگهای مثل configMap و downwardAPI و secret هم هستند توی این دسته که هرکدوم استفادههای خودشون رو دارند، اینجا میتونید بیشتر در مورد والیومهای Ephemeral بخونید.
اما دسته دوم والیومهای Persistent هستند که در ادامه توضیح میدیم در موردشون.
این نوع والیوم یک API کوبرنتیز رو در اختیار ادمین کلاستر میذاره که جزئیات و پیچیدگیهای دسترسی به استورج رو پنهان میکنه و در قالب یک مفهوم abstract امکان استفاده از استورج رو فراهم میکنه. یک PV یا PersistentVolume قسمتی از استورج هست که توسط ادمین کلاستر یا مکانیزمی که در ادامه توضیحش میدیم یعنی استفاده از استورجکلاس ایجاد شده.
خب پس حالا که دسترسی ایجاد این نوع والیوم رو فقط ادمین کلاستر داره، پس یوزر کلاستر اصلا چجوری ازین والیوم استفاده کنه؟
مفهومی رو در کوبرنتیز داریم تحت عنوان Persistent Volume Claim که به نوعی میتونیم بگیم درخواستی هست برای PV، یعنی یوزر کلاستر با استفاده از PVC یه درخواست میده که من PV میخوام بدون اینکه نیاز باشه چیزی از جزئیات پیادهسازی و موارد مربوط به کلاستر و یا پروایدری که داره سرویس رو ارائه میده و نحوه ایجاد استورج بدونه.
بنابراین همانطور که در تصویر بالا میبینیم دولوپر به عنوان یوزر کلاستر نیاز داره که یک والیوم درون پاد قرار بده و این نیاز رو از طریق PVC اعلام میکنه. اما به Persistent Volume های کلاستر دسترسی نداره و اونها رو ادمین کلاستر مدیریت میکنه و باید از طریق ادمین مورد تایید قرار بگیره تا دسترسی به استورج به پاد داده بشه.
نکتهی مهم اینه که میشد مفهومی مثل PV وجود نداشته باشه ولی این طوری باید دسترسی استوریج خودمون که چیز مهمی هم هست رو در اختیار همهی استفاده کنندههای کلاستر قرار بدیم که خب حتما میدونید دسترسی که زیاد در اختیار دیگران باشه کلا میتونیم پابلیک در نظرش بگیریم چون پخش میشه و نمیتونیم جلوش رو بگیریم. ولی مفهوم PV وجود داره که این دسترسی در اختیار ادمین کلاستر باقی بمونه و پخش نشه.
مطلب دیگهای که خوبه اینجا اشاره کنیم بحث مودهای دسترسی والیوم هست یا همون Access Modeها.
تا به اینجای کار روال نوعی از اختصاص حافظه که به اون static provisioning گفته میشه و فهمیدیم که دسترسی استورج رو نباید به یوزر به شکل مستقیم بدیم و PVهارو ادمین کلاستر مدیریت میکنه فقط، اما حالا که فقط ادمین میتونه دسترسی داشته باشه یعنی ما pend اون میمونیم برای والیوم گرفتن؟ یعنی هر کاربری که والیوم بخواد باید صبر کنه تا ادمین تایید بده؟ خیلی مسیر خوبی نیست. اینطوری مدام ما پند ادمین میشیم و یا ادمین به جای انجام کارهای مهم دیگه باید همش بیاد والیوم بسازه و در اختیار ما قرار بده که اصلا مسیر مطلوبی نیست و خیلی به کوبرنتیز و فرآیندهایی که تا الان در موردش صحبت کردیم نمیخوره.
روش دیگری از اختصاص حافظه وجود دارد که به صورت Dynamic بهمون امکان استفاده از استورج رو میده. مفهومی تحت عنوان استورجکلاس تعریف میشه که با استفاده از اون ادمین کلاستر میتونه استورج یا استورجهای مختلف رو به کلاس های متفاوتی تقسیم کنه که برای هرکدوم پالیسیهای مرتبط به خودشون رو بذاره، مثلا اینکه آیا از این کلاس استورج بکاپ گرفته بشه یا نه. و مهمترین موضوع این که دسترسیهایی که برای ساخت والیوم روی اون پروایدر استوریج نیاز است رو داخل اون قرار میده. کاربر هم نمیتونه دسترسیها رو ببینه ولی میتونه از اون استوریج کلاس استفاده کنه و با استفاده از آن والیوم بسازه. این طوری هم دسترسی رو نداده و هم کارها دیگه پند اون نیست.
در این روش ادمین کلاستر از قبل کلاسها رو ایجاد میکنه و دسترسیها و محدودیتهای اونها رو مشخص میکنه و زمانیکه کاربر بخواد درخواست استورج بده به جای اینکه منتظر تایید ادمین کلاستر بمونه به یک استورجکلاس که بهش داده شده اشاره میکنه که اونجا اجازه ساخت و محدودیتها و باقی موارد اعمال شده و کلاستر به نوعی متوجه میشه که تایید ادمین از قبل به این درخواست داده شده و فرآیند رو پیش میبره.
و اصطلاحا در این روش flow ایجاد PV و PVC به صورت خودکار انجام میشود.
در تصویر بالا مراحل رو به ترتیب میبینیم که ابتدا ادمین کلاستر استورجکلاس رو ایجاد میکنه سپس کاربر یک پاد رو میسازه و میتونه ببینه که چه استورجکلاسهایی توی کلاستر ساپورت میشه و در مرحله بعد با قراردادن استورجکلاسی که انتخاب میکنه در PVC به صورت خودکارprovisioner برای این درخواست PV مناسبش رو آماده میکنه.
توی پستهای قبلی مسیر کوبرنتیز در مورد pod phase گفته بودیم، والیومها هم میتونن توی phaseهای مختلفی باشند.
در انتهای این قسمت از بلاگ پستهای کوبر هم خوبه که چنتا مفهوم دیگه رو مرتبط با بحث استورجها معرفی کنیم.
مثل استورجها مفاهیم مشابهی رو برای اسنپشات داریم.
یعنی VolumeSnapshot داریم که مثل pvc هست و به نوعی درخواست یوزر برای اسنپشات گرفتم از یک والیوم هست. VolumeSnapshotContent که مثل pv هست و همون اسنپشات گرفته شده از یک والیوم هست که توی کلاستر توسط ادمین ایجاد شده و مشابه استورجکلاس VolumeSnapshotClass رو داریم که کلاسهای مختلف استورج رو برای والیوم در اون ایجاد میکنیم.
و شبیه کانفیگ و secret که توی داکر داشتیم اینجا توی کوبرنتیز هم configMap و secret رو داریم که جزو Ephemeral storage هستند که بالاتر توضیح دادیم و اگه بخواید میتونید در لینکهایی که براشون گذاشتیم بیشتر در مورد اونها بخونید.
در ادامه مسیر میریم سراغ ادامه مطالب کوبرنتیز و موارد مربوط به probe رو بررسی میکنیم.
مراقب خودتون باشید. 🌹🐳🌹
خوبه که داکرمی رو تو جاهای مختلف فالو کنید. پذیرای نظرات شما هستیم.
🫀 Follow DockerMe 🫀
🔔 Follow YouTube 🔔
📣 Follow Instagram 📣
🖇 Follow LinkedIn DockerMe🖇
🔎 Follow Linkedin Ahmad Rafiee 🔎
🕊 Follow Twitter 🕊