在我们的应用中可能经常有文件存储的需求,在docker的部署中,我们是通过将容器中的目录直接挂载到宿主机的目录上来解决这个问题的,那么k8s部署的方式肯定有所不同,k8s因为是多节点的,每个pod挂载的是对应节点的某个目录,这个会导致节点数据的一致性问题;在k8s中主要通过pvc的方式进行文件的挂载管理;

1.PVC

PVC 的全称是:PersistentVolumeClaim(持久化卷声明),PVC 是用户存储的一种声明,PVC 消耗的是 PV 资源,用不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。

在使用 PVC 之前,我们还得把其他节点上的 nfs 客户端给安装上,使用命令:

yum -y install  nfs-utils rpcbind

在使用PVC之前,我们要先创建PV

2.创建PV

yml文件如下所示:

apiVersion: v1
kind: PersistentVolume
metadata:
    name: powerflow-pv
spec:
    capacity:
        storage: 10Gi
    accessModes:
        - ReadWriteMany
    storageClassName: powerflow-pv
    persistentVolumeReclaimPolicy: Recycle
    nfs:
        path: /mnt/data/pv
        server: 172.26.4.13

这里申请的存储是10g,然后nfs目录时/mnt/data/pv这个目录;读写的方式指PV 能以 read-write 模式 mount 到多个节点;

storageClassName 指定 PV 的 class 为 powerflow-pv。相当于为 PV 设置了一个分类,PVC 可以指定 class 申请相应 class 的 PV;注意,这里的目录是要先创建的;然后需要授权访问权限

chmod 666 /mnt/data/pv

然后编辑/etc/exports文件,添加

/mnt/data/pv *(rw,no_root_squash,no_all_squash,sync)

然后执行export -r 使配置生效;

然后kubectl create -f xxx-pv.yml 创建pv

3.创建pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: powerflow-pvc
    namespace: powerflow
spec:
    storageClassName: powerflow-pv
    accessModes:
        - ReadWriteMany
    resources:
        requests:
            storage: 10Gi

这里的storageClassName: powerflow-pv需要跟上面配置的pv是一致的;然后执行

kubectl create -f xxx-pvc.yml创建pvc

4.pod的设置

增加的配置如图所示

1>这里的volumeMounts下面的name跟volumes的name保持一致;

2>persistentVolumeClaim的claimName跟上面声明的pvc的名称是一致的,表示使用的哪个pvc;

这里可以看到pvc和对应的pv已经绑定起来了;

之后你就可以发现不管哪个节点上数据总是同步的了;

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