美文网首页
K8S pv和pvc(八)

K8S pv和pvc(八)

作者: 运维之美 | 来源:发表于2019-12-16 11:04 被阅读0次

    概念

    pv PersistentVolume持久化卷 常用的持久化卷(AWS、EBS、Ceph、NFS等)
    pvc PersistentVolumeClaim是用户对PV资源的申请
    特点:pv具有持久性,生命周期独立于pod,pvc匹配pv,定义的pvc被pod挂载使用.

    需要为pod分配存储资源时,用户可以创建一个pvc,定义pod需要的存储大小,访问模式(只读,读写),K8S会自动匹配符合条件的pv.
    创建pv

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: mypv1
    spec:
      capacity:
        storage: 1Gi                                            #指定pv的容量
      accessModes:                                          #访问策略
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle      #回收模式
      nfs:                                                      #存储类型为nfs
        path: /nfsdata/pv1
        server: 192.168.56.105
    
    kubectl apply -f nfs-pv1.yml
    [root@hz-pv]# kubectl get pv
    NAME       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS      CLAIM                    REASON    AGE
    mypv1      1Gi        RWO           Recycle         Available                                      10s
    

    status为available,表示pv状态为可用,可以被pvc申请

    访问模式

    在 PVC 绑定 PV 时通常根据两个条件来绑定,一个是存储的大小,另一个就是访问模式。
    ReadWriteOnce(RWO):是最基本的方式,可读可写,但只支持被单个 Pod 挂载。
    ReadOnlyMany(ROX):可以以只读的方式被多个 Pod 挂载。
    ReadWriteMany(RWX):这种存储可以以读写的方式被多个 Pod 共享。

    回收策略

    PV 的回收策略(persistentVolumeReclaimPolicy,即 PVC 释放卷的时候 PV 该如何操作)也有三种:
    Retain,不清理, 保留 Volume(需要手动清理)
    Recycle,删除数据,即 rm -rf /thevolume/*(只有 NFS 和 HostPath 支持)
    Delete,删除存储资源,比如删除 AWS EBS 卷(只有 AWS EBS, GCE PD, Azure Disk 和 Cinder 支持)
    创建pvc

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mypvc1
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    
    [root@hz-95 pv]# kubectl apply -f nfs-pvc1.yml
    persistentvolumeclaim "mypvc1" configured
    [root@hz-95 pv]# kubectl get pv
    NAME       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM                    REASON    AGE
    mypv1      1Gi        RWO           Recycle         Bound     default/mypvc1                     26m
    

    可以看到此时pv和pvc已经绑定

    卷状态

    Available:可用资源,尚未被绑定到PVC上
    Bound:该卷已经被绑定
    Released:PVC已经被删除,但该资源尚未被集群回收
    Failed:该卷的自动回收过程失败。

    创建pod使用pvc

    apiVersion: v1
    kind : Pod
    metadata:
      name: mypod1
    spec:
      containers:
        - name: mypod1
          image: busybox
          args:
          - /bin/sh
          - -c
          - sleep 30000
          volumeMounts:
          - mountPath: "/mydata"
            name: mydata
      volumes:
        - name: mydata
          persistentVolumeClaim:
            claimName: mypvc1
    

    pod已经创建完成

    [root@hz-95 pv]# kubectl get pod
    NAME                               READY     STATUS    RESTARTS   AGE
    mypod1                             1/1       Running   0          54m
    

    回收PV

    手动删除pvc,容器会产生一个新的pod,此pod的作用是清理mypv的数据,此时pv的状态为Released ,待数据清理完成,重新变成available可用状态

    [root@hz-95 pv]# kubectl delete pvc mypvc1
    persistentvolumeclaim "mypvc1" deleted
    [root@hz-95 pv]# kubectl get pod -o wide
    NAME                               READY     STATUS              RESTARTS   AGE       IP            NODE
    mypod1                             1/1       Running             0          1h        172.17.96.9   10.199.140.186
    recycler-for-mypv1                 0/1       ContainerCreating   0          7s        <none>        10.199.150.95
    [root@hz-95 pv]# kubectl get pv
    NAME       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS     CLAIM                    REASON    AGE
    mypv1      1Gi        RWO           Recycle         Released   default/mypvc1                     50m
    

    相关文章

      网友评论

          本文标题:K8S pv和pvc(八)

          本文链接:https://www.haomeiwen.com/subject/ydyrnctx.html