0
点赞
收藏
分享

微信扫一扫

K8S之持久卷(PV和PVC)


文章目录

  • ​​一、概念​​
  • ​​`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
server: 192.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
server: 192.168.1.10

kubectl get pv
K8S之持久卷(PV和PVC)_持久卷

​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
K8S之持久卷(PV和PVC)_持久卷_02

​2.3.Pod使用PVC​

实际是把NFS共享的/data/nfs/pv0001目录绑定到容器的/usr/share/nginx/html目录

spec:
containers:
- name: empty
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
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.流程图​

K8S之持久卷(PV和PVC)_持久卷_03

​3.3.部署外部插件(支持nfs)​

下载地址:https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client/deploy
K8S之持久卷(PV和PVC)_持久卷_04

kubectl apply -f rbac.yaml      #授权访问apiserver

vi deployment.yaml

修改镜像为gmoney23/nfs-client-provisioner
填写正确的NFS服务器的地址和目录

K8S之持久卷(PV和PVC)_PVC_05

kubectl apply -f deployment.yaml

K8S之持久卷(PV和PVC)_持久卷_06

kubectl apply -f class.yaml     #创建存储类

K8S之持久卷(PV和PVC)_PV_07

​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,并绑定
K8S之持久卷(PV和PVC)_存储空间_08
Pod使用PVC的写法与静态供给一样,不在重复

会自动在NFS共享存储下创建目录
K8S之持久卷(PV和PVC)_kubernetes_09


举报

相关推荐

0 条评论