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

容器服务

复制全文
下载 pdf
云盘存储(EBS)
使用云盘动态存储卷
复制全文
下载 pdf
使用云盘动态存储卷
本文介绍如何创建云盘类型存储类和存储卷声明,以及工作负载如何使用云盘动态存储卷。​
前提条件​
  • 已安装 csi-ebs 组件。详情请参见 安装组件。​
  • 如需配置云盘格式化参数,需将 csi-ebs 组件升级至 v1.3.0 及以上版本。详情请参见 升级组件。​
  • (可选)如需配置云盘加密功能,需提前开通 KMS 密钥管理系统,并完成密钥创建。具体操作,请参见 密钥管理快速入门。​
  • (可选)若使用 YAML 配置,请确保已经在本地环境中安装 kubectl 工具,连接至目标集群。详情请参见 连接集群。​
使用限制​
  • 暂不支持挂载、卸载包年包月类型的云盘,请勿将云盘的计费类型改为包年包月。详情请参见 云盘 FAQ。​
  • 暂不支持云盘多实例挂载。详情请参见 云盘 FAQ。​
  • 云盘为非共享存储,仅支持 ReadWriteOnce 模式,即仅能被一个 Pod 以读写方式挂载。​
  • 有状态负载每个 Pod 实例需要独占一个卷,不支持所有 Pod 实例共用一个手动创建的存储卷声明。​
  • 无状态负载挂载云盘时,Replicas需要配置为 1,无法为每个 Pod 配置独立的存储卷,且不能保证挂载、卸载的优先顺序。​
  • 由于无状态负载的升级策略,重启 Pod 时可能导致 Pod 一直无法挂载,因此,推荐使用有状态负载(StatefulSet)挂载使用云盘。​
  • 云盘支持多种类型,包含以下使用限制:​
  • 云盘类型和 ECS 实例规格需要匹配才可以挂载,否则会挂载失败。详情请参见 实例规格介绍。​
  • 云盘只能挂载到相同可用区的 ECS 实例,不支持跨可用区挂载。​
  • 每个节点最多可挂载云盘数量由 ECS 实例规格和 csi-ebs 组件的配置决定,如需修改节点预留盘数量,可以至 csi-ebs 组件配置中进行修改。​
  • 当 csi-ebs 组件的 节点保留盘数量 配置为空时,系统会预留 30% 给系统盘和数据盘。例如:若 ECS 实例最多允许挂 16 块云盘,则容器服务最多允许挂载 16*(1-0.3)= 12 块云盘。​
  • 当 csi-ebs 组件的 节点保留盘数量 配置不为空时,系统会根据配置预留数据盘。例如:若 ECS 实例最多允许挂 16 块云盘,同时在 csi-ebs 组件中配置 节点保留盘数量 为 1 时,则容器服务最多允许挂载 16-1 = 15 块云盘。​
  • 当 csi-ebs 组件版本低于 v1.1.2 时,不支持使用三代机(例如:g3i、c3i、r3i 等)。建议定期升级组件到最新版本,详情请参见 csi-ebs 组件发布记录。​
  • 使用云盘存储卷时,若在应用模板中配置了securityContext.fsGroup参数,kubelet 在存储卷挂载完成后会执行chmod和chown操作,导致挂载时间延长。​
  • 使用云盘存储卷时,若未格式化的磁盘大于 2Ti,会执行格式化,导致挂载时间延长。​
  • 使用云盘加密功能时,需注意:​
  • 云盘加密功能仅支持部分机型和地域,详情请参见 云盘加密。​
  • 请确认目标地域、实例机型和云盘类型均已支持加密能力。原则上,启用云盘加密后,集群内所有可用于调度的节点都应具备加密能力。若无法保证所有节点均支持加密,建议通过节点标签隔离资源,并结合调度亲和性进行约束,避免工作负载被调度到不支持加密的节点上。​
