FSX 支持对接 TOS 文件系统,作为 TOS 高可用 POSIX 文件系统客户端,提供 VKE 场景使用 TOS 客户端的故障恢复能力。本文为您介绍如何通过 FSX 客户端使用 TOS 静态存储卷。
FSX 提供统一的接入、鉴权、管理等策略,可以为 vePFS、TOS 等文件系统提供节点级统一、易于接入的文件系统客户端,能够赋能 VKE 跨平台使用相同 FSX 客户端,提供文件系统挂载、接入,以及其他 IO 和安全丰富的特性。
区别于直接使用原生存储的方式,FXS 客户端能够提供更加普适的高性能能力,自由度更高,兼容性更强。
csi-fsx
和 fsx-service
组件。此外,如需跨租户挂载 FSX 文件系统,要求安装 vpc-cni-controlplane
组件,并确保当前集群的容器网络为 辅助网卡 Trunk 模式。创建容器集群的详细介绍参见 创建集群;组件安装的操作步骤参见 安装组件。通过 FSX 客户端使用 TOS 静态存储卷的详细步骤如下,可选步骤根据实际情况选择。
说明
仅跨租户挂载 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 接口。创建 TOS 策略的 Json 示例如下:
{ "Statement": [ { "Effect": "Allow", "Action": [ "tos:Get*", "tos:ListBucket", "tos:Put*", "tos:Head*", "tos:DeleteObject", "tos:AbortMultipartUpload" ], "Resource": [ "trn:tos:::<对象存储桶名称>", "trn:tos:::<对象存储桶名称>/*" ] } ] }
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-tos-fsx-static-pv.yaml
,示例代码如下:apiVersion: v1 kind: PersistentVolume metadata: name: fsx-tos-with-iam-pv spec: capacity: storage: 20Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Delete mountOptions: # 挂载参数。 - no_writeback_cache csi: driver: fsx.csi.volcengine.com volumeHandle: fsx-tos-pv volumeAttributes: type: TOS server: tos-cn-beijing.ivolces.com region: cn-beijing # 如果 TOS 的 region 和当前集群位于相同 region,可以省略。 bucket: csi-test path: / # 务必确保 path 存在,否则挂载会失败。 subpath: / # 务必确保 subpath 存在,否则挂载会失败。 secretName: tos-fsx-key # 与步骤四中 Secret 的名称保持一致。 secretNamespace: default # 与步骤四中 Secret 的命名空间保持一致。 networkDefinitionName: vpceni1 # 仅跨租户场景需要,与步骤二中 PodNetworkDefinition 的名称保持一致。 networkDefinitionNamespace: default # 仅跨租户场景需要,与步骤二中 PodNetworkDefinition 的命名空间保持一致。
说明
TOS 使用 FSX 客户端时支持配置挂载参数,包括基本参数、读缓存参数、写缓存参数等,更多详细说明参见:FXS 挂载参数说明。
kubectl create -f vke-tos-fsx-static-pv.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 名称。
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