全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

使用KPFS文件存储

最近更新时间:2026-11-04 15:39:30

您可以在金山云容器服务Kubernetes集群中使用金山云KPFS文件存储。

前提:

挂载KPFS文件存储的前提是您有创建好的文件系统,可参考快速上手-创建文件系统,完成文件系统创建。

部署kpfs-csi-driver

在【Helm3 应用】>【应用市场】中找到kpfs-csi-driver ,单击【部署】。

  • 所在地域:只读,展示当前操作地域。

  • 应用名称:输入应用名称,仅支持小写字母、数字、‑;必须小写字母开头,小写字母或数字结尾。

  • 部署集群:下拉选择目标 KCE 集群。

  • 所在命名空间:下拉选择已选部署集群的命名空间。

  • Chart版本:选择Chart版本。

创建文件系统认证信息

在CSI驱动中,挂载KPFS文件系统所需的认证信息,均存在 Kubernetes Secret 中,因此您必须先创建文件系统认证信息。通过 kubectl apply -f secret.yaml指令创建认证信息:

apiVersion: v1
metadata:
  name: kpfs-secret
  namespace: default
kind: Secret
type: Opaque
stringData:
  name: ${KPFS_NAME} #KPFS文件系统名称
  token: ${KPFS_TOKEN} # 访问KPFS文件系统所需的Token(参见KPFS控制台-文件系统详情页挂载方法中的Token值)
  access-key: ${ACCESS_KEY}
  secret-key: ${SECRET_KEY}

字段说明:

  • name:KPFS文件系统名称。

  • token:访问KPFS文件系统所需的Token(参见KPFS控制台-文件系统详情页挂载方法中的Token值)。

  • access-key / secret-key:账户的AK/SK信息。

静态PV

静态配置是最简单直接地在 Kubernetes 中使用 KPFS PV 的方式,直接将整个文件系统的根目录(或子目录)作为 PV 挂载到Pod里,适用于不同容器共享数据的场景。

创建PV

通过kubectl apply -f pv.yaml 指令创建PV,可用kubectl get pv查看:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: kpfs-pv
  labels:
    type: kpfs-pv
    name: test_csi
spec:
  capacity:
    storage: 10Pi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany 
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: csi.kpfs.com #CSI驱动的名称,用于匹配KPFS的CSI驱动程序
    volumeHandle: kpfs-pv
    fsType: kpfs
    nodePublishSecretRef:
      name: kpfs-secret
      namespace: default

字段说明:

  • storage:不支持给静态 PV 设置存储容量,填写任意有效值即可。

  • accessModes:PV访问模式,支持ReadWriteMany (允许多个node读写访问)和 ReadOnlyMany (允许多个node只读访问)两种访问方式。您可根据使用CSI驱动的方式不同, 在PV定义中,填写需要的accessModes。

  • persistentVolumeReclaimPolicy:静态PV仅支持Retain,PV删除时对应KPFS文件系统不会被删除。

  • nodePublisSecretRef:先前的步骤中创建好的文件系统认证信息(Secret)。

创建PVC

通过kubectl apply -f pvc.yaml 指令创建PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kpfs-pvc-static #pvc的名称
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  storageClassName: ""
  resources:
    requests:
      storage: 10Pi
  selector:
    matchLabels: #需要匹配的pv的label,才能把pvc和pv成功绑定
      type: kpfs-pv
      name: test_csi

创建Pod引用PVC

通过kubectl apply -f app.yaml 指令创建Pod:

apiVersion: v1
kind: Pod
metadata:
  name: kpfs-app-static
  namespace: default
spec:
  containers:
  - args:
    - -c
    - while true; do echo $(date -u) >> /data/out-static.txt; sleep 5; done #向挂载路径每5s写一个时间戳
    command:
    - /bin/sh
    image: library/centos
    name: app
    volumeMounts:
    - mountPath: /data
      name: data
    resources:
      requests:
        cpu: 10m
  volumes:
  - name: data
    persistentVolumeClaim: #引用PVC
      claimName: kpfs-pvc-static

