مدیریت دادههای مربوط به یک کانتینر همواره چالش بزرگی بوده است. برای مثال اگر کانتینر شما با مشکلی مواجه شود و یا Crash کند، دادههای داخل آن نیز حذف میشوند. کوبرنتیز برای حل این مشکل راهکار فوقالعادهای را در اختیار کاربرانش قرار داده که Volume نام دارد.
Volume در واقع یک دایرکتوری (به همراه دادههای داخل آن) است که در پاد قرار گرفته و بین کانتینرهای مختلف به اشتراک گذاشته میشود. به این معنی که تمام کانتینرهای موجود در پاد x میتوانند به Volume مورد نظر دسترسی داشته باشند.
در این حالت اگر یک کانتینر به مشکل بر بخورد و یا حتی حذف شود، دادههای Volume پاک نشده و کماکان در پاد باقی میماند. حال اگر کانتینر جدیدی در پاد ایجاد شود، میتواند به دادههای Volume دسترسی پیدا کند.
در ارتباط با تعداد کانتینرهایی که میتوانند از Volume استفاده کنند نیز محدودیتی وجود نداشته و تمام کانتینرهای داخل یک پاد میتوانند به Volume دسترسی داشته باشند.
در این مطلب از وبلاگ همروش قصد داریم شما را با چیستی Volume، مزایا و انواع آن آشنا کنیم. همچنین فرایند ساخت یک Volume جدید را بررسی خواهیم کرد.
مزایا استفاده از Volume در کوبرنتیز
- ماندگاری دادهها: Volume در کوبرنتیز با راهاندازی مجدد کانتینرها، از بین نرفته و اطلاعات را حفظ میکند. به همین دلیل حتی بعد از حذف کانتینر در دسترس بوده و ماندگار است.
- اشتراکگذاری دادهها: با استفاده از Volume میتوانید مجموعهای از اطلاعات را بین کانتینرهای مختلف موجود در یک پاد به اشتراک بگذارید.
- منعطف بودن: Volume از چندین نوع تکنولوژی Storage Backend پشتیبانی میکند. به همین دلیل انتخاب یک راهحل و رویکرد برای اپلیکیشنتان را سادهتر میکند. از جمله این تکنولوژیها میتوان به S3 ،local-storage ،NAS و… اشاره کرد.
- امنیت: با قرار دادن اطلاعات حساس در Volumeهای رمزنگاری شده، میتوانید امنیت اطلاعات خود را افزایش دهید.
دستهبندیهای Volume در کوبرنتیز
به صورت کلی دو نوع Volume در کوبرنتیز وجود دارد که هر کدام از آنها زیرشاخههای متنوعی نیز دارند که در عنوان بعدی به آنها نیز اشاره خواهیم کرد:
- Ephemeral یا زودگذر: چرخه زندگی یا مدت زمان کاری این نوع از Volumeها براساس پادها تعیین میشود. به این معنی که اگر پاد مربوطه حذف شود، Volume مربوطه نیز حذف خواهد شد. از این نوع Volume برای ذخیره اطلاعاتی استفاده میشود که به یک پاد خاص مرتبط هستند. به همین دلیل با از بین رفتن پاد، وجود آنها بیکاربرد خواهد بود. این نوع از Volumeها به صورت خودکار بعد از ایجاد پاد توسط کوبرنیز ساخته میشوند.
- Persistent یا با دوام: چرخه زندگی این نوع از Volumeها مستقل از پادها بوده و به همین دلیل بعد از حذف پاد مربوطه، این Volume پابرجا میماند. این نوع از Volume زمانی مورد استفاده قرار میگیرد که بخواهیم اطلاعاتی را میان پادهای مختلف به اشتراک بگذاریم و همچنین با حذف شدن هر کدام از پادها، اطلاعات از بین نرود. این نوع از Volume، هم به صورت دستی میتواند توسط مدیر کلاستر ایجاد شود و هم به صورت پویا توسط پلاگینهای Storage مربوط به کوبرنتیز.
حال که با این دو دستهبندی از Volume آشنا شدید نیاز است که با انواع مختلف هر کدام نیز آشنا شوید:
انواع Volume در کوبرنتیز
هر کدام از دستهبندیهایی که در بالا به آنها اشاره شد (Ephemeral و Persistent) دارای چندین نوع Volume هستند که در ادامه با برخی از پر استفادهترین این موارد آشنا خواهیم شد.
ولیوم EmptyDir
این ولیوم از جمله ولیومهای زودگذر یا Ephemeral است که با ایجاد یک پاد جدید ساخته شده و با حذف کردن آن نیز پاک میشود. از این Volume برای ذخیرهسازی اطلاعات موقت مانند لاگها، کشها و دادههایی از این دست استفاده میشود.
برای ایجاد این نوع از ولیوم میتوانید کدهای زیر را به فایل پیکربندی مربوط به پاد مورد نظر اضافه کنید:
volumes:
- name: temp-storage
emptyDir: {}
ولیوم HostPath
این ولیوم یک فایل یا دایرکتوری را از «فایل سیستم» نود میزبان به پاد مربوطه Mount میکند. از این Volume زمانی استفاده میشود که اطلاعات مورد نظر شما در کانتینر ایمیج وجود ندارد و یا اینکه دسترسی اشتراکی بین کانتینرهای مختلفی که روی همان Host در حال اجرا هستند به آن اطلاعات امکان پذیر نیست.
البته استفاده از HostPath برای محیط Production مناسب نبوده و بهتر است از آن استفاده نکنید. دلیل آن نیز اشتراک گذاری دادههای حساس نود میزبان است که رویکرد امن و قابل اعتمادی نیست.
برای ایجاد این نوع از ولیوم میتوانید کدهای زیر را به فایل پیکربندی مربوط به پاد مورد نظر اضافه کنید:
volumes:
- name: host-storage
hostPath:
path: /host-data
ولیوم ConfigMap
این ولیوم به شما اجازه میدهد تا دادههای مربوط به پیکربندی را به صورت Key:Value وارد کرده و آن را به عنوان متغیر محیطی (Environment Variable) در پاد مورد نظر Mount کنید. ولیوم ConfigMap برای جدا کردن دادههای مرتبط با پیکربندی از کدهای اپلیکیشن استفاده شده و همچنین به شما اجازه مدیریت و دسترسی به این دادهها را از محیطهای مختلف فراهم میکند.
برای ایجاد این نوع از ولیوم میتوانید کدهای زیر را به فایل پیکربندی مربوط به پاد مورد نظر اضافه کنید:
volumes:
- name: config-volume
configMap:
name: my-config
ولیوم Secret
ولیوم Secret ساختار مشابهی با ConfigMap دارد با این تفاوت که برای ذخیره اطلاعات حساس مانند رمزهای عبور، توکنها، Certificateها و… استفاده میشود. اطلاعات موجود در این Volume به صورت رمزنگاری شده نگهداری میشوند و میتوان به صورت متغیر محیطی در پادها Mount شود.
برای ایجاد این نوع از ولیوم میتوانید کدهای زیر را به فایل پیکربندی مربوط به پاد مورد نظر اضافه کنید:
volumes:
- name: secret-volume
secret:
secretName: my-secret
ولیوم PersistentVolume
ولیوم PersistentVolume یک ولیوم NAS یا Network Attached Storage است که میتواند به صورت داینامیک توسط کوبرنتیز ایجاد و مدیریت شود. از این ولیوم در جهت ایجاد یک فضای ذخیرهسازی پایدار برای اپلیکیشنهای Stateful مانند دیتابیسها استفاده میشود.
برای ایجاد این نوع از ولیوم، ابتدا نیاز است که یک PVC یا Persistent Volume Claim ایجاد کنید، که در واقع یک درخواست برای در اختیار گرفتن منابع ذخیرهسازی است. برای انجام اینکار نیاز است که کدهای زیر را به پیکربندی پاد خود اضافه کنید:
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: my-pvc
جمعبندی
Volumeها در ساختار کوبرنتیز از اهمیت بسیار زیادی برخوردار هستند و مطمئنا یادگیری عمیق آن به پیادهسازی هر چه بهتر اپلیکیشنها کمک میکند. در این مطلب از وبلاگ همروش ما با چیستی ولیوم در کوبرنتیز آشنا شدیم و همچنین جنبههای مختلف آن را مورد بررسی قرار دادیم.