Local Volume 表示挂载的本地存储设备,如磁盘、分区或目录,而 Local Volume 只能用作静态创建的 PersistentVolume,与 HostPath 卷相比,Local Volume 可以以持久的方式使用,而无需手动将 pod 调度到节点上,因为系统会通过查看 PersistentVolume 上的节点关联性来了解卷的节点约束。

创建 Local Volume

Local Volume 仅用于 all-in-one 单节点部署,也是单节点部署的默认存储类型,Installer 会预先创建 10 个可用的 10G PV 供使用,若存储空间不足时则需要参考如下步骤手动创建。

1、若 Local Volume 还不是默认的存储类型,可参考创建 Local Volume 的存储类型详细步骤如下:

  • 1.1. 通过 sc.yaml 文件定义 Local Volume 的存储类型:
  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4. name: local
  5. provisioner: kubernetes.io/no-provisioner
  6. volumeBindingMode: WaitForFirstConsumer
  • 1.2. 执行创建命令:
  1. $ kubectl create -f sc.yaml

2、创建 Local Volume 文件夹:

  • 登录宿主机,创建文件夹,以文件夹 vol-test 为例,执行以下命令:
  1. sudo mkdir -p /mnt/disks/vol-test

3、创建 Local PV:

  • 3.1. 通过 pv.yaml 文件定义 Loval PV:
  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: pv-local
  5. spec:
  6. capacity:
  7. storage: 10Gi
  8. # volumeMode field requires BlockVolume Alpha feature gate to be enabled.
  9. volumeMode: Filesystem
  10. accessModes:
  11. - ReadWriteOnce
  12. persistentVolumeReclaimPolicy: Delete
  13. storageClassName: local
  14. local:
  15. path: /mnt/disks/vol-test
  16. nodeAffinity:
  17. required:
  18. nodeSelectorTerms:
  19. - matchExpressions:
  20. - key: node-role.kubernetes.io/master
  21. operator: Exists
  • 3.2. 执行创建命令:
  1. $ kubectl create -f pv.yaml

4、执行以下命令验证创建结果:

  1. $ kubectl get pv
  2. NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
  3. pv-local 10Gi RWO Delete Available local 4s

上述工作完成后可在 KubeSphere 控制台创建存储卷,KubeSphere 控制台创建的存储卷容量不可大于预分配 PV 容量。

注:Local Volume 存储卷创建成功后为 Pending 属于正常状态,当创建工作负载调度 Pod 后存储卷状态即可变化为 Bound。

删除 Local Volume PV 和文件夹

若需要 删除 Local Volume,则手动创建的 PersistentVolume 也需要手动清理和删除。

  1. 删除 Local Volume PV:
  1. $ kubectl delete pv pv-local
  1. 删除 Local Volume 文件夹,此操作也会删除 vol-test 文件夹里内容:
  1. $ sudo cd /mnt/disks
  2. $ sudo rm -rf vol-test