通过控制台配置​
步骤一:创建存储类(StorageClass)​
  1. 在左侧导航栏中,选择 集群。单击目标集群名称,进入集群管理页面。​
  1. 在集群管理页面左侧导航栏中,选择 存储管理 > 存储类。​
  1. 单击 创建存储类,在弹出的配置页面中,完成参数配置。​
  • ​​​
  • ​
    配置项​
    说明​
    名称​
    根据系统提示,配置存储类名称。需确保该名称在集群内唯一。​
    存储类型​
    选择存储类型,本场景选择 云盘。​
    可用区​
    可用区是同一地域下电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。​
    计费类型​
    按需选择资源计费类型,目前支持 按量计费。​
    云盘类型​
    选择云盘的类型和性能级别,包括:​
    • 极速型 SSD:高可用、高可靠、弹性扩展的块存储设备。详细的说明及云盘规格对比,请参见 云盘规格。​
    • 配置额外性能:当性能级别选择 FlexPL,且云盘容量大于或等于 500G 时,支持配置云盘的额外性能。允许在不增加云盘容量的情况下,增加云盘性能。详情请参见 极速型SSD FlexPL 云盘。​
    • 配置性能突发:当性能级别选择 FlexPL 时,支持配置云盘的性能突发。允许云盘在短时间内提供超过其基准性能的 I/O 能力,以应对业务高峰或突发流量。​
    说明​
    为 ESSD FlexPL 云盘启用性能突发功能后,云盘会根据实际使用的突发性能收取相应费用。详情请参见 突发性能计费 - ESSD FlexPL 云盘。​
    • 弹性远程盘:高吞吐量、高 IOPS、高性价比的云盘,适用于存储临时数据。详情请参见 弹性远程盘。​
    说明​
    • 不同地域支持的云盘类型可能不同,请以控制台为准。​
    • 不同性能的极速型 SSD 云盘提供的最大 IOPS、最大吞吐量、时延等性能值不同。​
    文件系统类型​
    选择存储数据到云盘时的数据类型。目前支持 EXT4 和 XFS。​
    回收策略​
    回收策略,包括:​
    • Delete:删除 PVC 时,会同步删除云盘存储卷中的数据。​
    • Retain:删除 PVC 时,不会同步删除云盘存储卷中的数据,需要您手动删除。​
    说明​
    如果数据安全性要求高,推荐使用 Retain 方式以免误删数据。​
    存储卷模式绑定​
    绑定模式。包括:​
    • Immediate:随存储卷声明的创建直接完成卷的绑定和分配。​
    • WaitForFirstConsumer:延迟存储卷的绑定和分配,直到使用该存储卷声明的 Pod 被创建。​
    服务端加密​
    是否开启服务端加密功能。开启后,在文件上传/下载时,系统会对文件进行加密/解密。详情请参见 云盘加密。​
    • 密钥类型:选择加密使用的密钥类型,支持 默认密钥 或 自定义密钥。​
    • 密钥 TRN:选择加密使用的 KMS 密钥。​
    高级配置​
    ​
    格式化参数​
    配置云盘格式化参数。仅在云盘首次格式化时有效,不支持动态修改。详情请参见 配置格式化参数。​
    挂载参数​
    配置云盘挂载参数,支持动态修改,仅对新挂载的盘生效,对已挂载的盘不生效。详情请参见 配置挂载参数。​
    ​
  1. 单击 确定,完成配置。​
