{"id":3606,"date":"2022-03-17T20:58:21","date_gmt":"2022-03-17T12:58:21","guid":{"rendered":"\/?p=3606"},"modified":"2022-03-21T20:58:33","modified_gmt":"2022-03-21T12:58:33","slug":"23-k8s%e7%9a%84%e9%85%8d%e7%bd%ae%e5%92%8c%e5%ad%98%e5%82%a8%e4%b8%8b","status":"publish","type":"post","link":"http:\/\/xinblog.ltd\/?p=3606","title":{"rendered":"23.K8S\u7684\u914d\u7f6e\u548c\u5b58\u50a8(\u4e0b)"},"content":{"rendered":"<p>K8S\u4e0a\u7bc7\u6211\u4eec\u8bf4\u4e86\u7b80\u5355\u7684\u914d\u7f6e\u4ee5\u53ca\u4e34\u65f6\u5b58\u50a8<\/p>\n<p>\u4f46\u662f\u5728\u5b9e\u9645\u751f\u4ea7\u4e2d,\u5982\u679c\u6709\u4f7f\u7528\u78c1\u76d8\u7684\u9700\u6c42,\u90a3\u4e48\u4e0d\u592a\u53ef\u80fd\u4f7f\u7528hostPath\u6216\u8005emptyDir,\u6bd5\u7adf\u4e0d\u662f\u5b8c\u5168\u7684\u6301\u4e45\u5316,\u5728Pod\u6b7b\u4ea1\u540e\u4e5f\u4e00\u540c\u6b7b\u4ea1\u4e86<\/p>\n<p>\u8fd9\u4e2a\u65f6\u5019,Volume\u7684\u6301\u4e45\u5316\u5c31\u76f8\u5f53\u91cd\u8981\u4e86<\/p>\n<p>\u8fd9\u79cd\u65f6\u5019,\u5bf9\u4e8e\u6301\u4e45\u5316\u7684\u5377,\u5c31\u53ef\u4ee5\u8003\u8651\u4f7f\u7528NFS GlusterFs \u4e91\u5382\u5546\u63d0\u4f9b\u7684\u5757\u5b58\u50a8<\/p>\n<p>\u90a3\u4e48\u6211\u4eec\u5148\u62ff\u5982\u4f55\u6302\u8f7dNFS\u6765\u770b<\/p>\n<p>\u5bf9\u4e8eNFS\u5728\u5bbf\u4e3b\u673a\u7684\u5b89\u88c5,\u6211\u4eec\u7a0d\u5fae\u4e00\u8bf4<\/p>\n<table>\n<tr>\n<td>\n  # \u5728\u4efb\u610f\u673a\u5668<\/p>\n<p>yum install -y nfs-utils<\/p>\n<p># \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u542f\u52a8 nfs \u670d\u52a1;\u521b\u5efa\u5171\u4eab\u76ee\u5f55<\/p>\n<p>mkdir -p \/nfs\/data<\/p>\n<p>#\u6267\u884c\u547d\u4ee4 vi   \/etc\/exports\uff0c\u521b\u5efa exports \u6587\u4ef6\uff0c\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<p>echo &#8220;\/nfs\/data\/   *(insecure,rw,sync,no_root_squash)&#8221; &gt; \/etc\/exports<\/p>\n<p>#\/nfs\/data   \u00a0172.26.248.0\/20(rw,no_root_squash)<\/p>\n<p>systemctl enable rpcbind<\/p>\n<p>systemctl enable nfs-server<\/p>\n<p>systemctl start rpcbind<\/p>\n<p>systemctl start nfs-server<\/p>\n<p>exportfs -r<\/p>\n<p>#\u68c0\u67e5\u914d\u7f6e\u662f\u5426\u751f\u6548<\/p>\n<p>exportfs<\/p>\n<p># \u8f93\u51fa\u7ed3\u679c\u5982\u4e0b\u6240\u793a<\/p>\n<p>\/nfs\/data \/nfs\/data<\/td>\n<\/tr>\n<\/table>\n<p>\u4e4b\u540e\u5c31\u521b\u5efa\u4e86\u4e00\u4e2aNFS\u7684Server<\/p>\n<p>\u5982\u679c\u662f\u60f3\u4f7f\u7528\u8fd9\u4e2aNFS,\u53ef\u4ee5\u8003\u8651\u914d\u7f6e\u4e00\u4e2aNFS\u7684Client<\/p>\n<table>\n<tr>\n<td>\n  #\u670d\u52a1\u5668\u7aef\u9632\u706b\u5899\u5f00\u653e111\u3001662\u3001875\u3001892\u30012049\u7684 tcp \/ udp \u5141\u8bb8\uff0c\u5426\u5219\u8fdc\u7aef\u5ba2\u6237\u65e0\u6cd5\u8fde\u63a5\u3002<\/p>\n<p>#\u5b89\u88c5\u5ba2\u6237\u7aef\u5de5\u5177<\/p>\n<p>yum install -y nfs-utils<\/p>\n<p>#\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u68c0\u67e5 nfs \u670d\u52a1\u5668\u7aef\u662f\u5426\u6709\u8bbe\u7f6e\u5171\u4eab\u76ee\u5f55<\/p>\n<p># showmount -e $(nfs\u670d\u52a1\u5668\u7684IP)<\/p>\n<p>showmount -e 172.26.165.243<\/p>\n<p># \u8f93\u51fa\u7ed3\u679c\u5982\u4e0b\u6240\u793a<\/p>\n<p>Export list for 172.26.165.243<\/p>\n<p>\/nfs\/data *<\/p>\n<p>#\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6302\u8f7d nfs \u670d\u52a1\u5668\u4e0a\u7684\u5171\u4eab\u76ee\u5f55\u5230\u672c\u673a\u8def\u5f84 \/root\/nfsmount<\/p>\n<p>mkdir \/root\/nfsmount<\/p>\n<p># mount -t nfs $(nfs\u670d\u52a1\u5668\u7684IP):\/root\/nfs_root \/root\/nfsmount<\/p>\n<p>#\u9ad8\u53ef\u7528\u5907\u4efd\u7684\u65b9\u5f0f<\/p>\n<p>mount -t nfs 172.26.165.243:\/nfs\/data   \/root\/nfsmount<\/p>\n<p># \u5199\u5165\u4e00\u4e2a\u6d4b\u8bd5\u6587\u4ef6<\/p>\n<p>echo &#8220;hello nfs server&#8221; &gt;   \/root\/nfsmount\/test.txt<\/p>\n<p>#\u5728 nfs \u670d\u52a1\u5668\u4e0a\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u9a8c\u8bc1\u6587\u4ef6\u5199\u5165\u6210\u529f<\/p>\n<p>cat \/root\/nfsmount\/test.txt<\/td>\n<\/tr>\n<\/table>\n<p>\u7136\u540e\u662f\u5728K8S\u4e0a\u5173\u4e8eNFS\u7684\u6302\u8f7d\u4f7f\u7528<\/p>\n<p>\u4e00\u4e2aPod\u7684yaml\u5982\u4e0b<\/p>\n<p>#\u6d4b\u8bd5Pod\u76f4\u63a5\u6302\u8f7dNFS\u4e86<\/p>\n<p>apiVersion: v1<\/p>\n<p>kind: Pod<\/p>\n<p>metadata:<\/p>\n<p>name: vol-nfs<\/p>\n<p>namespace: default<\/p>\n<p>spec:<\/p>\n<p>containers:<\/p>\n<p>&#8211; name: myapp<\/p>\n<p>image: nginx<\/p>\n<p>volumeMounts:<\/p>\n<p>&#8211; name: html<\/p>\n<p>mountPath: \/usr\/share\/nginx\/html\/<\/p>\n<p>volumes:<\/p>\n<p>&#8211; name: html<\/p>\n<p>nfs:<\/p>\n<p>path: \/nfs\/data \u00a0 #1000G<\/p>\n<p>server: \u81ea\u5df1\u7684nfs\u670d\u52a1\u5668\u5730\u5740<\/p>\n<p>\u9700\u8981\u6ce8\u610f,\u9700\u8981\u5728\u96c6\u7fa4\u4e0a\u6bcf\u4e00\u53f0\u670d\u52a1\u5668\u90fd\u5b89\u88c5nfs-client,\u4ece\u800c\u53ef\u4ee5mount\u5bf9\u5e94\u7684\u8fdc\u7aefnfs\u5b58\u50a8\u5230\u672c\u5730<\/p>\n<p>\u5176\u6b21\u662f\u6211\u4eec\u5728\u5176\u4e2d\u7684volumes\u58f0\u660e\u4e86\u6302\u8f7d\u7684nfs\u8def\u5f84,\u8fd9\u4e2a\u8def\u5f84\u8981\u6c42\u5fc5\u987b\u8981\u5728nfs\u6587\u4ef6\u5939\u4e0b\u521b\u5efa\u597d\u4e86<\/p>\n<p>\u6bd4\u5982<\/p>\n<p>Nfs:<\/p>\n<p>Path: .\/nfs\/data\/nginx<\/p>\n<p>\u8fd9\u4e2anginx\u6587\u4ef6\u5939\u5c31\u9700\u8981\u521b\u5efa\u597d<\/p>\n<p>\u4ece\u4e0a\u9762\u7684nfs-client\u548cnfs path\u4e2d,\u5c31\u66b4\u9732\u4e86\u76f4\u63a5\u6302\u8f7d\u7684\u7f3a\u70b9,\u9700\u8981\u7684\u51c6\u5907\u5de5\u4f5c\u4e0d\u5c11<\/p>\n<p>\u90a3\u4e48\u4e3a\u4e86\u6d88\u9664\u8fd9\u4e2a\u5f31\u70b9,K8S\u63d0\u4f9b\u4e86PV PVC StorageClass<\/p>\n<p>PV\u662fPersistentVolume \u6301\u4e45\u5377<\/p>\n<p>\u96c6\u7fa4\u4e2d\u7684\u4e00\u5757\u5b58\u50a8,\u8bb0\u5f55\u4e86\u5b58\u50a8\u80cc\u540e\u7684\u5b9e\u73b0\u7ec6\u8282<\/p>\n<p>PVC PersistentVolumeClain PVC<\/p>\n<p>\u662fPod\u7b49\u5bf9\u8c61\u5bf9\u5b58\u50a8\u7684\u8bf7\u6c42<\/p>\n<p>\u89c4\u5b9a\u4e86\u8bf7\u6c42\u7684\u5927\u5c0f\u548c\u8bf7\u6c42\u7684\u6a21\u5f0f,\u8bf8\u5982ReadWriteOnce ReadOnlyMany<\/p>\n<p>StorageClass \u5b58\u50a8\u7d2f<\/p>\n<p>\u5c06\u4e0d\u540c\u7684PVC\u62bd\u8c61\u6210\u4e00\u4e2a\u5bf9\u8c61,\u66f4\u52a0\u62bd\u8c61PVC\u548cPV<\/p>\n<p>\u6211\u4eec\u5c06\u4e0a\u9762\u7684\u624b\u52a8\u6302\u8f7d\u6d41\u7a0b,\u5957\u7528\u5230PV \u2013 PVC -StorageClass\u8fd9\u4e2a\u6a21\u677f<\/p>\n<p>\u9996\u5148\u6211\u4eec\u521b\u5efa\u4e00\u4e2aPV,\u5e76\u4e14\u58f0\u660eStorageClass<\/p>\n<table>\n<tr>\n<td>\n  apiVersion: v1<\/p>\n<p>kind: PersistentVolume<\/p>\n<p>metadata:<\/p>\n<p>name: pv-volume-10m<\/p>\n<p>labels:<\/p>\n<p>type: local<\/p>\n<p>spec:<\/p>\n<p>storageClassName: my-nfs-storage<\/p>\n<p>capacity:<\/p>\n<p>storage: 100m<\/p>\n<p>accessModes:<\/p>\n<p>&#8211; ReadWriteOnce<\/p>\n<p>nfs:\u00a0 ## \u4f7f\u7528nfs\u5b58\u50a8\u7cfb\u7edf<\/p>\n<p>server: 10.170.11.8\u00a0 ## \u6ca1type<\/p>\n<p>path: \/nfs\/data\/haha\u00a0 ### abc\u6587\u4ef6\u5939\u63d0\u524d\u521b\u5efa<\/td>\n<\/tr>\n<\/table>\n<p>\u8fd9\u6837\u5c31\u4f1a\u521b\u5efa\u4e00\u4e2a\u5bb9\u91cf\u4e3a100mb,\u6a21\u5f0f\u4e3a\u53ef\u8bfb\u5199,\u4f7f\u7528nfs,storageClass\u4e3amy-nfs-storage\u7684PV<\/p>\n<p>\u5176\u6b21\u662f\u58f0\u660e\u4e00\u4e2aPVC\u7ed1\u5b9a\u8fd9\u4e2apv<\/p>\n<p>\u5e76\u4e14\u5bfb\u4e00\u4e2aPod\u53bb\u4f7f\u7528\u8fd9\u4e2aPVC<\/p>\n<p>&#8212;<\/p>\n<p>apiVersion: v1<\/p>\n<p>kind: PersistentVolumeClaim<\/p>\n<p>metadata:<\/p>\n<p>name: nginx-pvc<\/p>\n<p>namespace: default<\/p>\n<p>labels:<\/p>\n<p>app: nginx-pvc<\/p>\n<p>spec:<\/p>\n<p>storageClassName: my-nfs-storage\u00a0 ## \u5b58\u50a8\u7c7b\u7684\u540d\u5b57<\/p>\n<p>accessModes:<\/p>\n<p>&#8211; ReadWriteOnce<\/p>\n<p>resources:<\/p>\n<p>requests:<\/p>\n<p>storage: 50m<\/p>\n<p>\u58f0\u660e\u4e86\u4e00\u4e2aPVC\u7684\u8bf7\u6c42,\u8981\u6c42\u7684storageClassName\u5fc5\u987b\u8981\u548cPV\u4e00\u81f4<\/p>\n<p>\u8fd9\u6837K8S\u5c31\u4f1a\u5728storageClass\u4e2d\u6311\u9009\u6700\u4e3a\u5408\u9002\u7684\u8fdb\u884c\u7ed1\u5b9a<\/p>\n<p>\u4e4b\u540e\u7684Pod\u4e66\u5199\u4e2d\u52a0\u4e0a\u4e00\u4e2avolumes\u4e3aPVC\u7c7b\u578b\u7684\u548c\u4e0b\u9762\u7684PVC\u540d\u79f0\u4e00\u81f4\u5373\u53ef\u4f7f\u7528\u4e86<\/p>\n<table>\n<tr>\n<td>\n  apiVersion: v1<\/p>\n<p>kind: Pod<\/p>\n<p>metadata:<\/p>\n<p>name: &#8220;nginx-pvc&#8221;<\/p>\n<p>namespace: default<\/p>\n<p>labels:<\/p>\n<p>app: &#8220;nginx-pvc&#8221;<\/p>\n<p>spec:<\/p>\n<p>containers:<\/p>\n<p>&#8211;   name: nginx-pvc<\/p>\n<p>image: &#8220;nginx&#8221;<\/p>\n<p>ports:<\/p>\n<p>&#8211; containerPort:\u00a0 80<\/p>\n<p>name:\u00a0 http<\/p>\n<p>volumeMounts:<\/p>\n<p>&#8211; name: localtime<\/p>\n<p>mountPath: \/etc\/localtime<\/p>\n<p>&#8211; name: html<\/p>\n<p>mountPath: \/usr\/share\/nginx\/html<\/p>\n<p>volumes:<\/p>\n<p>&#8211; name: localtime<\/p>\n<p>hostPath:<\/p>\n<p>path: \/usr\/share\/zoneinfo\/Asia\/Shanghai<\/p>\n<p>&#8211; name: html<\/p>\n<p>persistentVolumeClaim:<\/p>\n<p>claimName:\u00a0 nginx-pvc\u00a0 ### \u4f60\u7684\u7533\u8bf7\u4e66\u7684\u540d\u5b57<\/p>\n<p>restartPolicy: Always<\/td>\n<\/tr>\n<\/table>\n<p>\u5b98\u65b9\u6587\u6863\u8fde\u63a5\u4e3a:<\/p>\n<p><a href=\"https:\/\/kubernetes.io\/zh\/docs\/tasks\/configure-pod-container\/configure-persistent-volume-storage\/\">https:\/\/kubernetes.io\/zh\/docs\/tasks\/configure-pod-container\/configure-persistent-volume-storage\/<\/a><\/p>\n<p>\u5176\u6b21\u662f\u5173\u4e8ePV\u548cPVC\u4e2d\u4e00\u4e9b\u539f\u751f\u7684\u914d\u7f6e\u9879<\/p>\n<p>\u5206\u522b\u5173\u4e8e\u4e86\u56de\u6536\u7684\u7b56\u7565\u548c\u8bbf\u95ee\u6a21\u5f0f<\/p>\n<p>\u5728\u4e4b\u524d,\u6211\u4eec\u53ef\u4ee5\u5728get pv\u7684\u65f6\u5019\u770b\u5230pv\u7684\u72b6\u6001\u680f\u4e2d\u6709\u4e00\u4e2aRECLAIM POLICY<\/p>\n<p>\u9ed8\u8ba4\u662fRetain<\/p>\n<p>\u8fd9\u4e2a\u8bbe\u7f6e\u8868\u793a\u7684\u624b\u52a8\u56de\u6536<\/p>\n<p>\u5176\u6b21\u7684\u72b6\u6001\u8fd8\u6709\u4e00\u4e2aStatus,\u5728\u6ca1\u6709\u548cPVC\u8fdb\u884c\u7ed1\u5b9a\u4e4b\u524d,\u72b6\u6001\u662fAvailable<\/p>\n<p>\u7ed1\u5b9a\u4e4b\u540e\u5c31\u662fBound<\/p>\n<p>\u5728\u5220\u9664PVC\u4e4b\u540e,\u5982\u679c\u56de\u6536\u7684\u7b56\u7565\u662fRetain,\u5219\u4e0d\u4f1a\u5220\u9664\u8fd9\u4e2aPV,\u800c\u662f\u5c06PV\u7684Status\u6807\u8bb0\u4e3aRelease<\/p>\n<p>\u5e76\u4e14\u5c06PV\u4e2d\u7684\u6570\u636e\u4fdd\u5b58<\/p>\n<p>\u5176\u6b21,\u5982\u679c\u6807\u8bb0\u4e3aRecycle,\u90a3\u4e48\u5c31\u662f\u5220\u9664PV\u5185\u90e8\u7684\u6570\u636e,\u518d\u6b21\u53d8\u4e3a\u53ef\u7528<\/p>\n<p>\u8fd8\u6709\u4e00\u4e2a\u662fDelete,\u5c31\u662f\u5728\u5220\u9664PVC\u7684\u65f6\u5019,PV\u4e00\u540c\u5220\u9664<\/p>\n<p>\u5bf9\u4e8e\u4e0d\u540c\u7684PV\u5b9e\u73b0,\u652f\u6301\u7684\u4e5f\u4e0d\u540c<\/p>\n<p>\u76ee\u524d\uff0c\u4ec5 NFS \u548c HostPath \u652f\u6301\u56de\u6536\uff08Recycle\uff09\u3002 AWS EBS\u3001GCE PD\u3001Azure Disk \u548c Cinder \u5377\u90fd\u652f\u6301\u5220\u9664\uff08Delete\uff09\u3002<\/p>\n<p>\u5178\u578b\u6d4b\u8bd5\u7684Yaml\u5982\u4e0b:<\/p>\n<table>\n<tr>\n<td>\n  apiVersion: v1<\/p>\n<p>kind: PersistentVolumeClaim<\/p>\n<p>metadata:<\/p>\n<p>name: pv-12-recycle<\/p>\n<p>namespace: default<\/p>\n<p>labels:<\/p>\n<p>app: pv-12-recycle<\/p>\n<p>spec:<\/p>\n<p>storageClassName: my-nfs-storage\u00a0   ### pv\u5206\u7ec4<\/p>\n<p>accessModes:<\/p>\n<p>&#8211;   ReadWriteOnce<\/p>\n<p>resources:<\/p>\n<p>requests:<\/p>\n<p>storage: 12m<\/td>\n<\/tr>\n<tr>\n<td>\n  apiVersion: v1<\/p>\n<p>kind: PersistentVolume<\/p>\n<p>metadata:<\/p>\n<p>name: pv-volume-12m-recycle<\/p>\n<p>labels:<\/p>\n<p>type: local<\/p>\n<p>spec:<\/p>\n<p>persistentVolumeReclaimPolicy: Recycle\u00a0   ## \u56de\u6536<\/p>\n<p>storageClassName:   my-nfs-storage<\/p>\n<p>capacity:<\/p>\n<p>storage: 12m<\/p>\n<p>accessModes:<\/p>\n<p>&#8211; ReadWriteOnce<\/p>\n<p>nfs:\u00a0 ## \u4f7f\u7528nfs\u5b58\u50a8\u7cfb\u7edf<\/p>\n<p>server: 10.170.11.8\u00a0 ## \u6ca1type<\/p>\n<p>path: \/nfs\/data\/recycle\u00a0 ### abc\u6587\u4ef6\u5939\u63d0\u524d\u521b\u5efa<\/td>\n<\/tr>\n<\/table>\n<p>\u6211\u4eec\u5c06\u56de\u6536\u7684\u7b56\u7565persistentVolumeReclaimPolicy\u6807\u8bb0\u4e3a\u4e86Recycle<\/p>\n<p>\u5982\u679c\u5c06\u7ed1\u5b9a\u7684PVC\u5220\u9664\u540e,\u8fd9\u4e2aPV\u4f1a\u4eceBound\u72b6\u6001\u53d8\u4e3aAvailable<\/p>\n<p>\u800c\u5982\u679c\u6807\u8bb0Retain,\u90a3\u4e48\u5219\u662f\u663e\u793a\u4e3aRelease,\u8868\u793a\u4e4b\u524d\u548c\u54ea\u4e2aPVC\u7ed1\u5b9a,\u65b9\u4fbf\u7ba1\u7406\u5458\u53bb\u624b\u52a8\u7684\u8fdb\u884c\u91ca\u653e,\u5982\u679c\u60f3\u8981\u590d\u7528,\u53ef\u4ee5\u8003\u8651\u521b\u5efa\u65b0\u7684PV\u5377<\/p>\n<p>Status\u7684\u72b6\u6001\u6709<\/p>\n<p>Released pv\u91ca\u653e,\u91ca\u653e\u4e86\u548cPVC\u7684\u5173\u8054,\u4f46\u5176\u4ed6\u7684PVC\u5e76\u4e0d\u80fd\u91cd\u65b0\u7ed1\u5b9a\u4e0a\u6765<\/p>\n<p>Available pv\u53ef\u7528,\u53ef\u4ee5\u548c\u4efb\u610f\u7684pvc\u8fdb\u884c\u7ed1\u5b9a<\/p>\n<p>Bound \u5df2\u7ecf\u7ed1\u5b9a<\/p>\n<p>Failed \u5377\u7684\u81ea\u52a8\u56de\u6536\u64cd\u4f5c\u5931\u8d25\u4e86<\/p>\n<p>\u7136\u540e\u662f\u8bbf\u95ee\u6a21\u5f0f<\/p>\n<p><a href=\"https:\/\/kubernetes.io\/zh\/docs\/concepts\/storage\/persistent-volumes\/#access-modes\">https:\/\/kubernetes.io\/zh\/docs\/concepts\/storage\/persistent-volumes\/#access-modes<\/a><\/p>\n<p>\u5206\u4e3a\u4e86<\/p>\n<p>ReadWriteOnce \u4f9b\u4e00\u4e2a\u8282\u70b9\u8fdb\u884c\u8bfb\u5199\u6302\u8f7d<\/p>\n<p>ReadOnlyMany \u4f9b\u591a\u4e2a\u8282\u70b9\u53ea\u8bfb\u6302\u8f7d<\/p>\n<p>ReadWriteMany \u4f9b\u591a\u4e2a\u8282\u70b9\u8fdb\u884c\u8bfb\u5199\u74dc\u5b50\u554a<\/p>\n<p>ReadWriteOncePod \u4f9b\u4e00\u4e2aPod\u4ee5\u8bfb\u5199\u8fdb\u884c\u6302\u8f7d<\/p>\n<p>\u8fd8\u6709\u8fd9\u4e00\u4e9b\u7f29\u5199\u5f62\u5f0f<\/p>\n<p>RWO &#8211; ReadWriteOnce<\/p>\n<p>ROX &#8211; ReadOnlyMany<\/p>\n<p>RWX &#8211; ReadWriteMany<\/p>\n<p>RWOP &#8211; ReadWriteOncePod<\/p>\n<p>\u5b98\u65b9\u6587\u6863\u4e0a\u8fd8\u6709\u8fd9\u4e0d\u540c\u7684type\u7684Volume\u5bf9\u4e8e\u8bfb\u5199\u6a21\u5f0f\u7684\u652f\u6301<\/p>\n<p>\u6700\u540e\u662f\u5173\u4e8ePV\u4e2d\u7684\u52a8\u6001\u4f9b\u5e94<\/p>\n<p>\u56e0\u4e3a\u4ece\u4e0a\u9762\u7684PV\u548cPVC\u7684\u4e66\u5199\u65b9\u5f0f\u6765\u770b<\/p>\n<p>\u9700\u8981\u8fd0\u7ef4\u4eba\u5458\u63d0\u524d\u521b\u5efa\u597d\u4e0d\u540c\u7684PV,\u7531K8S\u8fdb\u884c\u8d1f\u8d23\u7ed1\u5b9a<\/p>\n<p>\u8fd9\u6837\u7684\u5904\u7406\u76f8\u5f53\u7e41\u6742,\u4e0d\u53ef\u80fd\u6709\u4e00\u4e07\u4e2aPVC\u5c31\u8981\u624b\u52a8\u521b\u5efa\u4e00\u4e07\u4e2aPV<\/p>\n<p>\u4e8e\u662fK8S\u63d0\u4f9b\u4e86\u52a8\u6001\u4f9b\u5e94<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"602\" height=\"328\" src=\"\/wp-content\/uploads\/2022\/03\/unnamed-file-11.png\" class=\"wp-image-3607\" alt=\"\u56fe\u7247\" srcset=\"http:\/\/xinblog.ltd\/wp-content\/uploads\/2022\/03\/unnamed-file-11.png 602w, http:\/\/xinblog.ltd\/wp-content\/uploads\/2022\/03\/unnamed-file-11-300x163.png 300w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/p>\n<p>\u4e0a\u9762\u7684\u4e2d\u6211\u4eec\u5047\u8bbe\u6709HDD SDD\u7b49\u5b58\u50a8\u9635\u5217<\/p>\n<p>\u800c\u4e00\u4e2aPVC\u88ab\u521b\u5efa\u51fa\u6765\u4e86,\u6839\u636e\u586b\u5145\u7684storageClass\u5b57\u6bb5<\/p>\n<p>\u6765\u9009\u62e9\u5bf9\u5e94\u7684storageClass\u8fdb\u884c\u5339\u914d,\u800c\u9009\u62e9\u7684StorageClass\u5219\u662f\u6839\u636e\u5185\u90e8\u914d\u7f6e\u7684\u4f9b\u5e94\u5546\u53bb\u52a8\u6001\u7684\u521b\u5efaPV<\/p>\n<p>\u8be6\u7ec6\u7684\u67b6\u6784\u56fe\u5982\u4e0b<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"602\" height=\"383\" src=\"\/wp-content\/uploads\/2022\/03\/unnamed-file-12.png\" class=\"wp-image-3608\" alt=\"\u56fe\u7247\" srcset=\"http:\/\/xinblog.ltd\/wp-content\/uploads\/2022\/03\/unnamed-file-12.png 602w, http:\/\/xinblog.ltd\/wp-content\/uploads\/2022\/03\/unnamed-file-12-300x191.png 300w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/p>\n<p>\u5f00\u53d1\u4eba\u5458\u521b\u5efaPVC,\u9009\u62e9\u5bf9\u5e94StorageClass,StorageClass\u7531\u96c6\u7fa4\u7ba1\u7406\u5458\u521b\u5efa<\/p>\n<p>\u5185\u90e8\u6709\u4e0d\u540c\u7684\u4f9b\u5e94\u5546,\u6765\u6839\u636ePVC\u6765\u521b\u5efaPV,\u5e76\u8fdb\u884c\u7ed1\u5b9a<\/p>\n<p>\u90a3\u4e48\u8fd9\u4e2aStorageClass\u7684\u63d0\u4f9b\u8005\u662f\u5176\u4e2d\u7684\u4e00\u4e2a\u5b57\u6bb5<\/p>\n<p>StorageClass\u7684provisioner<\/p>\n<p>\u6211\u4eec\u770bNFS\u63d0\u4f9b\u7684Provisioner\u5982\u4f55\u4e66\u5199<\/p>\n<p><a href=\"https:\/\/github.com\/kubernetes-sigs\/nfs-subdir-external-provisioner\">https:\/\/github.com\/kubernetes-sigs\/nfs-subdir-external-provisioner<\/a><\/p>\n<p>\u8fd9\u91cc\u9762\u8868\u793a\u6211\u4eec\u9700\u8981\u90e8\u7f72\u4e00\u4e2aDeployment\u53bb\u7ba1\u7406\u63d0\u4f9b\u5546Pod<\/p>\n<p>\u7136\u540e\u662f\u5bf9\u5e94\u7684RBAC\u6743\u9650\u5206\u914d<\/p>\n<table>\n<tr>\n<td>\n  apiVersion: apps\/v1<\/p>\n<p>kind: Deployment<\/p>\n<p>metadata:<\/p>\n<p>name: nfs-client-provisioner<\/p>\n<p>labels:<\/p>\n<p>app: nfs-client-provisioner<\/p>\n<p>#   replace with namespace where provisioner is deployed<\/p>\n<p>namespace: default<\/p>\n<p>spec:<\/p>\n<p>replicas: 1<\/p>\n<p>strategy:<\/p>\n<p>type: Recreate<\/p>\n<p>selector:<\/p>\n<p>matchLabels:<\/p>\n<p>app: nfs-client-provisioner<\/p>\n<p>template:<\/p>\n<p>metadata:<\/p>\n<p>labels:<\/p>\n<p>app: nfs-client-provisioner<\/p>\n<p>spec:<\/p>\n<p>serviceAccountName: nfs-client-provisioner<\/p>\n<p>containers:<\/p>\n<p>&#8211; name: nfs-client-provisioner<\/p>\n<p>image: gcr\/nfs-subdir-external-provisioner:v4.0.2<\/p>\n<p># resources:<\/p>\n<p>#\u00a0\u00a0\u00a0 limits:<\/p>\n<p>#\u00a0\u00a0\u00a0\u00a0\u00a0 cpu: 10m<\/p>\n<p>#\u00a0\u00a0\u00a0 requests:<\/p>\n<p>#\u00a0\u00a0\u00a0\u00a0\u00a0 cpu: 10m<\/p>\n<p>volumeMounts:<\/p>\n<p>&#8211; name: nfs-client-root<\/p>\n<p>mountPath: \/persistentvolumes<\/p>\n<p>env:<\/p>\n<p>&#8211; name: PROVISIONER_NAME<\/p>\n<p>value:   k8s-sigs.io\/nfs-subdir-external-provisioner<\/p>\n<p>&#8211; name: NFS_SERVER<\/p>\n<p>value: 10.170.11.8 ## \u6307\u5b9a\u81ea\u5df1nfs\u670d\u52a1\u5668\u5730\u5740<\/p>\n<p>&#8211; name: NFS_PATH<\/p>\n<p>value: \/nfs\/data\u00a0 ## nfs\u670d\u52a1\u5668\u5171\u4eab\u7684\u76ee\u5f55<\/p>\n<p>volumes:<\/p>\n<p>&#8211; name: nfs-client-root<\/p>\n<p>nfs:<\/p>\n<p>server: 10.170.11.8<\/p>\n<p>path: \/nfs\/data<\/p>\n<p>&#8212;<\/td>\n<\/tr>\n<\/table>\n<p>RBAC\u5c31\u6682\u65f6\u4e0d\u8d34\u4e0a\u6765\u4e86<\/p>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f,\u4e0a\u9762\u7684image\u662f\u5f88\u53ef\u80fd\u62c9\u4e0d\u4e0b\u6765\u7684,\u9700\u8981\u6ce8\u610f\u6362\u6210\u79c1\u6709\u6e90\u6216\u8005\u56fd\u5185\u7684\u6e90<\/p>\n<p>\u4e0b\u9762\u7684ENV\u4e2d\u6211\u4eec\u914d\u7f6e\u4e86\u76f8\u5173\u7684NFS-Server\u914d\u7f6e<\/p>\n<p>Volumes\u4e2d\u4e5f\u914d\u7f6e\u4e86nfs\u7684\u914d\u7f6e<\/p>\n<p>\u7136\u540e\u9700\u8981\u914d\u7f6e\u4e00\u4e2aStorageClass<\/p>\n<table>\n<tr>\n<td>\n  apiVersion: storage.k8s.io\/v1<\/p>\n<p>kind: StorageClass<\/p>\n<p>metadata:<\/p>\n<p>name: managed-nfs-storage<\/p>\n<p>annotations:<\/p>\n<p>storageclass.kubernetes.io\/is-default-class: &#8220;true&#8221;<\/p>\n<p>provisioner:   k8s-sigs.io\/nfs-subdir-external-provisioner<\/p>\n<p>#provisioner\u6307\u5b9a\u4e00\u4e2a\u4f9b\u5e94\u5546\u7684\u540d\u5b57\u3002<\/p>\n<p>#\u5fc5\u987b\u5339\u914d k8s-deployment   \u7684 env PROVISIONER_NAME\u7684\u503c<\/p>\n<p>parameters:<\/p>\n<p>archiveOnDelete: &#8220;true&#8221;\u00a0   ## \u5220\u9664pv\u7684\u65f6\u5019\uff0cpv\u7684\u5185\u5bb9\u662f\u5426\u8981\u5907\u4efd<\/p>\n<p>#### \u8fd9\u91cc\u53ef\u4ee5\u8c03\u6574\u4f9b\u5e94\u5546\u80fd\u529b\u3002<\/td>\n<\/tr>\n<\/table>\n<p>\u9700\u8981\u6ce8\u610f,\u4e0a\u9762\u7684provisioner\u4e2d\u7684\u503c\u662f\u8981\u548cprovisioner\u4e2d\u7684\u5bf9\u5e94ENV\u4e00\u81f4\u7684<\/p>\n<p>\u5176\u6b21\u662fannotaions\u4e2d\u6211\u4eec\u52a0\u4e0a\u4e86\u6ce8\u89e3storageclass.kubernetes.io\/is-default-class: &#8220;true&#8221;<\/p>\n<p>\u8868\u793a\u8fd9\u4e2aStorageClass\u662f\u9ed8\u8ba4\u7684Class<\/p>\n<p>\u4e4b\u540e\u5c31\u53ef\u4ee5\u7533\u8bf7PVC\u8fdb\u884c\u4f7f\u7528\u4e86<\/p>\n<p>\u63d0\u4f9b\u5546\u4f1a\u81ea\u52a8\u521b\u5efa\u4e00\u4e2aPV\u7ed9PVC\u4f7f\u7528<\/p>\n<p>\u9ed8\u8ba4\u7684\u56de\u6536\u7b56\u7565\u662fdelete<\/p>\n<p>\u5982\u679c\u9700\u8981\u914d\u7f6e\u5176\u4ed6\u7684\u56de\u6536\u7b56\u7565,\u6bd4\u5982\u5f53\u5176\u4e2d\u6709\u6587\u4ef6\u7684\u65f6\u5019\u8fdb\u884c\u5907\u4efd,\u5219\u53ef\u4ee5\u8fdb\u884c\u8bbe\u7f6e\u65e5\u5176\u4ed6<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"602\" height=\"285\" src=\"\/wp-content\/uploads\/2022\/03\/unnamed-file-13.png\" class=\"wp-image-3609\" alt=\"\u56fe\u7247\" srcset=\"http:\/\/xinblog.ltd\/wp-content\/uploads\/2022\/03\/unnamed-file-13.png 602w, http:\/\/xinblog.ltd\/wp-content\/uploads\/2022\/03\/unnamed-file-13-300x142.png 300w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/p>\n<table>\n<tr>\n<td>\n  apiVersion: storage.k8s.io\/v1<\/p>\n<p>kind: StorageClass<\/p>\n<p>metadata:<\/p>\n<p>name: nfs-client<\/p>\n<p>provisioner: k8s-sigs.io\/nfs-subdir-external-provisioner   # or choose another name, must match deployment&#8217;s env PROVISIONER_NAME&#8217;<\/p>\n<p>parameters:<\/p>\n<p>pathPattern:   &#8220;${.PVC.namespace}\/${.PVC.annotations.nfs.io\/storage-path}&#8221; # waits   for nfs.io\/storage-path annotation, if not specified will accept as empty   string.<\/p>\n<p>onDelete: delete<\/td>\n<\/tr>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>K8S\u4e0a\u7bc7\u6211\u4eec\u8bf4\u4e86\u7b80\u5355\u7684\u914d\u7f6e\u4ee5 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"_links":{"self":[{"href":"http:\/\/xinblog.ltd\/index.php?rest_route=\/wp\/v2\/posts\/3606"}],"collection":[{"href":"http:\/\/xinblog.ltd\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/xinblog.ltd\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/xinblog.ltd\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/xinblog.ltd\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3606"}],"version-history":[{"count":0,"href":"http:\/\/xinblog.ltd\/index.php?rest_route=\/wp\/v2\/posts\/3606\/revisions"}],"wp:attachment":[{"href":"http:\/\/xinblog.ltd\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/xinblog.ltd\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3606"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/xinblog.ltd\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}