k8s中的控制器保证了pod的始终存储,却保证不了pod中的数据,启动一个新pod后,之前pod中的数据会随着容器的删掉而丢失,所以在k8s中需引进pv和pvc。
PV:是全局资源,生命周期独立于pod,当使用它的pod销毁时对PV没有影响。
PVC:是Namespace里的资源,描述对PV的一个请求。
在每一台服务器中安装nfs服务
增加配置文件
vim /etc/exports
/data 192.0.0.0/24(rw,async,no_root_squash,no_all_squash)
创建数据目录,并重启服务
mkdir /data/k8s -p
systemctl restart rpcbind
systemctl restart nfs
在其他服务验证
创建PV
创建/root/k8s/volume目录,并创建pv的yaml配置文件
apiVersion: v1
kind: PersistentVolume
metadata:
name: test
labels:
type: test
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/data/k8s"
server: 192.168.1.5
readOnly: false
同理,再创建一个名为test1,内存为5Gi的pv,查看最终创建情况
kubectl get pv
创建PVC
创建pvc配置文件
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
查看创建后结果
kubectl get pvc
看到新创建的pvc按照最小化原则已经挂载到test1的pv上。