You need to enable JavaScript to run this app.
导航
通过 FSX 客户端使用 vePFS 静态存储卷
最近更新时间:2025.02.25 11:00:14首次发布时间:2025.02.25 11:00:14

FSX 支持对接 vePFS 文件系统,提供 Fuse 框架的文件系统客户端,只需为 vePFS 文件系统创建 FUSE 协议服务,即可通过 FSX 进行挂载。本文为您介绍如何通过 FSX 客户端使用 vePFS 静态存储卷。

背景信息

FSX 提供统一的接入、鉴权、管理等策略,可以为 vePFS、TOS 等文件系统提供节点级统一、易于接入的文件系统客户端,能够赋能 VKE 跨平台使用相同 FSX 客户端,提供文件系统挂载、接入,以及其他 IO 和安全丰富的特性。

区别于直接使用原生存储的方式,FXS 客户端能够提供更加普适的高性能能力,自由度更高,兼容性更强。

前提条件

  • 已经创建容器服务集群,并安装 csi-fsxfsx-service 组件。此外,如需跨租户挂载 FSX 文件系统,要求安装 vpc-cni-controlplane 组件,并确保当前集群的容器网络为 辅助网卡 Trunk 模式。创建容器集群的详细介绍参见 创建集群;组件安装的操作步骤参见 安装组件
  • 已经创建 FUSE 协议类型的 vePFS(性能版、智算版)文件存储,并在协议服务中创建接入点。
  • 确保指定命名空间下已经存在合适的密钥,创建密钥所需的火山引擎账号 AK/SK 获取方法参见:如何获取 API 访问密钥。若使用临时 Token 鉴权,需要自主实现刷新 Token 的逻辑。
  • 已经在本地安装 kubectl 工具,并通过 kubectl 连接目标集群。详细说明参见:连接集群

使用限制

  • 目前,FSX 客户端仅支持使用性能版或智算版 vePFS 文件系统实例。
  • 若使用临时 Token 鉴权,需要自主实现刷新 Token 的逻辑。
  • 有状态负载需要独占一个卷,暂不支持使用手动创建的存储卷声明。

操作步骤

通过 FSX 客户端使用 vePFS 静态存储卷的详细步骤如下,可选步骤根据实际情况选择。

步骤一:(可选)创建 VPCENIDefinition

说明

仅跨租户挂载 FSX 文件系统场景,需要执行此步骤,否则跳过。

  1. 创建 VPCENIDefinition 的 Yaml 文件 vke-vepfs-fsx-ved.yaml,示例代码如下:
apiVersion: network.volcengine.com/v1beta1
kind: VPCENIDefinition
metadata:
  name: vpceni1             # 自定义 VPCENIDefinition 名称。
  namespace: default
spec:
  vpcID: vpc-rr1s2d***      # 必选,集群所属私有网络的 ID。
  allocateType:
    type: Elastic           # 必选,IP 分配模式,Elastic 表示弹性分配模式。
  securityGroupIDs: 
  - sg-rrhowl***            # 必选,Pod 默认安全组。
  subnetIDs:
  - subnet-13f64***         # 必选,指定 VPC 中的子网 ID。包括:集群 Pod 子网中的部分或全部子网、集群 Pod 子网中未指定但属于指定 VPC ID 的其他子网 ID。
  - subnet-13fy9***
  userAuth:
    chainingRoles:
    - trn:iam::xxxx:role/RoleForVke
    permissionServiceName: vke
  1. 执行以下命令,创建 VPCENIDefinition。
kubectl create -f vke-vepfs-fsx-ved.yaml

步骤二:(可选)创建 PodNetworkDefinition

说明

仅跨租户挂载 FSX 文件系统场景,需要执行此步骤,否则跳过。

  1. 创建 PodNetworkDefinition 的 Yaml 文件vke-vepfs-fsx-pnd.yaml,示例代码如下:
apiVersion: network.volcengine.com/v1beta1
kind: PodNetworkDefinition
metadata:
  name: vpceni1
  namespace: default
spec:
  ipResource:
    name: vpceni1              # 必选,自定义的 VPCENIDefinition 名称,要求与步骤一中配置的一致。
    type: VPCENIDefinition     # 必选,指定网络资源类型,固定值。
  1. 执行以下命令,创建 PodNetworkDefinition。
kubectl create -f vke-vepfs-fsx-pnd.yaml

步骤三:(可选)创建策略

说明

仅使用临时 Token 场景,需要执行此步骤,否则跳过。

