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

容器服务

复制全文
下载 pdf
云盘存储(EBS)
使用云盘静态存储卷
复制全文
下载 pdf
使用云盘静态存储卷
云盘,即弹性块存储 EBS(Elastic Block Storage),是一种高可用、高可靠、高性能、弹性扩展的块存储设备,支持作为容器服务的扩展存储使用。本文介绍如何创建云盘类型的静态存储卷,以及工作负载如何挂载并使用云盘静态存储卷。​
前提条件​
  • 已安装 csi-ebs 组件。详情请参见 安装组件。​
  • 已创建未挂载到 ECS 实例的云盘。详情请参见 创建云盘。​
  • 如需配置云盘格式化参数,需将 csi-ebs 组件升级至 v1.3.0 及以上版本。详情请参见 升级组件。​
  • (可选)若使用 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,会执行格式化,导致挂载时间延长。​
通过控制台配置​
步骤一:创建存储卷(PV)​
  1. 在左侧导航栏中,选择 集群。单击目标集群名称,进入集群管理页面。​
  1. 在集群管理页面左侧导航栏中,选择 存储管理 > 存储卷。​
  1. 单击 创建存储卷,在弹出的配置页面中,完成参数配置。​
  • ​​​
  • ​
    配置项​
    说明​
    创建方式​
    选择存储卷的创建方式,目前支持 静态创建,即由管理员创建 PV。​
    名称​
    根据系统提示,配置存储卷名称。需确保该名称在集群内唯一。​
    存储卷类型​
    选择存储类型,本场景中选择 云盘。​
    访问模式​
    选择存储卷的访问方式,目前支持 ReadWriteOnce,表示单点读写。​
    云盘类型​
    选择云盘的类型和性能级别,包括:​
    • 极速型 SSD:高可用、高可靠、弹性扩展的块存储设备。详细的说明及云盘规格对比,请参见 云盘规格。​
    • 弹性远程盘:高吞吐量、高 IOPS、高性价比的云盘,适用于存储临时数据。详情请参见 弹性远程盘。​
    说明​
    • 不同地域支持的云盘类型可能不同,请以控制台为准。​
    • 不同性能的极速型 SSD 云盘提供的最大 IOPS、最大吞吐量、时延等性能值不同。​
    服务端加密​
    是否开启服务端加密功能。开启后,在文件上传/下载时,系统会对文件进行加密/解密,保护数据安全。详情请参见 云盘加密。​
    云盘​
    选择与集群属于相同地域和可用区,且处于待挂载状态的云盘。​
    注意​
    请确保所选的云盘所在节点,其已挂载的云盘数量不超过 10 个。否则该存储卷挂载到工作负载后,不能成功启动 Pod。​
    文件系统类型​
    选择存储数据到云盘时的数据类型。目前支持 EXT4 和 XFS。​
    高级配置​
    ​
    格式化参数​
    配置云盘格式化参数。仅在云盘首次格式化时有效,不支持动态修改。详情请参见 配置格式化参数。​
    挂载参数​
    配置云盘挂载参数,支持动态修改,仅对新挂载的盘生效,对已挂载的盘不生效。详情请参见 配置挂载参数。​
    ​
  1. 单击 确定,完成配置。​
步骤二:创建存储卷声明(PVC)​
  1. 在集群管理页面左侧导航栏中,选择 存储管理 > 存储卷声明。​
  1. 单击 创建存储卷声明,在弹出的配置页面中,完成参数配置。​
  • ​​​
  • ​
    配置项​
    说明​
    命名空间​
    选择存储卷声明所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述。​
    名称​
    根据系统提示自定义存储卷声明的名称,需确保存储卷声明名称在集群内唯一。​
    存储类型​
    选择存储类型,本场景选择 云盘。​
    访问模式​
    选择存储卷声明的访问方式,目前支持 ReadWriteOnce,表示单点读写。​
    计费类型​
    按需选择资源计费类型,目前支持 按量计费。​
    云盘类型​
    选择云盘的类型和性能级别,包括:​
    • 极速型 SSD:高可用、高可靠、弹性扩展的块存储设备。详细的说明及云盘规格对比,请参见 云盘规格。​
    • 弹性远程盘:高吞吐量、高 IOPS、高性价比的云盘,适用于存储临时数据。详情请参见 弹性远程盘。​
    说明​
    • 不同地域支持的云盘类型可能不同,请以控制台为准。​
    • 不同性能的极速型 SSD 云盘提供的最大 IOPS、最大吞吐量、时延等性能值不同。​
    创建方式​
    配置存储卷声明的创建方式,支持:基于存储类创建、使用已有存储卷。本场景选择 使用已有存储卷。​
    存储卷​
    选择本文上方步骤中创建的存储卷进行关联挂载。​
    ​
  1. 单击 确定,完成配置。​
