kubernetes资源对象之PersistentVolume
2020-03-27 本文已影响0人
一舍
PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 提供了方便的持久化卷。
PV 提供存储资源,PVC 请求存储资源。
PV 和 PVC 可以将 pod 和数据卷解耦,pod 不需要知道确切的文件系统或者支持它的持久化引擎。
Volume 的生命周期,包括6个阶段:
- Provisioning: 创建PV
- Binding: 将 PV 分配给 PVC
- Using: Pod 通过 PVC 使用该 Volume
- Releasing: Pod 释放 Volume 并删除 PVC
- Reclaiming:回收 PV
- Deleting:删除 PV
Volume 根据其生命周期阶段,分为4个状态:
- Available:可用
- Bound:已经分配给 PVC
- Released:PVC 解绑,但还未执行回收
- Failed:发生错误
PV
PersistentVolume(PV)是集群之中的一块存储。
PV的访问,有3种模式:
- ReadWriteOnce(RWO):可读可写,但只支持被单个节点挂载
- ReadOnlyMany(ROX):可以以只读的方式被多个节点挂载
- ReadWriteMany(RWX):可以以读写的方式被多个节点共享
不是每一种存储都支持这三种方式
PV 的回收策略(persistentVolumeReclaimPolicy),指 PVC 释放卷的时候, PV 该执行的操作,有3种模式:
- Retain:不清理, 保留 Volume
- Recycle:删除数据
- Delete:删除存储资源
PV的创建支持两种方式:
- 手动静态创建
- 通过 StorageClass 动态创建
静态创建
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /tmp
server: 172.17.0.2
动态创建
Kubernetes 还提供了 StorageClass 来动态创建 PV,不仅节省了管理员的时间,还可以封装不同类型的存储供 PVC 选用。
StorageClass 包括4个部分:
- provisioner:指定 Volume 插件的类型
- parameters:指定 provisioner 的选项
- mountOptions:指定挂载选项
- reclaimPolicy:指定回收策略,同 PV 的回收策略
不是每一种存储都支持这动态创建
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/rbd
parameters:
monitors: 10.16.153.105:6789
adminId: kube
adminSecretName: ceph-secret
adminSecretNamespace: kube-system
pool: kube
userId: kube
userSecretName: ceph-secret-user
PVC
PersistentVolumeClaim (PVC) 是对 PV 的请求,PVC 请求特定大小和访问模式的数据卷。
创建PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
volumeName: pv0003
将PVC挂载到pod中
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim