美文网首页
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