步骤三:创建应用并挂载存储卷​
云盘类型的静态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。​
可通过创建工作负载或更新工作负载操作的容器配置步骤,为工作负载添加卷并挂载卷。详细操作,请参见 工作负载。​
​​​
通过 kubectl 命令行配置​
已经 连接集群 的情况下,可通过 kubectl 命令行使用云盘静态存储卷。​
步骤一:创建存储卷(PV)​
  1. 创建 PV 的 YAML 文件。示例文件pv-ebs-static.yaml代码如下:​
  • ​
    ESSD 类型云盘
    TSSD 类型云盘
    RSSD 类型云盘
    ​
    创建极速型云盘(ESSD) 类型的 PV 示例如下:​
    ​
    apiVersion: v1​
    kind: PersistentVolume​
    metadata:​
    name: pv-ebs-static​
    spec:​
    accessModes: # 必填,存储卷访问方式。仅支持 ReadWriteOnce,表示单点读写​
    - ReadWriteOnce ​
    capacity:​
    storage: 20Gi # 必填,存储卷容量,单位为 Gi。需要与已创建的云盘容量一致​
    csi:​
    driver: ebs.csi.volcengine.com # 必填,存储挂载依赖的驱动​
    fsType: ext4 # 必填,文件系统类型,取值:ext4 和 xfs​
    volumeAttributes:​
    ChargeType: PostPaid # 必填,计费类型,仅支持 PostPaid,表示按量计费​
    type: ESSD_FlexPL # 必填,云盘类型和性能规格,ESSD 支持 ESSD_PL0、ESSD_FlexPL​
    extraPerformanceTypeId: IOPS # 非必填,额外性能类型,取值:IOPS、Balance、Throughput。仅当云盘类型为 ESSD_FlexPL,且云盘容量大于或等于 500G 时生效​
    extraPerformanceIOPS: "1000" # 非必填,额外性能的 IOPS。仅当额外性能类型为 IOPS 或 Balance 生效,取值范围 1-50000​
    extraPerformanceThroughputMB: "100" # 非必填,额外性能包的吞吐量。仅当额外性能类型为 Throughput 生效​
    mkfsOptions: "-O bigalloc -C 16384" # 非必填,云盘格式化参数,云盘首次格式化时有效,不支持动态修改​
    zone: cn-shanghai-a # 必填,已创建云盘所在可用区​
    encrypted: "true" # 非必填,是否开启云盘加密功能,取值:true(开启),false(禁用,默认值)​
    kmsKeyId: fe98c63e-84ca-46e8-8301-4ffb1b****** # 仅 encrypted 为 true 时有效,自定义密钥时必填,并需要与云盘实际配置的密钥 ID 一致。当未配置时,表示使用默认密钥​
    volumeHandle: vol-cmukmy9yi5bi254b**** # 必填,已创建的云盘 ID​
    mountOptions: # 非必填,云盘挂载参数,支持动态修改,仅对新挂载的盘生效,对已挂载的盘不生效​
    - noatime​
    - nodiratime​
    - discard​
    - nobarrier​
    volumeMode: Filesystem # 必填,存储卷类型,取值:Filesystem(将存储卷作为文件系统使用)、Block(将存储卷作为块设备使用)​
    ​
    ​
    ​
  • 关键参数说明,如下表所示。​
  • ​
    参数​
    说明​
    accessModes​
    存储卷访问方式,仅支持 ReadWriteOnce,表示单点读写。​
    storage​
    存储卷容量,单位为 Gi,需要与已创建的云盘容量一致。​
    driver​
    存储卷挂载依赖的驱动,本文中需要配置为 ebs.csi.volcengine.com,表示 csi-ebs 插件。​
    fsType​
    文件系统类型,支持 ext4 和 xfs。​
    ChargeType​
    计费类型,仅支持 PostPaid,表示按量计费。​
    type​
    云盘类型。详细的说明及云盘规格对比,请参见 云盘规格。​
    • 当为 ESSD 云盘时,支持 ESSD_PL0 和 ESSD_FlexPL。​
    • 当为 TSSD 云盘时,支持 TSSD_TL0。​
    • 当为 RSSD 云盘时,支持 RSSD_RL0。​
    extraPerformanceTypeId​
    额外性能类型,可以在不增加云盘容量的情况下,增加云盘性能。​
    • 当为 ESSD 云盘时,支持 IOPS、Balance(均衡型)、Throughput(吞吐量型)。仅 type 为 ESSD_FlexPL,且云盘容量大于或等于 500G 时生效。不同类型的额外性能,请参见 极速型 SSD FlexPL 云盘。​
    • 当为 TSSD 云盘时,支持 Throughput(吞吐量型)。仅云盘容量大于或等于 100G 时生效。​
    • 当为 RSSD 云盘时,不支持配置该参数。​
    extraPerformanceIOPS​
    额外性能的 IOPS。仅当额外性能类型为 IOPS 或 Balance 生效,整数形式,单位为次/秒,取值范围 1~50000。​
    extraPerformanceThroughputMB​
    额外性能包的吞吐量。仅当额外性能类型为 Throughput 时生效,整数形式,单位为 MB/s,取值范围 0~650。​
    mkfsOptions​
    云盘格式化参数。详情请参见 配置格式化参数。​
    • 仅在云盘首次格式化时有效,不支持动态修改。​
    • 支持配置多个格式化参数,不同参数之间使用空格分割。例如"-O bigalloc -C 16384"。​
    zone​
    云盘所在可用区 ID。详情请参见 地域和可用区。​
    encrypted​
    是否开启云盘加密功能,包括:​
    • true:开启云盘加密。开启后,数据盘中的文件将以加密形式存储,防止数据在存储层面被未授权访问,满足数据安全合规要求。​
    • false:(默认值)禁用云盘加密。​
    kmsKeyId​
    配置云盘加密时使用的 KMS 密钥 ID,该配置需要与云盘实际配置的密钥 ID 一致。​
    • 仅encrypted为true时有效。​
    • 自定义密钥时必填,指定加密使用的 KMS 密钥 ID。​
    • 未配置时,表示使用默认密钥。​
    volumeHandle​
    已创建的云盘 ID。​
    mountOptions​
    云盘挂载参数,支持动态修改,仅对新挂载的盘生效,对已挂载的盘不生效。详情请参见 配置挂载参数。​
    volumeMode​
    存储卷类型,包括:​
    • Filesystem:(默认值)将存储卷作为文件系统使用。存储卷会被格式化并挂载一个文件系统(如 ext4、xfs),再将该文件系统挂载到容器指定路径。您可以在容器中使用ls命令(例如ls /data)能查看挂载的目录或文件,并可以直接读写文件。​
    • Block:将存储卷作为块设备使用。直接暴露给容器,不格式化、不挂载文件系统。您可以通过/dev/block/xxx 类似的路径操作块设备,应用需支持裸块设备读写。​
    ​
  1. 执行以下命令,创建 PV。​
  • ​
    kubectl apply -f pv-ebs-static.yaml​
    ​
