FSX 支持对接 vePFS 文件系统,提供 Fuse 框架的文件系统客户端,只需为 vePFS 文件系统创建 FUSE 协议服务,即可通过 FSX 进行挂载。本文为您介绍如何通过 FSX 客户端使用 vePFS 静态存储卷。
FSX 提供统一的接入、鉴权、管理等策略,可以为 vePFS、TOS 等文件系统提供节点级统一、易于接入的文件系统客户端,能够赋能 VKE 跨平台使用相同 FSX 客户端,提供文件系统挂载、接入,以及其他 IO 和安全丰富的特性。
区别于直接使用原生存储的方式,FXS 客户端能够提供更加普适的高性能能力,自由度更高,兼容性更强。
csi-fsx
和 fsx-service
组件。此外,如需跨租户挂载 FSX 文件系统,要求安装 vpc-cni-controlplane
组件,并确保当前集群的容器网络为 辅助网卡 Trunk 模式。创建容器集群的详细介绍参见 创建集群;组件安装的操作步骤参见 安装组件。通过 FSX 客户端使用 vePFS 静态存储卷的详细步骤如下,可选步骤根据实际情况选择。
说明
仅跨租户挂载 FSX 文件系统场景,需要执行此步骤,否则跳过。
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
kubectl create -f vke-vepfs-fsx-ved.yaml
说明
仅跨租户挂载 FSX 文件系统场景,需要执行此步骤,否则跳过。
vke-vepfs-fsx-pnd.yaml
,示例代码如下:apiVersion: network.volcengine.com/v1beta1 kind: PodNetworkDefinition metadata: name: vpceni1 namespace: default spec: ipResource: name: vpceni1 # 必选,自定义的 VPCENIDefinition 名称,要求与步骤一中配置的一致。 type: VPCENIDefinition # 必选,指定网络资源类型,固定值。
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": [ "*" ] } ] }
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
kubectl create -f vke-vepfs-fsx-secret.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 的命名空间保持一致。
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 名称。
kubectl create -f vke-vepfs-fsx-static-pvc.yaml
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
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 名称。
kubectl create -f vke-vepfs-fsx-static-deployment.yaml