Kubernetes : डायनेमिक वॉल्यूम प्रोविजनिंग (NFS)2025/11/21 |
|
पर्सिस्टेंट स्टोरेज का उपयोग करते समय डायनेमिक वॉल्यूम प्रोविजनिंग सुविधा का उपयोग करने के लिए, क्लस्टर एडमिनिस्ट्रेटर द्वारा मैन्युअल रूप से पीवी बनाए बिना डायनेमिक रूप से पीवी (पर्सिस्टेंट वॉल्यूम) बनाना संभव है, जब उपयोगकर्ता द्वारा पीवीसी (पर्सिस्टेंट वॉल्यूम क्लेम) बनाया जाता है। यह उदाहरण निम्न प्रकार के वातावरण पर आधारित है। उदाहरण के लिए, कंट्रोल प्लेन नोड पर NFS सर्वर चलाएं और NFS प्रोविजनर के साथ डायनेमिक वॉल्यूम प्रोविजनिंग कॉन्फ़िगर करें।
-----------+---------------------------+--------------------------+------------
| | |
eth0|10.0.0.30 eth0|10.0.0.51 eth0|10.0.0.52
+----------+-----------+ +-----------+----------+ +-----------+----------+
| [ dlp.srv.world ] | | [ node01.srv.world ] | | [ node02.srv.world ] |
| Control Plane | | Worker Node | | Worker Node |
+----------------------+ +----------------------+ +----------------------+
|
| [1] |
अपने स्थानीय नेटवर्क में NFS सर्वर चलाएँ, यहाँ देखें। |
| [2] |
वर्कर नोड्स को NFS सर्वर पर NFS शेयर माउंट करने में सक्षम होना चाहिए। |
| [3] | एनएफएस क्लाइंट प्रोविजनर स्थापित करें। |
|
[root@dlp ~]#
dnf -y install helm
[root@dlp ~]#
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
# nfs.server = (NFS सर्वर का होस्टनाम या IP पता) # nfs.path = (NFS शेयर पथ) [root@dlp ~]# helm install nfs-client -n kube-system --set nfs.server=10.0.0.35 --set nfs.path=/home/nfsshare nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
NAME: nfs-client LAST DEPLOYED: Fri Nov 21 11:11:35 2025 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None[root@dlp ~]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-66bc5c9577-2jfqr 1/1 Running 1 19m coredns-66bc5c9577-dw6vq 1/1 Running 1 19m etcd-dlp.srv.world 1/1 Running 1 19m kube-apiserver-dlp.srv.world 1/1 Running 1 19m kube-controller-manager-dlp.srv.world 1/1 Running 1 19m kube-proxy-cwsb9 1/1 Running 1 12m kube-proxy-fpqvd 1/1 Running 1 19m kube-proxy-xmkhp 1/1 Running 1 15m kube-scheduler-dlp.srv.world 1/1 Running 1 19m nfs-client-nfs-subdir-external-provisioner-59b75b97bd-hxw7n 1/1 Running 0 43s |
| [4] | यह पॉड द्वारा डायनेमिक वॉल्यूम प्रोविजनिंग का उपयोग करने का एक उदाहरण है। |
|
[root@dlp ~]# kubectl get pv No resources found in default namespace. [root@dlp ~]# kubectl get pvc No resources found in default namespace. [root@dlp ~]# kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-client cluster.local/nfs-client-nfs-subdir-external-provisioner Delete Immediate true 72s
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-provisioner
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
# वॉल्यूम आकार
storage: 5Gi
# स्टोरेजक्लास नाम निर्दिष्ट करें
storageClassName: nfs-client
[root@dlp ~]#
[root@dlp ~]# kubectl apply -f my-pvc.yml persistentvolumeclaim/my-provisioner created kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE my-provisioner Bound pvc-c386c470-309f-4b57-bbcb-ef83d0712799 5Gi RWO nfs-client <unset> 6s # पी.वी. गतिशील रूप से उत्पन्न होता है [root@dlp ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-c386c470-309f-4b57-bbcb-ef83d0712799 5Gi RWO Delete Bound default/my-provisioner nfs-client <unset> 38s
[root@dlp ~]#
vi my-pod.yml
apiVersion: v1
kind: Pod
metadata:
name: my-mginx
spec:
containers:
- name: my-mginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- mountPath: /usr/share/nginx/html
name: nginx-pvc
volumes:
- name: nginx-pvc
persistentVolumeClaim:
# आपके द्वारा बनाया गया PVC नाम
claimName: my-provisioner
kubectl apply -f my-pod.yml pod/my-mginx created [root@dlp ~]# kubectl get pod my-mginx -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-mginx 1/1 Running 0 7s 192.168.40.198 node01.srv.world <none> <none>[root@dlp ~]# kubectl exec my-mginx -- df /usr/share/nginx/html Filesystem 1K-blocks Used Available Use% Mounted on 10.0.0.35:/home/nfsshare/default-my-provisioner-pvc-c386c470-309f-4b57-bbcb-ef83d0712799 164028416 0 155623424 0% /usr/share/nginx/html # परीक्षण सूचकांक फ़ाइल बनाने के लिए पहुँच सत्यापित करें [root@dlp ~]# echo "Nginx Index" > index.html [root@dlp ~]# kubectl cp index.html my-mginx:/usr/share/nginx/html/index.html [root@dlp ~]# curl 192.168.40.198 Nginx Index # जब पीवीसी को हटाया जाता है, तो पीवी को भी गतिशील रूप से हटाया जाता है [root@dlp ~]# kubectl delete pod my-mginx pod "my-mginx" deleted [root@dlp ~]# kubectl delete pvc my-provisioner persistentvolumeclaim "my-provisioner" deleted [root@dlp ~]# kubectl get pv No resources found in default namespace. |
| [5] | स्टेटफुलसेट का उपयोग करने के लिए, [volumeClaimTemplates] निर्दिष्ट करना संभव है। |
|
[root@dlp ~]# kubectl get pv No resources found in default namespace. [root@dlp ~]# kubectl get pvc No resources found in default namespace. [root@dlp ~]# kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-client cluster.local/nfs-client-nfs-subdir-external-provisioner Delete Immediate true 5m32s
[root@dlp ~]#
vi statefulset.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-mginx
spec:
serviceName: my-mginx
replicas: 1
selector:
matchLabels:
app: my-mginx
template:
metadata:
labels:
app: my-mginx
spec:
containers:
- name: my-mginx
image: nginx
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: data
spec:
# स्टोरेजक्लास नाम निर्दिष्ट करें
storageClassName: nfs-client
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
kubectl apply -f statefulset.yml statefulset.apps/my-mginx created [root@dlp ~]# kubectl get statefulset NAME READY AGE my-mginx 1/1 7s[root@dlp ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-mginx-0 1/1 Running 0 33s 192.168.241.132 node02.srv.world <none> <none>[root@dlp ~]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE data-my-mginx-0 Bound pvc-cac094f4-2d94-46ec-857b-310fc6815949 5Gi RWO nfs-client <unset> 72s[root@dlp ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-cac094f4-2d94-46ec-857b-310fc6815949 5Gi RWO Delete Bound default/data-my-mginx-0 nfs-client <unset> 101s |
| Sponsored Link |
|
|