步骤二:创建存储卷声明(PVC)​
  1. 创建 PVC 的 YAML 文件。示例文件pvc-ebs-static.yaml的代码如下:​
  • ​
    apiVersion: v1​
    kind: PersistentVolumeClaim​
    metadata:​
    name: pvc-ebs-static​
    namespace: default​
    spec:​
    accessModes: # 存储卷访问方式。仅支持 ReadWriteOnce,表示单点读写,需要与 PV 的配置一致​
    - ReadWriteOnce​
    resources:​
    requests:​
    storage: 20Gi # 声明的存储容量,单位为 Gi,需要与已创建的云盘容量一致​
    volumeMode: Filesystem # 存储卷类型,取值:Filesystem(将存储卷作为文件系统使用)、Block(将存储卷作为块设备使用),必须与 PV 中配置的类型一致​
    volumeName: pv-ebs-static # 已创建的 PV 名称​
    ​
  • 关键参数说明,如下表所示。​
  • ​
    参数​
    说明​
    accessModes​
    存储卷访问方式,仅支持 ReadWriteOnce,表示单点读写。需要与 PV 的配置一致。​
    storage​
    声明的存储容量,单位为 Gi,需要与已创建的云盘容量一致。​
    volumeMode​
    存储卷类型,必须与 PV 中配置的类型一致。包括:​
    • Filesystem:(默认值)将存储卷作为文件系统使用。存储卷会被格式化并挂载一个文件系统(如 ext4、xfs),再将该文件系统挂载到容器指定路径。您可以在容器中使用ls命令(例如ls /data)能查看挂载的目录或文件,并可以直接读写文件。​
    • Block:将卷作为块设备使用。直接暴露给容器,不格式化、不挂载文件系统。您可以通过/dev/block/xxx 类似的路径操作块设备,应用需支持裸块设备读写。​
    volumeName​
    存储卷名称,必须与 PV 中配置的名称一致。​
    ​
  1. 执行以下命令,创建 PVC。​
  • ​
    kubectl apply -f pvc-ebs-static.yaml​
    ​
