behnam.hasanbeygi
behnam.hasanbeygi
خواندن ۳ دقیقه·۴ سال پیش

nfs-subdir-external-provisioner

سلام خسته نباشید

ایشالا تو این زمان کرونا تو صحت و سلامتی باشید

امروز میخوام راجب nfs dynamic provisioning kubernetes صحبت کنم!

خیلی ها مدیریت storage براشون یک امر حیاتی محسوب میشه و واقعا هم حیاتی هست چون که مربوط به ذخیره سازی دیتا میشه !چندین راه برای ایجاد یک storage پایدار وجود داره به عنوان مثال ceph rook و glusterfs و nfs تو این مقاله سعی میکنم ساده ترینشون که همون nfs هست رو توضیح بدم !

نیازمندی ها:

یک کلاستر kubernetes

یک Nfs سرور

نصب NFS server بر روی centos

در حالت root این عملیات انجام بدید

ابتدا پکیج nfs رو نصب کنید

yum install nfs-utils



بعد از نصب پکیج nfs یک دایرکتوری به اسم دلخواه تون تشکیل بدید (این دایرکتوری رو به عنوان یک path میخوایید export کنید)

mkdir -p /kube/data

بعد بهش permissons رو میدی برای نوشتن و خوندن و...(تو حالت پروداکشن یکم دقت کنید رو این permission ها )

chmod -R 755 /kube/data

chown nfsnobody:nfsnobody /kube/data

بعد از ساخت شدن این دایرکتوری و دادن permissions حالا نوبت به export کردن این path میشه !فایل

vim /etc/exports



این کانفیگ رو تو این فایل قرار بدید

/kube/data *(rw,sync,no_subtree_check,no_root_squash,no_all_squash,insecure)

بعد wq و خروج!

خب الان nfs سرور رو راه اندازی کنید

systemctl enable nfs-server --now

این کامند رو اجرا کنید

exportfs -rav

باید این خروجی رو ببینید!

exporting *:/kube/data

خب تا اینجا nfs server رو راه اندازی کردید و اگر میخوایید اون رو تست کنید رو یک سرور دیگه این تست انجام بدید

رو centos

yum install -y nfs-utils

mount -f nfs NFS_IP_SERVER:/kube/data /mnt

که باید mount بشه بعد از اینکه mount شد اون رو unmount کنید

unmount /mnt

روی ubuntu

apt-get install nfs-common

mount -f nfs NFS_IP_SERVER:/kube/data

و بعدش دوباره اون رو unmount کنید

خب اگر هیچ کدوم از مراحل error دریافت نکردید همه چی حله اگر error ی دیدید بهم بگید تا هم راهنمایی تون و هم این متن رو اصلاح کنم!

اجرای pods nfs-client-provisioner رو کلاستر kubernetest

من از github nfs-subdir-external-provisionig استفاده کردم و برای اینکه سردرگمی به وجود نیاد فایل های مورد نیاز برای راه اندازی این deployment روی git خودم قرار میدم که دسترسی سریع داشته باشید !

این repo رو clone کنید و بعدش این فایل ها رو روی کلاستر اعمال کنید

https://github.com/Behnamhb/nfs-provisioning

اولین فایل

kubectl -f create rbac.yaml

اگه فایل رو بررسی کنید اطلاعات مربوط به service account ,cluster rolebinding .. وجود داره که مربوط به سطح دسترسی هاست.

فایل بعدی که باید ساخته بشه class

kubectl create -f class.yaml

که این یک storage class ساخته میشه که اسمش هست managed-nfs-storage

توضیحش اینه که با add کردن این storage به deployment خودتون و استفاده ازش به صورت اتوماتیک برای شما pv ساخته و bound میشه !

مرحله سوم اینه که باید deployment ادد کنید !

این مرحله یک فرق اساسی با مراحل قبلی داره به این صورت که باید شما file دیپلویمنت یک تغییراتی بدید !

میایید اخر فایل بعد ازenv این متغییرات ها رو میبینید

- name: NFS_SERVER



اندازه یا value این فایل الان10.3.243.101 هست شما اون به IP NFS سرور خودتون تغییر بدید.

NFS_PATH



اون رو به دایرکتوری که ساختید تغییر بدید

/kube/data

تو قسمت پایین که volumes هم هست این دو تا رو تغییر بدید به IP و PATH که باهاش nfs رو راه اندازی کردید

حالا تو این مرحله که تغییرات اعمال شد.

kubectl -f create deployment.yaml

پاد رو ادد کنید به کلاستر.

بعد از ساخته شدن container رو status running حالا یک pvc تست میسازیم که ببینیم ایا کار میکنه یا نه

تو همون git repo یک فایل به اسم test-pvc.yaml قرار داده شده که ۵۰۰ مگ برای ما فضا رو درست میکنه شما باید در این حالت بعد از اعمال این فایل رو کلاستر ببینید که هم pvc تشکیل شده هم به صورت اتوماتیک pv تشکیل شده هم اینکه اگر رو pvc اطلاعات بریزید باید روی nfs server اطلاعات رو ببینید!

اگه به فایل test-pvc.yaml هم دقت کنید که میبینید که storage class که اینجا مشخص شده همون

managed-nfs-storage

هستش

kubectl create -f test-pvc.yaml

بعد از اون با زدن کامند

kubectl get pv,pvc

باید هم pvc , pv رو ببینید که تشکیل شده اگر به nfs سرور هم نگاه کنید تو فایل

/kube/data

pvc1-pvc

تشکیل شده که یعنی اینکه کار تمام است و همه چی اوکی!

خسته نباشید سوالی بود بپرسید من همیشه هستم!

centoskubernetesnfsdevops
MLOps and data science @ AIFA team
شاید از این پست‌ها خوشتان بیاید