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/datachown 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-utilsmount -f nfs NFS_IP_SERVER:/kube/data /mntکه باید mount بشه بعد از اینکه mount شد اون رو unmount کنیدunmount /mntروی ubuntu apt-get install nfs-commonmount -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 .. وجود داره که مربوط به سطح دسترسی هاست.فایل بعدی که باید ساخته بشه classkubectl 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/datapvc1-pvcتشکیل شده که یعنی اینکه کار تمام است و همه چی اوکی!خسته نباشید سوالی بود بپرسید من همیشه هستم!