Kubernetes : डायनेमिक वॉल्यूम प्रोविज़निंग (NFS)2023/09/04 |
परसिस्टेंट स्टोरेज का उपयोग करते समय डायनामिक वॉल्यूम प्रोविजनिंग सुविधा का उपयोग करने के लिए,
क्लस्टर प्रशासक द्वारा मैन्युअल रूप से पीवी बनाए बिना गतिशील रूप सेPV (Persistent Volume) बनाना संभव है
जब उपयोगकर्ताओं द्वारा PVC (Persistent Volume Claim) बनाया गया।
यह उदाहरण निम्न प्रकार से पर्यावरण पर आधारित है।
उदाहरण के लिए, Control Plane नोड पर NFS सर्वर चलाएं और NFS प्रोविजनर के साथ डायनेमिक वॉल्यूम प्रोविजनिंग कॉन्फ़िगर करें।
-----------+---------------------------+--------------------------+------------ | | | eth0|10.0.0.25 eth0|10.0.0.71 eth0|10.0.0.72 +----------+-----------+ +-----------+-----------+ +-----------+-----------+ | [ ctrl.srv.world ] | | [snode01.srv.world] | | [snode02.srv.world] | | Control Plane | | Worker Node | | Worker Node | +----------------------+ +-----------------------+ +-----------------------+ |
[1] |
Control Plane नोड पर NFS सर्वर चलाएँ, यहाँ देखें।
इस उदाहरण पर, [/home/nfsshare] निर्देशिका को NFS शेयर के रूप में कॉन्फ़िगर करें। |
[2] | |
[3] | Helm के साथ NFS क्लाइंट प्रोविजनर स्थापित करें। |
root@ctrl:~#
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
# nfs.server = (एनएफएस सर्वर का होस्टनाम या आईपी पता) # nfs.path = (NFS शेयर पथ) root@ctrl:~# helm install nfs-client -n kube-system --set nfs.server=10.0.0.25 --set nfs.path=/home/nfsshare nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
NAME: nfs-client LAST DEPLOYED: Thu Nov 3 06:24:42 2022 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: Noneroot@ctrl:~# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE ..... ..... nfs-client-nfs-subdir-external-provisioner-fc65bd7d7-65khg 1/1 Running 0 23s |
[4] | यह पॉड द्वारा डायनामिक वॉल्यूम प्रावधान का उपयोग करने का एक उदाहरण है। |
root@ctrl:~# kubectl get pv No resources found in default namespace. root@ctrl:~# kubectl get pvc No resources found in default namespace. root@ctrl:~# kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-client cluster.local/nfs-client-nfs-subdir-external-provisioner Delete Immediate true 35m apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-provisioner annotations: # StorageClass नाम निर्दिष्ट करें volume.beta.kubernetes.io/storage-class: nfs-client spec: accessModes: - ReadWriteOnce resources: requests: # वॉल्यूम का आकार storage: 5Gi
root@ctrl:~#
root@ctrl:~# kubectl apply -f my-pvc.yml persistentvolumeclaim/my-provisioner created kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-provisioner Bound pvc-dfc3f716-f559-4746-a866-94b2aaff41ee 5Gi RWO nfs-client 8s # PV गतिशील रूप से उत्पन्न होता है root@ctrl:~# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-dfc3f716-f559-4746-a866-94b2aaff41ee 5Gi RWO Delete Bound default/my-provisioner nfs-client 40s
root@ctrl:~#
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@ctrl:~# kubectl get pod my-mginx -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-mginx 1/1 Running 0 14s 192.168.186.65 snode01.srv.world <none> <none>root@ctrl:~# kubectl exec my-mginx -- df /usr/share/nginx/html Filesystem 1K-blocks Used Available Use% Mounted on 10.0.0.25:/home/nfsshare/default-my-provisioner-pvc-dfc3f716-f559-4746-a866-94b2aaff41ee 79158272 9739264 65764352 13% /usr/share/nginx/html # परीक्षण अनुक्रमणिका फ़ाइल बनाने के लिए एक्सेसिंग सत्यापित करें root@ctrl:~# echo "Nginx Index" > index.html root@ctrl:~# kubectl cp index.html my-mginx:/usr/share/nginx/html/index.html root@ctrl:~# curl 192.168.186.65 Nginx Index # पीवीसी को हटाने के लिए जब हटाते हैं, तो पीवी को भी गतिशील रूप से हटा दिया जाता है root@ctrl:~# kubectl delete pod my-mginx pod "my-mginx" deleted root@ctrl:~# kubectl delete pvc my-provisioner persistentvolumeclaim "my-provisioner" deleted root@ctrl:~# kubectl get pv No resources found in default namespace. |
[5] | StatefulSet का उपयोग करने के लिए, [volumeClaimTemplates] निर्दिष्ट करना संभव है। |
root@ctrl:~# kubectl get pv No resources found in default namespace. root@ctrl:~# kubectl get pvc No resources found in default namespace. root@ctrl:~# kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-client cluster.local/nfs-client-nfs-subdir-external-provisioner Delete Immediate true 41m
root@ctrl:~#
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:
# StorageClass नाम निर्दिष्ट करें
storageClassName: nfs-client
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
kubectl apply -f statefulset.yml statefulset.apps/my-mginx created root@ctrl:~# kubectl get statefulset NAME READY AGE my-mginx 1/1 10sroot@ctrl:~# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-mginx-0 1/1 Running 0 35s 192.168.186.66 snode01.srv.world <none> <none>root@ctrl:~# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-my-mginx-0 Bound pvc-2a22ed58-17a7-48de-9ff0-d283c936fa20 5Gi RWO nfs-client 72sroot@ctrl:~# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-2a22ed58-17a7-48de-9ff0-d283c936fa20 5Gi RWO Delete Bound default/data-my-mginx-0 nfs-client 94s |
Sponsored Link |