步骤三:创建应用并挂载存储卷​
云盘类型的静态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。下文以有状态负载(StatefulSet)为例。​
  1. 创建 StatefulSet 的 YAML 文件。示例文件statefulset-nginx-static.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: pod-demo # 容器名称​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0​
    ports:​
    - containerPort: 80​
    name: port​
    volumeMounts:​
    - name: pod-volume0 # 存储卷名称,需与 volumes.name 字段的配置一致​
    mountPath: /data # 存储卷在容器中挂载的位置​
    volumes:​
    - name: pod-volume0 # 存储卷名称,支持自定义​
    persistentVolumeClaim:​
    claimName: pvc-ebs-static # 已创建的 PVC 名称​
    affinity:​
    nodeAffinity:​
    requiredDuringSchedulingIgnoredDuringExecution:​
    nodeSelectorTerms:​
    - matchExpressions:​
    - key: topology.kubernetes.io/zone​
    operator: In​
    values:​
    - cn-beijing-a # (可选)使用亲和性配置,指定云盘所在可用区,保证 Pod 和云盘在相同可用区​
    ​
  1. 执行以下命令,创建工作负载。​
  • ​
    kubectl apply -f statefulset-nginx-static.yaml​
    ​
结果验证​
按照上文示例创建工作负载并挂载存储卷后,您可以通过以下方式验证云盘的挂载和持久化存储。​
  1. 执行以下命令,查看存储卷是否正确挂载到 Pod 的指定路径。​
  • ​
    kubectl exec pod-demo-0 -- df | grep data​
    ​
  • 预期返回结果如下。​
  • ​
    /dev/vdc 20466256 24 20449848 1% /data​
    ​
  1. 查看 Pod 中的挂载路径,即查看存储卷中的数据。​
  • ​
    kubectl exec statefulset-demo-0 -- ls /data​
    ​
  • 预期返回结果如下。​
  • ​
    lost+found​
    ​
  1. 在存储卷中写入文件。​
  • ​
    kubectl exec statefulset-demo-0 -- touch /data/test​
    ​
  1. 删除 Pod。​
  • ​
    kubectl delete pod statefulset-demo-0​
    ​
说明​
删除工作负载中的 Pod 后,系统会自动创建一个新的 Pod。并且名称不变。​
  1. 查看新创建 Pod 下的存储卷挂载路径。​
  • ​
    kubectl exec statefulset-demo-0 -- ls /data​
    ​
  • 预期返回如下,可以看到存储卷中写入的文件依然存在,未随着 Pod 的删除而被删除,实现了数据的持久化存储。​
  • ​
    lost+found ​
    test​
    ​
相关文档​
​
最近更新时间:2026.09.01 20:15:26
这个页面对您有帮助吗?
有用
有用
无用
无用