步骤二:创建存储卷声明(PVC)​
  1. 在集群管理页面左侧导航栏中,选择 存储管理 > 存储卷声明。​
  1. 单击 创建存储卷声明,在弹出的配置页面中,完成参数配置。​
  • ​​​
  • ​
    配置项​
    说明​
    命名空间​
    选择存储卷声明所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述。​
    名称​
    根据系统提示自定义存储卷声明的名称,需确保存储卷声明名称在集群内唯一。​
    存储类型​
    选择存储类型,本场景选择 云盘,即使用云服务器(ECS)提供块存储服务,创建存储类。​
    访问模式​
    选择存储卷声明的访问方式,目前支持 ReadWriteOnce,表示单点读写。​
    计费类型​
    按需选择资源计费类型,目前支持 按量计费。​
    云盘类型​
    选择云盘的类型和性能级别,包括:​
    • 极速型 SSD:高可用、高可靠、弹性扩展的块存储设备。详细的说明及云盘规格对比,请参见 云盘规格。​
    • 弹性远程盘:高吞吐量、高 IOPS、高性价比的云盘,适用于存储临时数据。详情请参见 弹性远程盘。​
    说明​
    • 不同地域支持的云盘类型可能不同,请以控制台为准。​
    • 不同性能的极速型 SSD 云盘提供的最大 IOPS、最大吞吐量、时延等性能值不同。​
    创建方式​
    存储卷声明的创建方式,包括:基于存储类创建、使用已有存储卷。本场景选择 基于存储类创建。​
    存储类​
    选择已创建的存储类。​
    容量​
    配置申请的存储卷容量大小,整数形式,单位为 Gi。不同类型云盘的取值范围不同:​
    • 极速型 SDD(PL0/FlexPL):10~65536。​
    • 弹性远程盘:256 ~16384。​
    ​
  1. 单击 确定,完成配置。​
