Ubuntu 24.04
Sponsored Link

Kubernetes : डायनेमिक वॉल्यूम प्रोविजनिंग (NFS)2024/06/07

 

पर्सिस्टेंट स्टोरेज का उपयोग करते समय डायनेमिक वॉल्यूम प्रोविजनिंग सुविधा का उपयोग करने के लिए, उपयोगकर्ताओं द्वारा PVC (पर्सिस्टेंट वॉल्यूम क्लेम) बनाए जाने पर क्लस्टर एडमिनिस्ट्रेटर द्वारा मैन्युअल रूप से PV बनाए बिना डायनेमिक रूप से PV (पर्सिस्टेंट वॉल्यूम) बनाना संभव है।

यह उदाहरण निम्न प्रकार के वातावरण पर आधारित है।

+----------------------+   +----------------------+
|  [ ctrl.srv.world ]  |   |   [ dlp.srv.world ]  |
|     Manager Node     |   |     Control Plane    |
+-----------+----------+   +-----------+----------+
        eth0|10.0.0.25             eth0|10.0.0.30
            |                          |
------------+--------------------------+-----------
            |                          |
        eth0|10.0.0.51             eth0|10.0.0.52
+-----------+----------+   +-----------+----------+
| [ node01.srv.world ] |   | [ node02.srv.world ] |
|     Worker Node#1    |   |     Worker Node#2    |
+----------------------+   +----------------------+

 

उदाहरण के लिए, NFS प्रोविजनर के साथ डायनेमिक वॉल्यूम प्रोविजनिंग को कॉन्फ़िगर करें जिससे NFS स्टोरेज [nfs.srv.world (10.0.0.35)] से प्रदान किया जाता है।

[1]

NFS सर्वर चलाएँ, यहाँ देखें।
इस उदाहरण में, [/home/nfsshare] निर्देशिका को NFS शेयर के रूप में कॉन्फ़िगर करें।

[2]

वर्कर नोड्स को NFS सर्वर पर NFS शेयर माउंट करने में सक्षम होना चाहिए।

[3]

Helm स्थापित करें, यहां देखें।

[4] एनएफएस क्लाइंट प्रोविजनर स्थापित करें।
root@ctrl:~#
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
# nfs.server = (NFS सर्वर होस्टनाम या IP पता)
# nfs.path = (NFS शेयर पथ)

root@ctrl:~#
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 Jun  7 04:45:13 2024
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None

root@ctrl:~#
kubectl get deployment -n kube-system

NAME                                         READY   UP-TO-DATE   AVAILABLE   AGE
calico-kube-controllers                      1/1     1            1           4h54m
coredns                                      2/2     2            2           4h55m
metrics-server                               1/1     1            1           16m
nfs-client-nfs-subdir-external-provisioner   1/1     1            1           19s
[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                   83s

# PVC बनाएं

root@ctrl:~#
vi my-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-provisioner
spec:
  accessModes:
    - ReadWriteOnce
  # StorageClass नाम निर्दिष्ट करें
  storageClassName: nfs-client
  resources:
    requests:
      # वॉल्यूम आकार
      storage: 5Gi

root@ctrl:~#
kubectl apply -f my-pvc.yml

persistentvolumeclaim/my-provisioner created
root@ctrl:~#
kubectl get pvc

NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
my-provisioner   Bound    pvc-7b9f17ed-fc6f-4e7e-99dc-96324c1a4076   5Gi        RWO            nfs-client     <unset>                 5s

# PV गतिशील रूप से उत्पन्न होता है

root@ctrl:~#
kubectl get pv

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pvc-7b9f17ed-fc6f-4e7e-99dc-96324c1a4076   5Gi        RWO            Delete           Bound    default/my-provisioner   nfs-client     <unset>                          35s

root@ctrl:~#
vi my-pod.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 1
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /usr/share/nginx/html
          name: nginx-pvc
      volumes:
        - name: nginx-pvc
          persistentVolumeClaim:
            # आपके द्वारा बनाया गया PVC नाम
            claimName: my-provisioner

root@ctrl:~#
kubectl apply -f my-pod.yml

deployment.apps/my-nginx created
root@ctrl:~#
kubectl get pods

NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-69d9cb4f47-zzjj7   1/1     Running   0          5s

root@ctrl:~#
kubectl exec my-nginx-69d9cb4f47-zzjj7 -- df /usr/share/nginx/html

Filesystem                                                                               1K-blocks  Used Available Use% Mounted on
10.0.0.35:/home/nfsshare/default-my-provisioner-pvc-7b9f17ed-fc6f-4e7e-99dc-96324c1a4076 164028416     0 155623424   0% /usr/share/nginx/html

# परीक्षण सूचकांक फ़ाइल बनाने के लिए पहुँच की पुष्टि करें

root@ctrl:~#
echo "Nginx Index" > index.html

root@ctrl:~#
kubectl cp index.html my-nginx-69d9cb4f47-zzjj7:/usr/share/nginx/html/index.html

root@ctrl:~#
kubectl expose deployment my-nginx --type="NodePort" --port 80

root@ctrl:~#
kubectl port-forward service/my-nginx --address 127.0.0.1 80:80 &

root@ctrl:~#
curl localhost

Handling connection for 80
Nginx Index
# पॉड्स को हटाते समय, PVC को हटाने के लिए, फिर PV को भी गतिशील रूप से हटा दिया जाता है

root@ctrl:~#
kubectl delete deployment my-nginx

deployment.apps "my-nginx" deleted
root@ctrl:~#
kubectl delete pvc my-provisioner

persistentvolumeclaim "my-provisioner" deleted
root@ctrl:~#
kubectl get pv

No resources found
[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                   9m51s

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

root@ctrl:~#
kubectl apply -f statefulset.yml

statefulset.apps/my-mginx created
root@ctrl:~#
kubectl get statefulset

NAME       READY   AGE
my-mginx   1/1     6s

root@ctrl:~#
kubectl get pods

NAME         READY   STATUS    RESTARTS   AGE
my-mginx-0   1/1     Running   0          31s

root@ctrl:~#
kubectl get pvc

NAME              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
data-my-mginx-0   Bound    pvc-4e2ce32d-c318-4669-b570-949043fc9d30   5Gi        RWO            nfs-client     <unset>                 48s

root@ctrl:~#
kubectl get pv

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pvc-4e2ce32d-c318-4669-b570-949043fc9d30   5Gi        RWO            Delete           Bound    default/data-my-mginx-0   nfs-client     <unset>                          78s
मिलान सामग्री