文章目录
- 一、概念
- `1.1.PersistentVolume(PV)`
- `1.2.PersistentVolumeClaim(PVC)`
- `1.3.PV访问模式AccessModes`
- `1.4.PV回收策略RECLAIM POLICY`
- `PV状态STATUS`
- 二、PV静态供给
- `2.1.创建PV`
- `2.2.创建PVC`
- `2.3.Pod使用PVC`
- `2.4.申请的存储空间是否为实际可用的存储空间?`
- 三、PV动态供给
- `3.1.概念`
- `3.2.流程图`
- `3.3.部署外部插件(支持nfs)`
- `3.4.创建PVC`
一、概念
1.1.PersistentVolume(PV)
是集群中由管理员配置的一段网络存储。 它是集群中的资源,就像节点是集群资源一样。 生命周期独立于使用PV的任何单个pod。
1.2.PersistentVolumeClaim(PVC)
是由用户进行存储的请求,类似pod。 Pod消耗节点资源,PVC消耗PV资源。可以请求特定的大小和访问模式(例如,可以一次读/写或多次只读)。
1.3.PV访问模式AccessModes
RWO - ReadWriteOnce #单个Pod挂载并且可读写
ROX - ReadOnlyMany #可以有多个Pod以只读方式挂载
RWX - ReadWriteMany #可以有多个Pod以读写方式挂载
1.4.PV回收策略RECLAIM POLICY
Retain #人工回收,保留,默认选项
Recycle #清除PV中的数据,相当于执行rm -rf /data/nfs/pv0001/*
Delete #PV和与 PV 相连的后端存储同时删除,相当于执行rm -rf /data/nfs/pv0001
PV状态STATUS
• Available(可用):表示可用状态,还未被任何 PVC 绑定
• Bound(已绑定):表示 PV 已经被 PVC 绑定
• Released(已释放):PVC 被删除,但是资源还未被集群重新声明
• Failed(失败): 表示该 PV 的自动回收失败
二、PV静态供给
2.1.创建PV
创建两个PV,一个5G,一个10G
注意:/data/nfs/pv0001和/data/nfs/pv0002需提前创建
apiVersion v1
kind PersistentVolume
metadata
name pv0001
spec
capacity
storage 5Gi
volumeMode Filesystem
accessModes
ReadWriteMany
persistentVolumeReclaimPolicy Recycle
nfs
path /data/nfs/pv0001
server192.168.1.10
---
apiVersion v1
kind PersistentVolume
metadata
name pv0002
spec
capacity
storage 10Gi
volumeMode Filesystem
accessModes
ReadWriteMany
persistentVolumeReclaimPolicy Recycle
nfs
path /data/nfs/pv0002
server192.168.1.10
kubectl get pv
2.2.创建PVC
根据访问模式
和存储空间
去绑定对应的PV,始终确保绑定的PV大小大于等于PVC的大小
PVC与PV是一一对应的
先删除Pod再删除PVC
apiVersion v1
kind PersistentVolumeClaim
metadata
name my-pvc
spec
accessModes
ReadWriteMany
resources
requests
storage 5Gi
kubectl get pvc
2.3.Pod使用PVC
实际是把NFS共享的/data/nfs/pv0001目录绑定到容器的/usr/share/nginx/html目录
spec
containers
name empty
image nginx
imagePullPolicy IfNotPresent
ports
containerPort80
volumeMounts
name data
mountPath /usr/share/nginx/html
volumes
name data
persistentVolumeClaim
claimName my-pvc
2.4.申请的存储空间是否为实际可用的存储空间?
不是。存储空间字段storage不能限制实际存储容量,只作为一种匹配标记,具体可用容量取决于后端网络存储(NFS、Ceph)。
就好比PV申请的存储空间为5G,而后端存储可用空间为100G,那么对应的Pod实际可使用100G的空间
现在K8s已逐步对部分存储提供自动限制的支持
三、PV动态供给
3.1.概念
Dynamic Provisioning机制工作的核心在于StorageClass的API对象
StorageClass声明存储插件,用于自动创建PV
3.2.流程图
3.3.部署外部插件(支持nfs)
下载地址:https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client/deploy
kubectl apply -f rbac.yaml #授权访问apiserver
vi deployment.yaml
修改镜像为gmoney23/nfs-client-provisioner
填写正确的NFS服务器的地址和目录
kubectl apply -f deployment.yaml
kubectl apply -f class.yaml #创建存储类
3.4.创建PVC
apiVersion v1
kind PersistentVolumeClaim
metadata
name my-pvc
spec
storageClassName managed-nfs-storage
accessModes
ReadWriteMany
resources
requests
storage 25Gi
kubectl apply -f pvc.yaml
会自动创建PV和PVC,并绑定
Pod使用PVC的写法与静态供给一样,不在重复
会自动在NFS共享存储下创建目录