步骤三:创建应用并挂载存储卷​
云盘类型的动态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。​
可通过创建工作负载或更新工作负载操作的容器配置步骤,为工作负载添加卷并挂载卷。详细操作,请参见 工作负载。​
​alt​​
通过 kubectl 命令行配置​
已经 连接集群 的情况下,可通过 kubectl 命令行使用云盘动态存储卷。​
步骤一:创建存储类(StorageClass)​
  1. 创建 StorageClass 的 YAML 文件。示例文件storage-class-ebs.yaml代码如下:​
  • ​
    ESSD 类型云盘
    TSSD 类型云盘
    RSSD 类型云盘
    ​
    创建极速型云盘(ESSD) 类型的 SC 示例如下:​
    ​
    apiVersion: storage.k8s.io/v1​
    kind: StorageClass​
    metadata:​
    name: storage-class-ebs​
    provisioner: ebs.csi.volcengine.com # 必填,存储挂载依赖的驱动​
    parameters:​
    ChargeType: PostPaid # 必填,计费类型,仅支持 PostPaid,表示按量计费​
    fsType: ext4 # 必填,文件系统类型,目前仅支持 ext4 和 xfs​
    type: ESSD_FlexPL # 必填,云盘类型和性能规格,ESSD 支持 ESSD_PL0 和 ESSD_FlexPL​
    extraPerformanceTypeId: IOPS # 非必填,额外性能类型,取值:IOPS、Balance、Throughput。仅 type 为 ESSD_FlexPL,且云盘容量大于或等于 500G 时生效​
    extraPerformanceIOPS: "1000" # 非必填,额外性能的 IOPS。仅额外性能类型为 IOPS 或 Balance 生效,取值范围 1-50000​
    extraPerformanceThroughputMB: "100" # 非必填,额外性能包的吞吐量。与 extraPerformanceIOPS 参数不同时出现,且额外性能类型为 Throughput 时生效​
    burstEnabled: "true" # 非必填,是否开启性能突发。仅 type 为 ESSD_FlexPL 时生效。取值:true(开启),false(禁用,默认值)​
    mkfsOptions: "-O bigalloc -C 16384" # 非必填,云盘格式化参数,云盘首次格式化时有效,不支持动态修改​
    zone: cn-shanghai-a # 非必填,但建议填写。未填写时,当 Pod 调度到的可用区不支持所选云盘规格时,Pod 将无法正常启动​
    projectName: default # 必填,云盘所属项目​
    tags: tag_key1|tag_val1,tag_key2|tag_val2 # 非必填,自定义云盘标签,标签键和标签值之间用 |分割,多个标签之间用 , 分割​
    encrypted: "true" # 非必填,是否开启云盘加密,取值:true(开启),false(禁用,默认值)​
    kmsKeyId: fe98c63e-84ca-46e8-8301-4ffb1b****** # 自定义密钥时必填,,云盘加密时使用的密钥 ID​
    mountOptions: # 非必填,云盘挂载参数,支持动态修改,仅对新挂载的盘生效,对已挂载的盘不生效​
    - noatime​
    - nodiratime​
    - discard​
    - nobarrier​
    reclaimPolicy: Delete # 必填,回收策略。取值:Retain(保留策略),Delete(删除策略)​
    allowVolumeExpansion: true # 必填,是否支持动态扩容,取值:true(支持动态扩容),false(不支持动态扩容)​
    volumeBindingMode: Immediate # 必填,存储卷的绑定模式,支持 Immediate、WaitForFirstConsumer,多 AZ 场景建议使用 WaitForFirstConsumer​
    ​
    ​
    ​
  • 关键参数说明,如下表所示。​
  • ​
    参数​
    说明​
    provisioner​
    存储卷挂载依赖的驱动,本文中需要配置为 ebs.csi.volcengine.com,表示 csi-ebs 插件。​
    ChargeType​
    计费类型,仅支持 PostPaid,表示按量计费。​
    fsType​
    文件系统类型,支持 ext4 和 xfs。​
    type​
    云盘类型。详细的说明及云盘规格对比,请参见 云盘规格。​
    • 当为 ESSD 云盘时,支持 ESSD_PL0 和 ESSD_FlexPL。​
    • 当为 TSSD 云盘时,支持 TSSD_TL0。​
    • 当为 RSSD 云盘时,支持 RSSD_RL0。​
    extraPerformanceTypeId​
    额外性能类型,可以在不增加云盘容量的情况下,增加云盘性能。​
    • 当为 ESSD 云盘时,支持 IOPS、Balance(均衡型)、Throughput(吞吐量型)。仅当云盘类型为 ESSD_FlexPL,且云盘容量大于或等于 500Gi 时需要配置。不同类型的额外性能,请参见 极速型 SSD FlexPL 云盘。​
    • 当为 TSSD 云盘时,支持 Throughput(吞吐量型)。​
    • 当为 RSSD 云盘时,不支持配置该参数。​
    extraPerformanceIOPS​
    额外性能的 IOPS。仅当额外性能类型为 IOPS 或 Balance 生效,整数形式,单位为次/秒,取值范围 1~50000。​
    extraPerformanceThroughputMB​
    额外性能包的吞吐量。仅当额外性能类型为 Throughput 时生效,整数形式,单位为 MB/s,取值范围 0~650。​
    burstEnabled​
    是否开启云盘性能突发,允许云盘在短时间内提供超过其基准性能的 I/O 能力,以应对业务高峰或突发流量。仅当云盘类型为 ESSD_FlexPL 时生效。取值:​
    • true:启用云盘性能突发。​
    • false:(默认值)禁用云盘性能突发。​
    说明​
    为 ESSD FlexPL 云盘启用性能突发功能后,云盘会根据实际使用的突发性能收取相应费用。详情请参见 突发性能计费 - ESSD FlexPL 云盘。​
    mkfsOptions​
    云盘格式化参数。详情请参见 配置格式化参数。​
    • 仅在云盘首次格式化时有效,不支持动态修改。​
    • 支持配置多个格式化参数,不同参数之间使用空格分割。例如"-O bigalloc -C 16384"。​
    zone​
    云盘所在可用区 ID。详情请参见 地域和可用区。​
    projectName​
    云盘所属项目。从项目维度管理云盘资源的运维、授权等操作。更多项目相关操作和说明,请参见 项目管理。​
    tags​
    自定义云盘标签,标签键和标签值之间用|分割,例如tag_key1|tag_val1。​
    允许配置多个自定义标签,多个标签之间用,分割。​
    encrypted​
    是否开启云盘加密功能,包括:​
    • true:开启云盘加密。开启后,数据盘中的文件将以加密形式存储,防止数据在存储层面被未授权访问,满足数据安全合规要求。​
    • false:(默认值)禁用云盘加密。​
    kmsKeyId​
    配置云盘加密时使用的密钥 ID。​
    • 未配置该参数或取值为空时,表示使用默认密钥。​
    • 自定义密钥时必填,指定加密使用的 KMS 密钥 ID。​
    mountOptions​
    云盘挂载参数,支持动态修改,仅对新挂载的盘生效,对已挂载的盘不生效。详情请参见 配置挂载参数。​
    reclaimPolicy​
    云盘回收策略。取值:​
    • Delete:删除 PVC 时,会同步删除云盘存储卷中的数据。​
    • Retain:删除 PVC 时,不会同步删除云盘存储卷中的数据,需要您手动删除。​
    注意​
    • 如果数据安全性要求高,推荐使用 Retain 方式以免误删数据。​
    • 选择 Delete 回收策略时,删除的数据不可恢复,请根据实际情况谨慎选择。​
    allowVolumeExpansion​
    是否支持动态扩容。取值:​
    • true:启用动态扩容,允许在线扩容 PV 以及对应的云盘文件系统。详情请参见 动态扩容云盘数据卷。​
    • false:禁用动态扩容。​
    volumeBindingMode​
    存储卷的绑定模式。 取值:​
    • Immediate:随存储卷声明的创建直接完成卷的绑定和分配。​
    • WaitForFirstConsumer:延迟存储卷的绑定和分配,直到使用该存储卷声明的 Pod 被创建。​
    ​
  1. 执行以下命令 ,创建 SC。​
  • ​
    kubectl apply -f storage-class-ebs.yaml​
    ​