Pod创建完成后,可以进入容器确认数据正常写入:

kubectl exec -ti  kpfs-app-static -- tail -f /data/out-static.txt

高级功能与配置

在静态配置下,如果没有显式指定挂载子目录,文件系统的根目录将会被挂载进容器,因此如果对应用有数据隔离的要求,希望让多个应用共享同一个子目录,可使用subdir参数挂载子目录。如果子目录尚不存在,会在挂载前自动创建。示例如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: kpfs-pv
  labels:
    type: kpfs-pv
    name: test_csi
spec:
  capacity:
    storage: 10Pi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany 
  persistentVolumeReclaimPolicy: Retain
  mountOptions:
    - subdir=${/SUB_DIR} #SUB_DIR为子目录名称
  csi:
    driver: csi.kpfs.com #CSI驱动的名称,用于匹配KPFS的CSI驱动程序
    volumeHandle: kpfs-pv
    fsType: kpfs
    nodePublishSecretRef:
      name: kpfs-secret
      namespace: default

动态PV

动态配置方式,创建PV的基础配置参数在StorageClass中定义。您只需创建PVC,指定StorageClass,并且在Pod中引用该PVC,就会自动为您创建一个PV,每一个PV会最终对应KPFS文件系统中的一个子目录。适用于大量应用且不同应用、不同团队间需要实现数据隔离的场景。

创建StorageClass

StorageClass(存储类)里指定了创建PV所需的各类配置,您可以将其理解为动态配置下的Profile:不同的StorageClass就是不同的Profile,可以在其中指定不同的认证信息、挂载配置,让动态配置下可以同时使用不同的文件系统,或者指定不同的挂载。

通过kubectl apply -f sc.yaml 指令创建StorageClass:

#sc yaml示例
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: kpfs-csi-provisioner-retain
provisioner: csi.kpfs.com
parameters:
  csi.storage.k8s.io/provisioner-secret-name: kpfs-secret
  csi.storage.k8s.io/provisioner-secret-namespace: default
  csi.storage.k8s.io/node-publish-secret-name: kpfs-secret
  csi.storage.k8s.io/node-publish-secret-namespace: default
reclaimPolicy: 
  Retain

字段说明:

  • reclaimPolicy:动态PV支持Delete|Retain两种回收策略。Delete策略会导致在删除PV时,PVC子目录随着一起释放。如果数据安全性要求高,推荐使用Retain,以免误删数据。

  • parameters:先前的步骤中创建好的文件系统认证信息(Secret)。

创建PVC

通过kubectl apply -f pvc.yaml 指令创建PVC:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: kpfs-test-pvc-sc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: kpfs-csi-provisioner-sc
  resources:
    requests:
      storage: 10Gi

字段说明:

  • accessModes:PV访问模式,支持ReadWriteMany (允许多个node读写访问)和 ReadOnlyMany (允许多个node只读访问)两种访问方式。

  • storage:目前不支持给动态 PV 设置存储容量,填写任意有效值即可。

  • storageClassName:指定使用的StorageClass。

创建Pod引用PVC

通过kubectl apply -f app.yaml 指令创建Pod:

apiVersion: v1
kind: Pod
metadata:
  name: kpfs-app-sc
  namespace: default
spec:
  containers:
  - args:
    - -c
    - while true; do echo $(date -u) >> /data/out-1.txt; sleep 5; done
    command:
    - /bin/sh
    image: library/centos
    name: app
    volumeMounts:
    - mountPath: /data
      name: data
    resources:
      requests:
        cpu: 10m
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: kpfs-test-pvc-sc

Pod创建完成后,可以进入容器确认数据正常写入:

kubectl exec -ti  kpfs-app-sc -- tail -f /data/out-1.txt

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