You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
FSX 访问方式
通过 FSX 客户端使用 EFS 静态存储卷
复制全文
下载 pdf
通过 FSX 客户端使用 EFS 静态存储卷
FSX 支持对接弹性文件存储(EFS),作为 EFS 高可用 POSIX 文件系统客户端。通过此客户端,可将 EFS 存储挂载到 Linux 系统,使得存储可以作为 Linux 系统的本地文件系统,实现数据的存储和管理。本文为您介绍如何通过 FSX 客户端使用 EFS 静态存储卷。
前提条件
  • 已安装 csi-fsx 和 fsxset-controller 组件,并升级至最新版本。详情请参见 csi-fsxfsxset-controller
  • (可选)获取创建密钥所需的 AK/SK,用于挂载 EFS 存储,账号 AK/SK 获取方法参见 如何获取 API 访问密钥。若使用临时 Token 鉴权,需要自主实现刷新 Token 的逻辑。
  • (可选)已在本地安装 kubectl 工具,并通过 kubectl 连接目标集群。详细说明参见 连接集群
使用限制
  • 若使用临时 Token 鉴权,需要自主实现刷新 Token 的逻辑。
  • 有状态负载需要独占一个卷,暂不支持使用手动创建的存储卷声明。
  • FSX 客户端当前仅支持 x86_64 的体系结构,暂不支持在 Windows 和 macOS 环境使用。详情请参见 运行环境
通过控制台配置
步骤一:创建存储卷(PV)
  1. 在左侧导航栏中,选择 集群。单击目标集群名称,进入集群管理页面。
  1. 在集群管理页面左侧导航栏中,选择 存储管理 > 存储卷
  1. 单击 创建存储卷,在弹出的配置页面中,完成参数配置。
  • 配置项
    说明
    创建方式
    选择存储卷的创建方式,目前支持静态创建。
    名称
    根据系统提示,自定义存储卷的名称,需确保存储卷名称在集群内唯一。
    存储类型
    存储卷类型,本场景选择 弹性文件存储
    访问类型
    存储卷的访问类型,目前支持 FSXNFS。本文中选择 FSX
    注意
    • FSX 访问方式目前仅支持云服务器,不支持弹性容器。
    • FSX 访问方式的性能更强劲、可用性更高,将逐步替换 NFS。
    访问模式
    选择存储卷的访问方式,目前支持 ReadWriteMany ,此访问方式支持多点读写。
    项目
    为存储卷指定所属项目,从项目纬度管理集群资源的运维、授权等操作。默认选择 default(默认项目)。详情请参见 项目管理
    接入点
    选择已创建的 EFS 文件系统和与集群在同一个私有网络(VPC)内的接入点。
    挂载路径
    根据系统提示的输入规范,输入待挂载文件系统的子目录信息,默认为根目录/
    说明
    需要保证将要挂载的子目录在 EFS 中已经存在。
  1. 单击 确定,完成配置。
步骤二:创建存储卷声明(PVC)
  1. 在集群管理页面左侧导航栏中,选择 存储管理 > 存储卷声明
  1. 单击 创建存储卷声明,在弹出的配置页面中,完成参数配置。
  • 配置项
    说明
    命名空间
    选择存储卷声明所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述
    名称
    自定义存储卷声明的名称,需确保存储卷声明名称在集群内唯一。
    存储类型
    选择存储类型,本场景选择 弹性文件存储
    访问模式
    选择存储卷声明的访问方式,目前支持 ReadWriteMany,表示多点读写。
    计费类型
    按需选择资源计费类型,目前仅支持按量计费。
    创建方式
    配置存储卷声明的创建方式,本场景选择 使用已有存储卷
    存储卷
    指定已创建的存储卷进行关联挂载。
  1. 单击 确定,完成配置。
步骤三:创建应用并挂载存储卷
EFS 文件存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。
可通过创建工作负载或更新工作负载操作的容器配置步骤,为工作负载添加卷并挂载卷。详细操作参见:工作负载
通过 kubectl 命令行配置
已经 连接集群 的情况下,可通过 kubectl 命令行使用 EFS 文件存储静态存储卷。
步骤一:(可选)创建策略
说明
  • 若使用主账号 AK/SK,可跳过此步骤。
  • 如需实现动态刷新临时 Token 的逻辑,参考 AssumeRole 接口。
创建策略的操作步骤参见 新建自定义策略。其中,使用 IAM 用户挂载存储并执行相应操作时,所需的权限参见 配置接入点策略
创建 EFS 策略的 JSON 示例如下:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"efs:ClientMount",
"efs:ClientWrite",
"efs:ClientRootAccess"
],
"Resource": ["trn:efs:<RegionId>:<AccountId>:filesystem/<FilesystemId>"],
"Condition": {
"StringEquals": {
"volc:RequestTag/accesspoint": "<接入点 ID>"
}
}
},
{
"Effect": "Allow",
"Action": [
"efs:VerifyAccessPoint",
"efs:DescribeAccessPoints",
"efs:CreateAccessPoint",
"efs:ModifyAccessPoint",
"efs:DeleteAccessPoint"
],
"Resource": [
"*"
]
}
]
}
步骤二:创建保密字典(Secret)
  1. 创建 Secret 的 Yaml 文件vke-efs-fsx-secret.yaml,示例代码如下:
  • apiVersion: v1
    data:
    AccessKeyId: ${ak} # Base 64 编码后的账号 AK,需要替换为真实信息
    SecretAccessKey: ${sk} # Base 64 编码后的账号 SK,与上述 AK 匹配,需要替换为真实信息
    ExpiredTime: ${Temporary Token expiration time} # Base 64 编码后的临时 Token 过期时间,如果使用账号 AK/SK,不需要指定
    SessionToken: ${Temporary Token content} # Base 64 编码后的临时 Token 内容,如果使用账号 AK/SK,不需要指定
    kind: Secret
    metadata:
    name: efs-fsx-key # Secret 名称。若使用 1.26.x 版本集群,名称中禁止使用符号.,其他版本不受影响
    namespace: default
    type: Opaque
