{"id":2120,"date":"2025-08-08T10:45:08","date_gmt":"2025-08-08T08:45:08","guid":{"rendered":"https:\/\/blog.mhasin.eu\/?p=2120"},"modified":"2025-08-08T13:13:19","modified_gmt":"2025-08-08T11:13:19","slug":"kubernetes-nfs-storage","status":"publish","type":"post","link":"https:\/\/blog.mhasin.eu\/?p=2120","title":{"rendered":"kubernetes NFS storage"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get update\nsudo apt-get install -y nfs-common\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl create namespace kubeflow-storage\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">nano nfs-client.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: nfs-client-provisioner\n  namespace: kubeflow-storage\n---\nkind: ClusterRole\napiVersion: rbac.authorization.k8s.io\/v1\nmetadata:\n  name: nfs-client-provisioner-runner\nrules:\n  - apiGroups: [\"\"]\n    resources: [\"persistentvolumes\"]\n    verbs: [\"get\", \"list\", \"watch\", \"create\", \"delete\"]\n  - apiGroups: [\"\"]\n    resources: [\"persistentvolumeclaims\"]\n    verbs: [\"get\", \"list\", \"watch\", \"update\"]\n  - apiGroups: [\"storage.k8s.io\"]\n    resources: [\"storageclasses\"]\n    verbs: [\"get\", \"list\", \"watch\"]\n  - apiGroups: [\"\"]\n    resources: [\"events\"]\n    verbs: [\"create\", \"update\", \"patch\"]\n---\nkind: ClusterRoleBinding\napiVersion: rbac.authorization.k8s.io\/v1\nmetadata:\n  name: run-nfs-client-provisioner\nsubjects:\n  - kind: ServiceAccount\n    name: nfs-client-provisioner\n    namespace: kubeflow-storage\nroleRef:\n  kind: ClusterRole\n  name: nfs-client-provisioner-runner\n  apiGroup: rbac.authorization.k8s.io\n---\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: nfs-client-provisioner\n  namespace: kubeflow-storage\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: nfs-client-provisioner\n  template:\n    metadata:\n      labels:\n        app: nfs-client-provisioner\n    spec:\n      serviceAccountName: nfs-client-provisioner\n      containers:\n        - name: nfs-client-provisioner\n          image: registry.k8s.io\/sig-storage\/nfs-subdir-external-provisioner:v4.0.2\n          volumeMounts:\n            - name: nfs-client-root\n              mountPath: \/persistentvolumes\n          env:\n            - name: PROVISIONER_NAME\n              value: \"example.com\/nfs\"\n            - name: NFS_SERVER\n              value: \"147.232.207.69\"\n            - name: NFS_PATH\n              value: \"\/filer02_vol1\"\n      volumes:\n        - name: nfs-client-root\n          nfs:\n            server: 147.232.207.69\n            path: \/filer02_vol1\n---\napiVersion: storage.k8s.io\/v1\nkind: StorageClass\nmetadata:\n  name: nfs-kubeflow\n  annotations:\n    storageclass.kubernetes.io\/is-default-class: \"true\"\nprovisioner: example.com\/nfs\nparameters:\n  pathPattern: \"${.PVC.namespace}\/${.PVC.name}\"\n  archiveOnDelete: \"false\"\nreclaimPolicy: Delete\nvolumeBindingMode: Immediate\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -f nfs-client.yaml\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">kubectl get storageclass<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"892\" height=\"72\" src=\"https:\/\/blog.mhasin.eu\/wp-content\/uploads\/2025\/08\/obrazok-2.png\" alt=\"\" class=\"wp-image-2121\" srcset=\"https:\/\/blog.mhasin.eu\/wp-content\/uploads\/2025\/08\/obrazok-2.png 892w, https:\/\/blog.mhasin.eu\/wp-content\/uploads\/2025\/08\/obrazok-2-300x24.png 300w, https:\/\/blog.mhasin.eu\/wp-content\/uploads\/2025\/08\/obrazok-2-768x62.png 768w\" sizes=\"auto, (max-width: 892px) 100vw, 892px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat <<EOF | kubectl apply -f -\napiVersion: rbac.authorization.k8s.io\/v1\nkind: Role\nmetadata:\n  name: nfs-client-provisioner\n  namespace: kubeflow-storage\nrules:\n  - apiGroups: [\"\"]\n    resources: [\"endpoints\"]\n    verbs: [\"get\", \"watch\", \"list\", \"create\", \"update\", \"patch\"]\nEOF\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>cat <<EOF | kubectl apply -f -\napiVersion: rbac.authorization.k8s.io\/v1\nkind: RoleBinding\nmetadata:\n  name: nfs-client-provisioner\n  namespace: kubeflow-storage\nsubjects:\n  - kind: ServiceAccount\n    name: nfs-client-provisioner\n    namespace: kubeflow-storage\nroleRef:\n  kind: Role\n  name: nfs-client-provisioner\n  apiGroup: rbac.authorization.k8s.io\nEOF\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<div class=\"pdf24Plugin-cp\"> \t<form name=\"pdf24Form0\" method=\"post\" action=\"https:\/\/doc2pdf.pdf24.org\/wordpress.php\" target=\"pdf24PopWin\" onsubmit=\"var pdf24Win = window.open('about:blank', 'pdf24PopWin', 'resizable=yes,scrollbars=yes,width=600,height=250,left='+(screen.width\/2-300)+',top='+(screen.height\/3-125)+''); pdf24Win.focus(); if(typeof pdf24OnCreatePDF === 'function'){void(pdf24OnCreatePDF(this,pdf24Win));}\"> \t\t<input type=\"hidden\" name=\"blogCharset\" value=\"Cw1x07UAAA==\" \/><input type=\"hidden\" name=\"blogPosts\" value=\"MwQA\" \/><input type=\"hidden\" name=\"blogUrl\" value=\"yygpKSi20tdPyslP18vNSCzOzNNLLQUA\" \/><input type=\"hidden\" name=\"blogName\" value=\"c\/LxdwcA\" \/><input type=\"hidden\" name=\"blogValueEncoding\" value=\"gzdeflate base64\" \/><input type=\"hidden\" name=\"postId_0\" value=\"MzI0MgAA\" \/><input type=\"hidden\" name=\"postTitle_0\" value=\"yy5NSi3KSy1JLVbwcwtWKC7JL0pMTwUA\" \/><input type=\"hidden\" name=\"postLink_0\" value=\"yygpKSi20tdPyslP18vNSCzOzNNLLdW3L7A1MjQyAAA=\" \/><input type=\"hidden\" name=\"postAuthor_0\" value=\"y00syfcwNAIA\" \/><input type=\"hidden\" name=\"postDateTime_0\" value=\"MzIwMtU1sAAiBUMDKwMLIAIA\" \/><input type=\"hidden\" name=\"postContent_0\" value=\"xVZZb+M2EH7XryDUYtECkWRr0xxeJ0C6m20DNAecIm+LgJbGNhuKJEhKttPuf+9Qkh05PnMUFWCYooYz35z8vK4iCafGnPhjFfS5TB4CRTUdaqpG\/mk3UqcePl2lYUkukSmgiPs7NXkqCVU2GIIluUqpBW9hjwljKeckmBIxMHg2y6TwulF5Gs1o2M3QQ96HxHKSaEAbRNAMjKIJEPdhwOU4MFYiflile5OrggpZQeMMhA2nNOM7u08VuwNtmBQdUrS9BybSDrkFXbAEzpJE5sJ6GViKcaEdj5SwOw1rgdKyYO486Ppz6VVn2a0gCGr9n3luLOie5OA1Aeg+TUKa25HU7JFa3AsfjkzIZITQdkUR6Fw4MDrnYJxwgKlkv2mZK9MhH344bn\/y\/W+4T4gGI3OdwHxfOSQITdhC8hxdqQUL0P25EBaFv0d8joLuf0xtMnKLKrFulQIHXH17m3FMG8tehKAq33V26zzUIV2HopYqa+YF\/r\/QVyjQzZXan6JYe4MrVZtYWUG\/4gYTw7cUElZMsKakTd7\/C9u2LqSV7eFc2NIWmxtDoxc9GDgTy\/2xW7GTeeg3OF\/GrxkmqpSJ5l3\/BRSX0wzer+ONgsSp0KiZJRRz3MY3g92RoESnDEzmcvsH7QM31YZzRW0waCFTHAujPt5A6h6+oGmbLgRTQyzXC3m92pZSQhIpLGX43jAYbK+F6mEZhgizBUNsJD2dFahhw1n8IqcDCzBlOoAJFoSgvKmsU+yHrTBu6KwGx6WD34C0BpaW0i7IYDTdyRtqRx0SLc3ChiyIYrX6m9713cXtxfXVee\/+6uzy\/Jn+gvIcpXyYUEwihHiZOif9lbquvt7e35737s57a7S09w\/D+GMcxq3D8OB4vZKbsz9\/X6MiGjAOuhXfo4\/tmYba3405fRY8\/LIYEFdLmCGyiHFBRFVxbiJY6tDFmf3Uq7fV\/mc3pdd066wb3WwQQtpyEtQom0M+dIJa4IVVmmAmSGFAc26D8jMGyeocfK9ZeORZAj1HRxBG3QnOM6wiV7F4\/Me\/w5u7z+F8UHyPGjvfXdCpTkasgGvxpbw48cyAcoM2dXUJ3kgcH1M3odxnr8pPPfcvkcV0yEWWQcocd3s9McNRwackGDznUi\/lYzN9jjw2A11zsm7KiqXj5TDwT73ugA3zJ7yUs6FIEAhoYtgjBIOcc8TNsiHhkjr\/T3xOH6c+SQFBlu\/UTEXikzFL7ejEPzqOfTICNhzZE\/8Q10YnJ\/7IWrykowitD8NsRA0TIeQR4nEzDQ1GuXIGTBS34l+i1lEk+5o+yocgDpUY+oRyVOc3\/Cg9COJ23C5NGLBvtkIQ+3iPvEFL8LHVmsT7pTJcvlHZ4cHR5KBChsuxX6bEZSm3co\/8lNFJUAa944Cryc+k3WoVaLN880mEFVSlF\/McYRWcbi2lnWl8Qi35wO0n9zu\/\/kr+IUtVHezOkKoZU9KPd2ICryHjIFIl2RqaWJPQOfWdsdFN9BED84rx8F+FdsZb34tr\/R9EdQeGuiM1XZObrc3xLw==\" \/> \t\t<a href=\"https:\/\/www.pdf24.org\" target=\"_blank\" title=\"www.pdf24.org\" rel=\"nofollow\"><img src=\"https:\/\/blog.mhasin.eu\/wp-content\/plugins\/pdf24-post-to-pdf\/img\/pdf_32x32.png\" alt=\"\" border=\"0\" height=\"32\" \/><\/a> \t\t<span class=\"pdf24Plugin-cp-space\">\u00a0\u00a0<\/span> \t\t<span class=\"pdf24Plugin-cp-text\">Send article as PDF<\/span> \t\t<span class=\"pdf24Plugin-cp-space\">\u00a0\u00a0<\/span> \t\t<input class=\"pdf24Plugin-cp-input\" style=\"margin: 0px;\" type=\"text\" name=\"sendEmailTo\" placeholder=\"Enter email address\" \/> \t\t<input class=\"pdf24Plugin-cp-submit\" style=\"margin: 0px;\" type=\"submit\" value=\"Send\" \/> \t<\/form> <\/div>","protected":false},"excerpt":{"rendered":"nano nfs-client.yaml kubectl get storageclass \u00a0\u00a0 Send article as PDF \u00a0\u00a0\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"arc_restricted_post":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2120","post","type-post","status-publish","format-standard","hentry","category-nezaradene"],"_links":{"self":[{"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=\/wp\/v2\/posts\/2120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2120"}],"version-history":[{"count":2,"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=\/wp\/v2\/posts\/2120\/revisions"}],"predecessor-version":[{"id":2127,"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=\/wp\/v2\/posts\/2120\/revisions\/2127"}],"wp:attachment":[{"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mhasin.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}