در اکوسیستم Kubernetes و OpenShift، می‌توان StorageClass را مانند نقشه‌ای برای ساخت یک خانه در نظر گرفت؛ یعنی دقیقاً مشخص می‌کند یک حجم چگونه ساخته شود و چه ویژگی‌های پایه‌ای داشته باشد. historically، زمانی که یک PersistentVolumeClaim (PVC) فعال می‌شد، تغییر پارامترهای عملکردی مانند IOPS یا throughput به‌صورت دستی و اغلب مخربی انجام می‌شد؛ معمولاً نیاز به حذف، بازساخت یا مهاجرت پیچیده داده‌ها بود. 🚧

در نسخه‌های جدید OpenShift، مفهوم VolumeAttributesClass (VAC) که به طور کامل در OpenShift 4.21 پشتیبانی می‌شود، راه‌حلی مدرن ارائه می‌دهد؛ VAC امکان به‌روزرسانی ویژگی‌های یک حجم در حال استفاده را به شیوه‌ای روان و بدون نیاز به جابجایی داده فراهم می‌کند. در حالی که StorageClass نحوه تهیه یک حجم جدید را تعیین می‌کند و پس از ایجاد PVC، storageClassName تغییرناپذیر است، VolumeAttributesClass تعریف می‌کند که چگونه می‌توان ویژگی‌های یک حجم موجود را تغییر داد. نکته کلیدی اینکه volumeAttributesClassName در PVC قابل تغییر است و می‌توان آن را هر زمان عوض کرد. 🔄

به عبارت دیگر، اگر StorageClass نقش «طرح اولیه» را ایفا کند، VolumeAttributesClass نقش «طرح نوسازی» را دارد و اجازه می‌دهد ابزارهای زیرساختی بدون قطع سرویس یا جابجایی داده‌ها ارتقا یابند. در این راهنما یک آزمایش نمونه با درایور AWS EBS CSI نشان می‌دهد چگونه می‌توان سطح عملکرد را در هنگام نوشتن فعال یک Pod تغییر داد.

پیش‌نیازها: یک خوشه OpenShift 4.21 یا بالاتر؛ درایور CSI که قابلیت ModifyVolume را پشتیبانی کند (مثلاً AWS EBS CSI). برای Google CSI نیز نیاز به نمونه‌های C3 یا N4 است (نمونه‌های پیش‌فرض E2 از Hyperdisk VAC پشتیبانی نمی‌کنند). برای درایورهای شخص ثالث که همراه OpenShift ارسال نشده‌اند، با فروشنده ذخیره‌سازی خود جهت تایید پشتیبانی VolumeAttributesClass مشورت کنید.

تعریف سطوح عملکرد: ابتدا دو شیء VolumeAttributesClass ایجاد می‌کنیم. این اشیا به خودی خود فضای ذخیره‌سازی ایجاد نمی‌کنند بلکه پارامترهایی را برای اصلاح رفتار حجم تعریف می‌کنند. نمونه‌ای برای سطح پایه (Base IOPS):

name: base-iops-example
driver: ebs.csi.aws.com
parameters:
  type: gp3
  iops: "3000"
  throughput: "125"

توجه: مقدار 3000 IOPS خط پایه برای gp3 است. اکنون یک VolumeAttributesClass دیگر برای عملکرد بالا می‌سازیم با تنظیم‌های متفاوت:

name: high-iops-example
driver: ebs.csi.aws.com
parameters:
  type: gp3
  iops: "5000"
  throughput: "125"

مرحله بعد: یک Volume ایجاد کنید و سپس یک PVC بسازید که به StorageClass و به مثال base-iops-example به‌عنوان خط پایه اشاره کند. پس از ایجاد PVC، معمولاً وضعیت به حالت Pending می‌ماند تا اولین consumer (Pod) ایجاد شود. برای تکمیل فرآیند، یک Deployment ایجاد کنید که به این PVC ارجاع دهد. پس از اتصال، PVC وضعیت Bound خواهد گرفت و حجم به Pod متصل می‌شود؛ در این نقطه VolumeAttributesClass پایه (مثلاً 3000 IOPS) اعمال شده است.