步骤二:创建存储卷声明(PVC)​
  1. 创建 PVC 的 YAML 文件。示例文件pvc-ebs-dynamic.yaml代码如下:​
  • ​
    apiVersion: v1​
    kind: PersistentVolumeClaim​
    metadata:​
    name: pvc-ebs​
    namespace: default​
    spec:​
    accessModes: # 存储卷访问方式。仅支持 ReadWriteOnce,表示单点读写,需要与 PV 的配置一致​
    - ReadWriteOnce​
    resources:​
    requests:​
    storage: 50Gi # 声明的存储容量,单位为 Gi​
    storageClassName: storage-class-ebs # 已创建的 StorageClass 名称​
    volumeMode: Filesystem # 存储卷类型,取值:Filesystem(将存储卷作为文件系统使用)、Block(将存储卷作为块设备使用)​
    ​
  • 关键参数说明,如下表所示。​
  • ​
    参数​
    说明​
    accessModes​
    存储卷声明的访问方式,仅支持 ReadWriteOnce,表示单点读写。需要与 PV 的配置一致。​
    storage​
    声明的存储容量,单位为 Gi。不同类型云盘的取值范围不同:​
    • TSSD:40~65536。​
    • ESSD(PL0/FlexPL):10~65536。​
    • RSSD:256 ~16384。​
    storageClassName​
    已创建的存储类名称。​
    volumeMode​
    存储卷类型,包括:​
    • Filesystem:(默认值)将存储卷作为文件系统使用。存储卷会被格式化并挂载一个文件系统(如 ext4、xfs),再将该文件系统挂载到容器指定路径。您可以在容器中使用ls命令(例如ls /data)能查看挂载的目录或文件,并可以直接读写文件。​
    • Block:将卷作为块设备使用。直接暴露给容器,不格式化、不挂载文件系统。您可以通过/dev/block/xxx 类似的路径操作块设备,应用需支持裸块设备读写。​
    ​
  1. 执行以下命令,创建 PVC。​
  • ​
    kubectl apply -f pvc-ebs-dynamic.yaml​
    ​
