k8s–使用nfs制备器的pvc如何扩容

背景&前言

问题背景

公司项目部署了一个系统,该系统需要使用minio时使用PV挂载了一个外部NAS作为存储硬盘。但由于该系统使用Helm部署在腾讯云TCS产品上,该Helm内规定了storageClass和PVC。
随着系统的推广,minio的空间使用量也逐渐增加。由于PVC需要设置spec.resource.request.capacity,因此需要对PVC的容量进行扩容。

期望效果

  1. 修改(扩充)capacity
  2. 第一步的完成需要保证PV不更改,因为minio中已经存储了数据

文章结论

使用nfs制备器不需要担心PVC中的配置导致无法正常使用NAS存储 , 只需要关注NAS本身存储是否够用即可 .

TODO

该cifs制备器能否达到相同效果 ?

阅前须知

TCS环境上nfs的privisioner镜像为 :

  • registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2
    cifs镜像为 :
  • registry.k8s.io/sig-storage/csi-provisioner:v3.5.0
  • registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.8.0
  • registry.k8s.io/sig-storage/livenessprobe:v2.10.0
  • registry.k8s.io/sig-storage/smbplugin:v1.12.0

版本记录

修订时间修订主题Work Context版本
2024.4.29初稿基于TCS的1.22k8s版本进行pvc扩容测试v1.0

参考内容

k8s官网文档——允许卷扩展

正文

storageClass设置

PVC需要能扩展,需要在sc中设定一个字段:

allowVolumeExpansion: true #将此功能设置为 true 时,允许用户通过编辑相应的 PVC 对象来调整卷大小。

官方文档中提到的支持卷扩展的卷类型不包括NFS,因此需要对NFS卷类型是否能进行PVC扩容进行测试。

PVC扩容测试

创建测试用例

使用minio的Helm文件创建一个相同的minio

更新storage-size

更新后, 发现pvc的capacity并没有发生更改, 使用kubectl describe pvc发现出现Warning Event:

Events:
  Type     Reason            Age    From           Message
  ----     ------            ----   ----           -------
  Warning  ExternalExpanding 2m18s  volume_expand  Ignoring the PVC: didn't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC.

该minio的Helm中使用的是一个基于nfs的provisioner的storageclass, 使用nfs的网络文件系统协议的网盘的原因是本项目最初申请的网盘是nfs协议的.
经过初步搜索, 发现有文章提过nfs盘无法进行扩容. 参考文章:kubernetes中用NFS做后端存储支不支持PVC扩容?
于是接下来尝试能否对cifs网盘的pv进行扩容. 如果cifs网盘可以进行扩容的话, 后续将考虑申请cifs网盘并将本项目的minio迁移使用cifs盘.

经过测试, cifs网盘也无法进行扩容, Warning Events如上, 不再赘述.

PVC容量上限测试

更改PVC配置对nfs和cifs网盘的PV进行扩容的路子走不通, 在nfs开源插件的github的issues中搜索到相关问题 :

且该github仓库中的README在最后也对存储限制进行了补充 :

  • 提供的存储并不保证。您可能分配了超过NFS共享的总大小。共享也可能没有足够的存储空间来实际容纳请求。
  • 提供的存储限制并未强制执行。应用程序可以扩展到使用所有可用的存储,而不考虑已分配的大小。
  • 目前不支持任何形式的存储调整大小/扩展操作。您最终会遇到一个错误状态:忽略PVC(持久卷声明):没有找到能够扩展卷的插件;正在等待外部控制器处理此PVC。

因此接下来需要尝试在使用一个申请量1GPVC的pod上写入/传入超过1G的文件, 测试是否能正常写入/传入以及重新读出/取出.

创建测试用例

使用minio的Helm文件创建一个相同的minio, 使用nfs的storageClass.

写入数据

使用ingress将minio的console网页从测试网段暴露, 确定pvc有成功创建pv并已在NAS上挂载了一个文件路径, 然后通过minio的console网页进行upload文件.
发现在设置了1Gi的PVC的情况下, minio即使接收了三个Gi的文件也能继续上传文件.

实际存入容量
pvc描述

预览数据

通过使用minio-console的文件预览功能 , 确认预览正常 .

Logo

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

更多推荐