创建策略的操作步骤参见 新建自定义策略,如需实现动态刷新临时 Token 的逻辑,参考 AssumeRole 接口。创建 vePFS 文件系统的策略的 Json 示例如下:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "vepfs:ClientMount",
                "vepfs:ClientWrite"
            ],
            "Resource": ["trn:vepfs:cn-beijing:xxxx:filesystem/vepfs-cngl86b3e87ab461"],
            "Condition": {
                "StringEquals": {
                    "volc:RequestTag/accesspoint": "<接入点 ID>"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "vepfs:VerifyAccessPoint",
                "vepfs:DescribeAccessPoints",
                "vepfs:CreateAccessPoint",
                "vepfs:ModifyAccessPoint",
                "vepfs:DeleteAccessPoint"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
  }

步骤四:创建 Secret

  1. 创建 Secret 的 Yaml 文件vke-vepfs-fsx-secret.yaml,示例代码如下:
apiVersion: v1
data:
  AccessKeyId: <火山引擎账号 AK>          # Base 64 编码后的火山引擎账号 AK,需要替换为真实信息。
  SecretAccessKey: <火山引擎账号 SK>      # Base 64 编码后的火山引擎账号 SK,与上述 AK 匹配,需要替换为真实信息。
  ExpiredTime: <临时 Token 过期时间>      # Base 64 编码后的临时 Token 过期时间,如果使用账号 AK/SK,不需要指定。
  SessionToken: <临时 Token 内容>        # Base 64 编码后的临时 Token 内容,如果使用账号 AK/SK,不需要指定。
kind: Secret
metadata:
  name: vepfs-fsx-key
  namespace: default
type: Opaque
  1. 执行以下命令,创建 Secret。
kubectl create -f vke-vepfs-fsx-secret.yaml

步骤五:创建 PV

  1. 创建 PV 的 Yaml 文件vke-vepfs-fsx-static-pv.yaml,示例代码如下:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: fsx-vepfs-with-iam-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete
  csi:
    driver: fsx.csi.volcengine.com
    volumeHandle: fsx-vepfs-with-iam-pv
    volumeAttributes:
      type: vePFS
      server: ap-55xxxxbd.cnbxxxxxx40305xx.rrmjxxxxxxxxxxx58q09xxx.cn-beijing.vepfs-ivolces.com     # vePFS 挂载命令中的域名,一般为接入点 ID 或接入点域名。
      path: /              # 务必确保 path 存在,否则挂载会失败。
      subpath: /           # 务必确保 subpath 存在,否则挂载会失败。
      secretName: vepfs-fsx-key              # 与步骤四中 Secret 的名称保持一致。  
      secretNamespace: default               # 与步骤四中 Secret 的命名空间保持一致。  
      networkDefinitionName: vpceni1         # 仅跨租户场景需要,与步骤二中 PodNetworkDefinition 的名称保持一致。
      networkDefinitionNamespace: default    # 仅跨租户场景需要,与步骤二中 PodNetworkDefinition 的命名空间保持一致。

步骤六:创建 PVC

  1. 创建 PVC 的 Yaml 文件文件vke-vepfs-fsx-static-pvc.yaml,示例代码如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: vke-vepfs-fsx-static-pvc       # PVC 名称。
  namespace: default
spec:
  accessModes:                         # PVC 访问模式。目前仅支持 ReadWriteMany ,表示多点读写。
  - ReadWriteMany
  resources:
    requests:
      storage: 20Gi                    # 声明的存储使用量。
  volumeMode: Filesystem
  volumeName: vke-vepfs-fsx-static-pv  # 绑定到该 PVC 的 PV 名称。
  1. 执行以下命令,创建 PVC。
kubectl create -f vke-vepfs-fsx-static-pvc.yaml
  1. 执行以下命令,查看 PVC 与 PV 的静态绑定结果。
kubectl get pvc

预期输出结果如下,表示 PVC 与 PV 静态绑定成功。

NAME                       STATUS   VOLUME                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
vke-vepfs-fsx-static-pvc   Bound    vke-vepfs-fsx-static-pv    20Gi       RWX                          2m36s

步骤七:创建 Deployment

  1. 创建 Deployment 的 Yaml 文件文件vke-vepfs-fsx-static-deployment.yaml,示例代码如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vke-static-vepfs-fsx-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vke-static-vepfs-fsx-deploy
  template:
    metadata:
      labels:
        app: vke-static-vepfs-fsx-deploy
    spec:
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx
        volumeMounts:
        - mountPath: /tmp          # FSX 文件系统在容器中挂载的位置。
          name: vepfs-fsx-pv
      volumes:
      - name: vepfs-fsx-pv
        persistentVolumeClaim:
          claimName: vke-vepfs-fsx-static-pvc  # 步骤六中创建的 PVC 名称。
  1. 执行以下命令创建 Deployment。
kubectl create -f vke-vepfs-fsx-static-deployment.yaml