لحظه جادویی: ارتقا بدون وقفه ✨ — می‌توانید عملکرد زیرساخت ذخیره‌سازی را از سطح پایه به سطح با کارایی بالا در حالی که پاد در حال خواندن و نوشتن است، ارتقا دهید. در گذشته این کار معمولاً نیاز به پنجره نگهداری و راه‌اندازی مجدد داشت، اما با VolumeAttributesClass کافی است مرجع VAC در PVC را تغییر دهید.

مراحل ارتقا: به جزئیات PVC بروید، منوی Actions را باز کنید و گزینه Modify VolumeAttributes را انتخاب نمایید؛ سپس high-iops-example را انتخاب و ذخیره کنید. OpenShift آشتی (reconciliation) را آغاز می‌کند و در پس‌زمینه با ارائه‌دهنده ابر و درایور CSI هماهنگ می‌شود تا حجم را تغییر دهد. در طول این فرآیند برنامه به کار خود ادامه می‌دهد و هیچ قطع سرویسی رخ نمی‌دهد. ✅

پشت صحنه چه می‌گذرد؟ برخلاف StorageClass، VolumeAttributesClass قابل تغییر است و OpenShift بلافاصله آشتی را شروع می‌کند. در هنگام تغییر، پارامترها «چسبنده» هستند: اگر به یک VAC جدید بروید و کلاس جدید پارامتری را مشخص نکرده باشد، مقدار قبلی حفظ می‌شود (و به مقدار پیش‌فرض درایور برنمی‌گردد). OpenShift همچنین هشدارهایی ارائه می‌دهد که درایورهایی با VAC ناسازگار را شناسایی می‌کند تا به‌سرعت متوجه شوید آیا وضعیت فیزیکی حجم با پیکربندی مورد انتظار مطابقت دارد یا خیر.

OpenShift این انتقال را از طریق سه حالت مدیریت می‌کند:
– حالت “در حال انجام”: درایور CSI و ارائه‌دهنده ابر در حال اعمال تغییرند و یک هشدار “در انتظار تغییر VolumeAttributesClass…” نمایش داده می‌شود؛ برنامه همچنان عملیاتی است.
– حالت “خطا”: اگر تغییر ناموفق باشد (مثلاً به دلیل محدودیت ارائه‌دهنده)، هشدار خطا نشان داده می‌شود، اما حجم با آخرین پیکربندی معتبر کار می‌کند تا از خطر برای داده‌ها جلوگیری شود.
– حالت “موفقیت”: پس از تایید ارائه‌دهنده، UI وضعیت VAC جدید را نمایش می‌دهد و سخت‌افزار زیربنایی پارامترها را به‌روزرسانی کرده است؛ برنامه بلافاصله از ویژگی‌های جدید مانند افزایش IOPS یا throughput بهره‌مند می‌شود.

نکته عملی: برخی ارائه‌دهندگان مانند AWS EBS محدودیت «دوره خنک‌کن» دارند (مثلاً معمولاً هر شش ساعت یک تغییر مجاز است). بنابراین اگر بلافاصله بخواهید بین دو VAC جابه‌جا شوید، ممکن است درخواست دوم در حالت در حال انجام بماند یا با خطای ارائه‌دهنده مواجه شود. با این حال، با حذف نیاز به پنجره‌های طولانی تعمیر و نگهداری، اکنون می‌توانید IOPS و throughput را طبق تقاضا تنظیم کنید تا نوسانات ترافیک را مدیریت یا هزینه‌ها را بهینه کنید.

ادغام VolumeAttributesClass در OpenShift این امکان را فراهم می‌کند که مدیریت لایه داده به همان اندازه انعطاف‌پذیر شود که مدیریت پادهای برنامه است؛ بدین ترتیب زیرساخت ذخیره‌سازی می‌تواند با نیازهای متغیر تولید هماهنگ باقی بماند و عملکرد بالا را بدون به خطر انداختن دسترس‌پذیری تضمین کند. ⚙️

برای اطلاعات بیشتر می‌توانید به مستندات OpenShift 4.21 و Kubernetes (از جمله نسخه‌هایی که VolumeAttributesClass را معرفی کرده‌اند) مراجعه کنید.

به گزارش از وبسایت redhat