当把pod删除了,那么pod里所有的数据也就没有了
所以这个问题怎么解决呢?配置卷
emptyDir
emptyDir: 本地卷,在物理机里随机生成一个目录
如果pod被删除,则物理机里对应的目录也会被删除,不是永久性存储
定义卷的格式:
volumes:
– name:
emptyDir: {}
hostPath
hostPath:类似于docker run -v /data:/xx
当删除pod后,检查/data目录数据仍然还在,这里不作演示
NFS
NFS:网络卷
如果pod出问题导致重启而从原本的节点运行至其他节点,这个时候新节点没有原本节点的目录导致数据不一致或者其他问题,怎么办?使用NFS网络存储
本次实验用*表示允许任何客户端访问,注意*与括号之间没有空格
注:虽然是在pod上挂载的,但是必须在worker上 安装客户端,不然没有showmount命令在所有节点安装yum -y install nfs-u*
在/vdisk创建文件,则容器里也会同步出现相同文件,这里不作演示
到此nfs搭建完成,就算pod移至其他节点也不会影响数据一致性
持久性存储
PV是全局的,所有命名空间是可见的
ReadWriteOnce:同时只有一个去读写
ReadOnlyMany:同时有多个去读,不能写
ReadWriteMany:同时有多个去读写
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
– ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path:/aa
server: 192.168.135.50
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc1
spec:
accessModes:
– ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 5Gi
注:一个pv一次只能和一个pvc进行关联
需要改成一样的值才能关联,这里为节约篇幅不作演示
pv回收策略
• Recycle –会删除数据
• 会生成一个pod回收数据
• 删除pvc之后,pv可复用
• pv状态由Released变为Available
• Retain–不回收数据
• 但是删除pvc之后,pv依然不可用
• pv状态长期保持为 Released
官网原文:
A user creates, or has already created in the case of dynamic provisioning, a PersistentVolumeClaim with a specific amount of storage requested and with certain access modes.
A control loop in the master watches for new PVCs, finds a matching PV (if possible), and binds them together.
If a PV was dynamically provisioned for a new PVC, the loop will always bind that PV to the PVC. Otherwise, the user will always get at least what they asked for, but the volume may be in excess of what was requested.
Once bound, PersistentVolumeClaim binds are exclusive, regardless of how they were bound. A PVC to PV binding is a one-to-one mapping.