概念
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
网友评论