No menu items!
No menu items!
More

    [Kubernetes 11] Sử dụng Persistent Volume (pv) và Persistent Volume Claim (pvc) trong Kubernetes

    PersistentVolume (pv) là một phần không gian lưu trữ dữ liệu trong cluster, các PersistentVolume giống với Volume bình thường tuy nhiên nó tồn tại độc lập với POD (pod bị xóa PV vẫn tồn tại), có nhiều loại PersistentVolume có thể triển khai như NFS, Clusterfs …

    PersistentVolumeClaim (pvc) là yêu cầu sử dụng không gian lưu trữ (sử dụng PV). Hình dung PV giống như Node, PVC giống như POD. POD chạy nó sử dụng các tài nguyên của NODE, PVC hoạt động nó sử dụng tài nguyên của PV.

    1. Tạo Persistent Volume trong Kubernetes

    Tạo manifest với nội dung sau

    cat > ./persistent-volume.yaml << OEF
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: persistentvolume1
      labels:
        name: persistentvolume1
    spec:
      storageClassName: mystorage
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/home/mystorage"
    OEF

    Triển khai manifest

    root@k8s-standalone:/home# kubectl apply -f ./persistent-volume.yaml
    persistentvolume/persistentvolume1 created

    Liệt kê các PV

    root@k8s-standalone:/home# kubectl get pv -o wide
    NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE   VOLUMEMODE
    persistentvolume1   5Gi        RWO            Retain           Available           mystorage               3s    Filesystem

    Thông tin chi tiết

    root@k8s-standalone:/home# kubectl describe pv/persistentvolume1
    Name:            persistentvolume1
    Labels:          name=persistentvolume1
    Annotations:     <none>
    Finalizers:      [kubernetes.io/pv-protection]
    StorageClass:    mystorage
    Status:          Available
    Claim:           
    Reclaim Policy:  Retain
    Access Modes:    RWO
    VolumeMode:      Filesystem
    Capacity:        5Gi
    Node Affinity:   <none>
    Message:         
    Source:
        Type:          HostPath (bare host directory volume)
        Path:          /home/mystorage
        HostPathType:  
    Events:            <none>

    2. Tạo Persistent Volume Claim trong Kubernetes

    PVC (Persistent Volume Claim) là yêu cầu truy cập đến PV, một PV chỉ có một PVC

    Tạo manifest như sau:

    cat > ./persistent-volume-claim.yaml << OEF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: persistentvolumeclaim1
      labels:
        name: persistentvolumeclaim1
    spec:
      storageClassName: mystorage
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 150Mi
    OEF

    Triển khai manifest

    root@k8s-standalone:/home# kubectl apply -f persistent-volume-claim.yaml 
    persistentvolumeclaim/persistentvolumeclaim1 created

    Verify lại pvc và pv đã được tạo

    root@k8s-standalone:/home# kubectl get pvc,pv -o wide
    NAME                                           STATUS   VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
    persistentvolumeclaim/persistentvolumeclaim1   Bound    persistentvolume1   5Gi        RWO            mystorage      9s    Filesystem
    
    NAME                                 CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                            STORAGECLASS   REASON   AGE   VOLUMEMODE
    persistentvolume/persistentvolume1   5Gi        RWO            Retain           Bound    default/persistentvolumeclaim1   mystorage               48s   Filesystem

    có thể xem chi tiết persistentvolumeclaim bằng cách sử dụng lệnh describe

    root@k8s-standalone:/home# kubectl describe persistentvolumeclaim/persistentvolumeclaim1
    Name:          persistentvolumeclaim1
    Namespace:     default
    StorageClass:  mystorage
    Status:        Bound
    Volume:        persistentvolume1
    Labels:        name=persistentvolumeclaim1
    Annotations:   pv.kubernetes.io/bind-completed: yes
                   pv.kubernetes.io/bound-by-controller: yes
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      5Gi
    Access Modes:  RWO
    VolumeMode:    Filesystem
    Used By:       <none>
    Events:        <none>

    3. Sử dụng persistent volume và persistent volume claim với container.

    cat > ./persistent-application.yaml << OEF
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: prometheus
    spec:
      selector:
        matchLabels:
          name: prometheus
      template:
        metadata:
          name: prometheus
          labels:
            name: prometheus
        spec:
          volumes:
          # Khai báo VL sử dụng PVC
          - name: myvolume
            persistentVolumeClaim:
              claimName: persistentvolumeclaim1
          containers:
          - name: prometheus
            image: prom/prometheus
            resources:
              limits:
                memory: "50Mi"
                cpu: "500m"
            command:
              - sleep
              - "600"
            volumeMounts:
            - mountPath: "/data"
              name: myvolume
    OEF

    Triển khai file persistent-application.yaml

    root@k8s-standalone:/home# kubectl apply -f ./persistent-application.yaml 
    daemonset.apps/prometheus created

    Verify DaemonSet App

    root@k8s-standalone:/home# kubectl get po -l 'name=prometheus' -o wide
    NAME               READY   STATUS    RESTARTS   AGE   IP              NODE             NOMINATED NODE   READINESS GATES
    prometheus-d8rf7   1/1     Running   0          44s   10.244.20.155   k8s-standalone   <none>           <none>

    Tạo file test

    root@k8s-standalone:/home# mkdir -p /home/mystorage
    root@k8s-standalone:/home# echo 'Chao mung den voi website cua HoangHD' > /home/mystorage/hoanghd.txt

    Vào container vừa mới tạo kiểm tra ta thấy thư mục /home/mystorage của máy host đã mount vào /data của container thông qua persistent volume và persistent volume claim.

    root@k8s-standalone:/home# kubectl exec -it po/prometheus-d8rf7 sh
    /prometheus $ cat /data/hoanghd.txt 
    Chao mung den voi website cua HoangHD

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email