سلام خسته نباشید
ایشالا تو این زمان کرونا تو صحت و سلامتی باشید
امروز میخوام راجب 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
تشکیل شده که یعنی اینکه کار تمام است و همه چی اوکی!
خسته نباشید سوالی بود بپرسید من همیشه هستم!