k8s中使用volume

kubernetes实现数据卷的方式是PV & PVC

PV有很多持久卷插件可以实现,例如:GCEPersistentDiskAWSElasticBlockStoreNFSISCSIRDBGlusterfsHostPath(单节点测试使用)本地持久卷

我们本次使用NFS方式,先介绍一下NFS。

NFS卷能将 NFS (网络文件系统) 挂载到您的 Pod 中。 不像 emptyDir 那样会在删除 Pod 的同时也会被删除,nfs 卷的内容在删除 Pod 时会被保存,卷只是被卸载掉了。 这意味着 nfs 卷可以被预先填充数据,并且这些数据可以在 Pod 之间”传递”。
NFS 是Network File System 的缩写,即网络文件系统,NFS是FreeBSD支持的文件系统中的一种。NFS基于RPC远程掉用实现,其允许一个系统在网络上与他人共享目录和文件,通过使用NFS,程序可以像使用本地文件一样使用远端系统上的文件。NFS是一个非常稳定的, 可移植的网络文件系统,具备可扩展和高性能特性,达到了企业级应用质量标准。由于网络速度的增加延时降低,NFS一直是通过网络系统提供文件系统服务的有竞争力选择

NFS原理

NFS的工作原理是使用客户端/服务器架构,由一个客户端程序和服务器程序组成。 从客户端的角度来说,NFS 中的第一个操作称为 mount。Mount 代表将远程文件系统加载到本地文件系统空间中。该流程以对 mount(Linux 系统调用)的调用开始,它通过 VFS 路由到 NFS 组件。确认了加载端口号之后(通过 get_port 请求对远程服务器 RPC 调用),客户端执行 RPC mount 请求。这一请求发生在客户端和负责 mount 协议(rpc.mountd)的特定守护进程之间。这一守护进程基于服务器当前导出文件系统来检查客户端请求;如果所请求的文件系统存在,并且客户端已经访问了,一个 RPC mount 响应为文件系统建立了文件句柄。客户端这边存储具有本地加载点的远程加载信息,并建立执行 I/O 请求的能力。这一协议表示一个潜在的安全问题;因此,NFSv4 用内部 RPC 调用替换这一辅助 mount 协议,来管理加载点
由于VFS的存在,客户端可以像使用其他普通文件系统一样使用NFS文件系统

安装NFS服务端
  • 安装NFS服务端

    # ubuntu
    apt-get install -y nfs-kernel-server
    # centos
    yum -y install nfs-utils rpcbind
    
  • 创建共享文件目录,并给目录添加读写权限

    mkdir -p /kubernetes/volumes
    chmod a+rw /kubernetes/volumes
    
  • 配置NFS服务目录-打开文件/etc/exports在尾部添加内容

    /kubernetes/volumes *(rw,sync,no_subtree_check,no_root_squash)
    
  • 配置生效

    exportfs -r
    
  • 启动rpcbind、nfs服务

    systemctl start rpcbind
    systemctl start nfs
    
  • 在 server 端先自我测试一下是否可以联机,展示出连接目录

    showmount -e localhost
    

    命令解释

    配置项含义
    *任何ip都可以访问
    rw读写权限
    sync同步权限
    no_subtree_check如果输出目录是一个子目录,NFS服务器不检查其父目录的权限
    no_root_squash客户端连接服务端如果使用的也是root,那么也拥有对服务端分享目录的root权限
安装NFS客户端

我们找一个新的机器进行测试

  • 安装客户端

    yum -y install nfs-utils
    
  • 挂载

    # 创建挂载目录
    mkdir /testnfs
    # 挂载服务端
    mount -t nfs 10.10.103.80:/kubernetes/volumes /testnfs
    # 查看挂载结果
    df -h
    

    挂载之后,我们在客户端的/testnfs文件夹下创建文件,会发现服务端的/kubernetes/volumes文件夹下的文件创建成功了。

  • 取消挂载(非必须)

    # 取消挂载命令
    umount /testnfs
    

    挂载坑如果已经挂载了一个远程目录,服务端关闭,客户端进入根目录会失败,这时需要强制取消挂载 -lf

    umount -lf /testnfs
    
kubernetes 中使用数据卷

PV(Persistent Volume)是集群中的一块网络存储,和node一样也是集群的资源,PV和Volume类似,不过会有独立与Pod的生命周期,这一API对象包含了存储的实现细节,例如NFS,ISCSI或者其他云服务商提供的存储系统,PVC(Persistent Volume Claim)是用户的一个请求,跟pod类似,pod消费node资源,PVC消费PV资源。Pod能够申请特定的资源(CPU和内存),PVC能够请求特定的尺寸和访问模式(例如加载一个读写,以及多个只读实例)

PV 与PVC
PV是集群的资源。PVC对这一资源的请求,也是对资源的所有权检验,PV和PVC之间的互动遵循如下的生命周期:

供应: 集群管理员会创建一系列的PV,这些PV包含了为集群用户提供的真是存储资源,他们可利用kubernetes API 来消费。

绑定: 用户创建一个包含了容量可访问模式的持久卷申请,master会监听PVC的产生,并尝试根据请求内容查找匹配的PV,并把PV和PVC绑定,用户能够获取满足需要的资源, 并且在使用过程中可能超出请求数量,如果找不到合适的卷,这一申请就会持续处于绑定状态,一直到出现合适的PV,例如一个集群准备了很多的40G的持久卷,也无法响应41G的申请,除非把超过41G的PV加入集群

使用: pod把申请作为卷来使用。集群会通过PVC查找绑定的PV,并Mount给pod,对于支持多种访问方式的卷,用户在使用PVC作为卷的时候可以指定需要的访问方式,一旦用户拥有了一个已经绑定的PVC,被绑定的PV就归该用户所有了,用户的pod能够在pod的卷中包含PVC来访问他们占有的PV

释放: 当用户完成对卷的使用是,就可以利用API删除对应的PVC对象了。 而且他还可以重新申请,删除PVC后,对应的卷被视为“被释放”,但是这时还不能给其他的PVC使用,之前的PVC数据还保存在卷中,要根据策略来进行后续处理。

回收策略: PV的回收策略向集群阐述了在PVC释放卷的时候应如何进行后续工作,目前可以采用三种策略:Retain、Recycle、Delete

  1. Retain:保留策略允许重新申请这一资源。
  2. Recycle:基础擦除(rm -rf /thevolume/*)
  3. Delete:同时删除持久卷以及卷中存储的内容。如果插件支持。
创建PV

创建一个nfs-pv-logs.yml的配置文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv-logs
spec:
  # 设置容量
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  # 访问模式
  accessModes:
    # ReadWriteOnce:单节点加载读写
    # ReadWriteMany:多节点加载读写
    - ReadWriteMany
  # 回收策略,这里是人工重新申请
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    # NFS服务端配置的路径
    path: /kubernetes/volumes
    # NFS服务端ip
    server: 10.10.103.80
    readOnly: false

创建之前在所有的node节点上安装nfs客户端

创建PVC

创建文件nfs-pvc-logs-login.yml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc-log-all
spec:
  accessModes:
    # 要和PV一致的访问模式,
    - ReadWriteMany
  # 按需分配资源
  resources:
    requests:
      storage: 1Gi

参考文档
kubernetes 官网-volumes
kubernetes 官网-persistent-volumes
github中的示例
百度词条

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值