说明
您可以使用echo -n "${ak}" | base64命令对 AK、SK 等进行 Base64 编码,请将${ak}替换为您自己的实际值。例如当${ak}取值为demo时,编码命令为echo -n "demo" | base64,编码后的值为ZGVtbw==
  1. 执行以下命令,创建 Secret。
  • kubectl create -f vke-efs-fsx-secret.yaml
步骤三:创建存储卷(PV)
  1. 创建 PV 的 YAML 文件vke-efs-fsx-static-pv.yaml,示例代码如下:
  • apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: vke-efs-static-pv
    spec:
    capacity:
    storage: 20Gi # 存储卷容量,仅用于校验,容量无实际意义
    accessModes:
    - ReadWriteMany
    csi:
    driver: fsx.csi.volcengine.com # 驱动类型,本示例为 fsx.csi.volcengine.com,表示 csi-fsx 插件
    volumeHandle: vke-efs-static-pv # PV 的唯一标识符,与 PV 名称保持一致。如需同时使用多个 PV,则各个 PV 中该值必须不一致
    volumeAttributes:
    type: efs # 存储卷类型,需配置为 efs
    server: ap-684b1***.cnshbe27***.3qda7dutskr***.cn-shanghai.efs.ivolces.com # EFS 文件系统接入点域名
    path: / # 挂载文件系统的子目录
    secretName: efs-fsx-key # 已创建的 Secret,当 IAM 策略开启时必填
    secretNamespace: default # 已创建的 Secret 所在的命名空间,当 IAM 策略开启时必填
  1. 执行以下命令,创建 PV。
  • kubectl create -f vke-efs-fsx-static-pv.yaml
步骤四:创建存储卷声明(PVC)
  1. 创建 PVC 的 YAML 文件vke-efs-fsx-static-pvc.yaml,示例代码如下:
  • apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: vke-efs-static-pvc # PVC 名称
    namespace: default
    spec:
    accessModes:
    - ReadWriteMany # PVC 访问模式。目前仅支持 ReadWriteMany,表示多点读写
    resources:
    requests:
    storage: 20Gi # 声明的存储使用量,仅用于校验,需要与 PV 的配置容量一致
    volumeMode: Filesystem # PV 类型,本示例填写 Filesystem,表示文件存储
    volumeName: vke-efs-static-pv # 绑定到该 PVC 的 PV 名称
  1. 执行以下命令,创建 PVC。
  • kubectl create -f vke-efs-fsx-static-pvc.yaml
  1. 执行以下命令,查看 PVC 与 PV 的静态绑定结果。
  • kubectl get pvc
  • 预期输出结果如下,表示 PVC 与 PV 静态绑定成功。
  • NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
    vke-efs-fsx-static-pvc Bound vke-efs-fsx-static-pv 20Gi RWX 33s
步骤五:创建应用并挂载存储卷
  1. 创建 Deployment 的 YAML 文件vke-efs-fsx-static-deployment.yaml,示例代码如下:
  • apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: vke-efs-static-deployment # Deployment 名称
    namespace: default
    labels:
    app: nginx
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: vke-efs-static-deployment
    template:
    metadata:
    labels:
    app: vke-efs-static-deployment
    spec:
    containers:
    - image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0
    imagePullPolicy: IfNotPresent
    name: nginx
    volumeMounts:
    - mountPath: /tmp # EFS 在容器中挂载的位置
    name: nas-pv
    volumes:
    - name: nas-pv
    persistentVolumeClaim:
    claimName: vke-efs-static-pvc # 已创建的 PVC 名称
  1. 执行以下命令,创建 Deployment。
  • kubectl create -f vke-efs-fsx-static-deployment.yaml
结果验证
按照上文示例创建工作负载并挂载存储卷后,您可以通过以下方式验证存储卷的挂载和持久化存储。
  1. 执行以下命令,查看存储卷是否正确挂载到 Pod 的指定路径。
  • kubectl exec vke-efs-static-deployment-xxx -- df | grep tmp
  • 预期返回结果如下。
  • cnshbe27***.3qda7dutskr***.efs.ivolces.com:/ 10995116277760 0 10995116277760 0% /tmp
  1. 查看 Pod 中的挂载路径,即查看存储卷中的数据。
  • kubectl exec vke-nas-static-deployment-xxx -- ls /tmp
  • 预期返回结果如下。
  • lost+found
  1. 在存储卷中写入文件。
  • kubectl exec vke-nas-static-deployment-xxx -- touch /tmp/test
  1. 删除 Pod。
  • kubectl delete pod vke-nas-static-deployment-xxx
  1. 查看新创建 Pod 下的存储卷挂载路径。
  • kubectl exec vke-nas-static-deployment-xxx -- ls /tmp
  • 预期返回如下,可以看到存储卷中写入的文件依然存在,未随着 Pod 的删除而被删除,实现了数据的持久化存储。
  • lost+found
    test
相关文档
最近更新时间:2026.08.24 20:05:30
这个页面对您有帮助吗?
有用
有用
无用
无用