K8S 持久化之 静态PV (NFS)
K8S部署见上篇:
https://blog.csdn.net/oToyix/article/details/117963839
一、概念
Persistent volume
Persistent Volume (持久存储卷)简称PV,是一个K8S资源对象,所以我们可以单独创建一个PV。它不和Pod直接发生关系,而是通过Persistent Volume Claim(PV索取),简称PVC来实现动态绑定。Pod定义里指定的是PVC,然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。
PV的访问模式有三种:
1、ReadWriteOnce:
是最基本的方式,可读可写,但只支持被单个Pod挂载。简称:RWO – ReadWriteOnce
2、ReadOnlyMany:
可以以只读的方式被多个Pod挂载。 简称:ROX – ReadOnlyMany
3、ReadWriteMany:
简称:RWX – ReadWriteMany。这种存储可以以读写的方式被多个Pod共享。不是每一种存储都支持
这三种方式,像共享方式,目前支持的还比较少,比较常用的是NFS。
PVC绑定PV时通常根据两个条件来绑定,“存储的大小” 及 “访问模式”。
创建PV有两种方式:
静态PV
管理员手动创建一堆PV,组成一个PV池,供PVC来绑定。
动态PV
在现有PV不满足PVC的请求时,可以使用存储分类(StorageClass),描述具体过程为:PV先创建分类,PVC请求已创建的某个类(StorageClass)的资源,这样就达到动态配置的效果。即通过一个叫 Storage Class的对象由存储系统根据PVC的要求自动创建。
PV创建完后状态会变成Available,等待被PVC绑定。一旦被PVC邦定,PV的状态会变成Bound,就可以被定义了相应PVC的Pod使用。Pod使用完后会释放PV,PV的状态变成Released。变成Released的PV会根据定义的回收策略做相应的回收工作。
PV有三种回收策略:
1、Retain
Retain就是保留现场,K8S什么也不做,等待用户手动去处理PV里的数据,处理完后,再手动删除PV。
2、Delete
Delete 策略,K8S会自动删除该PV及里面的数据。
3、Recycle。
Recycle方式,K8S会将PV里的数据删除,然后把PV的状态变成Available,又可以被新的PVC绑定使用。
在实际使用场景里,PV的创建和使用通常不是同一个人。一般为:管理员创建一个PV池,开发人员创建Pod和PVC,PVC里定义了Pod所需存储的大小和访问模式,然后PVC会到PV池里自动匹配最合适的PV给Pod使用。
二、K8S+NFS静态存储模式案例:
1、基于Linux平台构建NFS网络文件系统,配置指令如下:
#安装NFS文件服务;
yum install nfs-utils -y
#配置共享目录&权限;
mkdir -p /data/nginx/conf
mkdir -p /data/nginx/html
vim /etc/exports
/data/ *(rw,sync,no_root_squash