步骤三:创建应用并挂载存储卷​
云盘类型的动态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。下文以有状态负载(StatefulSet)为例。​
  1. 创建 StatefulSet 的 YAML 文件。示例文件statefulset-nginx-dynamic.yaml代码如下:​
  • ​
    apiVersion: v1​
    kind: Service​
    metadata:​
    name: statefulset-demo # Headless Service 名称​
    labels:​
    app: demo​
    spec:​
    ports:​
    - port: 80 ​
    name: web ​
    clusterIP: None # 使用 Headless Service 时,必须为 None​
    selector:​
    app: demo​
    ---​
    apiVersion: apps/v1​
    kind: StatefulSet​
    metadata:​
    name: statefulset-demo​
    namespace: default​
    spec:​
    replicas: 1 # 挂载云盘存储卷时,工作负载副本数必须为 1​
    serviceName: statefulset-demo # Headless Service 名称​
    selector:​
    matchLabels:​
    app: demo​
    template:​
    metadata:​
    labels:​
    app: demo​
    spec:​
    containers:​
    - name: nginx # 容器名称​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0​
    ports:​
    - containerPort: 80​
    name: web​
    volumeMounts:​
    - name: ebs-volume0 # 存储卷名称,需与 volumes.name 字段的配置一致​
    mountPath: /data # 存储卷在容器中挂载的位置​
    volumes:​
    - name: ebs-volume0 # 存储卷名称,支持自定义​
    persistentVolumeClaim:​
    claimName: pvc-ebs # 已创建的 PVC 名称​
    ​
  1. 执行以下命令,创建工作负载。​
  • ​
    kubectl apply -f statefulset-nginx-dynamic.yaml​
    ​
结果验证​
查看存储卷​
配置完成后,系统会自动创建存储卷。您可以登录控制台,查看存储卷的详情。​
  1. 在集群管理页面左侧导航栏中,选择 存储管理 > 存储卷。查看自动生成的存储卷。其中pvc-a886***为系统自动创建的云盘名称。​
  • ​​​
  1. 在左侧导航栏中,选择 存储 > 云盘。在云盘列表中找到目标云盘(名称格式为pvc-a886***)。​
  1. 单击云盘名称,进入云盘详情,即可查看该云盘的详细信息。​
  • ​​​
云盘挂载验证​
按照上文示例创建工作负载并挂载存储卷后,您可以通过以下方式验证云盘的挂载和持久化存储。​
  1. 执行以下命令,查看存储卷是否正确挂载到 Pod 的指定路径。​
  • ​
    kubectl exec pod-demo-0 -- df | grep data​
    ​
  • 预期返回结果如下。​
  • ​
    /dev/vdc 20466256 24 20449848 1% /data​
    ​
  1. 查看 Pod 中的挂载路径,即查看存储卷中的数据。​
  • ​
    kubectl exec pod-demo-0 -- ls /data​
    ​
  • 预期返回结果如下。​
  • ​
    lost+found​
    ​
  1. 在存储卷中写入文件。​
  • ​
    kubectl exec pod-demo-0 -- touch /data/test​
    ​
  1. 删除 Pod。​
  • ​
    kubectl delete pod pod-demo-0​
    ​
说明​
删除工作负载中的 Pod 后,系统会自动创建一个新的 Pod。并且名称不变。​
  1. 查看新创建 Pod 下的存储卷挂载路径。​
  • ​
    kubectl exec pod-demo-0 -- ls /data​
    ​
  • 预期返回如下,可以看到存储卷中写入的文件依然存在,未随着 Pod 的删除而被删除,实现了数据的持久化存储。​
  • ​
    lost+found ​
    test​
    ​
相关文档​
​
最近更新时间:2026.10.12 15:27:19
这个页面对您有帮助吗?
有用
有用
无用
无用