You need to enable JavaScript to run this app.
导航
使用云盘动态存储卷
最近更新时间:2024.11.19 19:55:13首次发布时间:2022.03.04 23:10:39

本文介绍如何创建云盘类型存储类和存储卷声明,以及工作负载如何使用云盘动态存储卷。

前提条件

  • 已创建容器服务集群,操作方法参见 创建集群
  • 确保当前集群已安装存储服务组件 csi-ebs。操作方法,请参见 安装组件

使用限制

  • 包年包月类型的云盘,暂不支持挂载、卸载操作,请勿将云盘计费类型改为包年包月。
  • 云盘为火山存储团队提供的非共享存储,只能同时被一个 Pod 挂载,仅支持 ReadWriteOnce 使用模式。
  • 有状态负载每个实例需要独占一个卷,不支持所有实例共用一个手动创建的存储卷声明。
  • 无状态负载(Deployment)挂载云盘时 Replica 需要配置为 1,无法为每个 Pod 配置独立的存储卷,且不能保证挂载、卸载的优先顺序。另外,无状态负载(Deployment)的升级策略,重启 Pod 时新的 Pod 可能一直无法挂载,因此,推荐使用有状态应用(StatefulSet)挂载使用云盘。
  • 当 csi-ebs 组件版本低于 v1.1.2 时,不支持使用三代机(例如:g3i、c3i、r3i 等)。若存在三代机使用需求,需确保 csi-ebs 组件不低于 v1.1.2 版本,推荐定期升级组件到最新版本,更多组件发布记录参见:csi-ebs 组件发布记录
  • 每个节点最多可挂载云盘数量由 ECS 机型决定,容器服务侧会预留 30% 给系统盘和数据盘,例如:ECS 实例最多允许挂 16 块云盘时,容器服务侧最多允许挂载 16-0.3*16=12 块 EBS PVC。ECS 实例规格族更多介绍参见:实例规格介绍
  • 云盘类型和ECS类型需要匹配才可以挂载,否则会挂载失败,云盘类型与 ECS 类型的匹配关系参见:实例规格介绍。此外,云盘只能挂载到相同可用区的 ECS 实例,不支持跨可用区挂载。
  • 使用云盘存储卷时,若在应用模板中配置了 securityContext.fsgroup 参数,kubelet 在存储卷挂载完成后会执行chmodchown操作,导致挂载时间延长。

通过控制台使用

使用云盘类型动态存储卷的详细操作步骤和参数配置如下:

步骤一:登录集群管理页面

  1. 登录 容器服务控制台
  2. 在容器服务的左侧导航栏,选择 集群
  3. 单击目标集群名称,进入集群管理页面。

步骤二:创建存储类(StorageClass)

  1. 在集群管理页面,选择 存储管理 > 存储类
  2. 单击存储类列表左上角 创建存储类
  3. 在弹出的 创建存储类 页面,完成参数配置。
    alt
    配置项说明
    名称根据系统提示,自定义存储类名称,需确保存储类名称在集群内唯一。
    存储类型存储类型包括:云盘、文件存储。本场景选择 云盘,即使用云服务器(ECS)提供块存储服务,创建存储类。

    可用区

    可用区是同一地域下电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。更多可用区说明,请参见 地域和可用区
    跨可用区集群可以指定可用区创建数据云盘。

    计费类型按需选择资源计费类型,目前支持按量计费。

    云盘类型

    目前支持的云盘类型包括:极速型 SSD,可根据实际场景选择云盘的性能级别和额外性能包。

    • 性能级别:根据实际场景选择性能级别,目前支持 FlexPL 和 PL0。不同性能的极速型 SSD 云盘提供的最大 IOPS、最大吞吐量、时延等性能值不同,更多详细介绍参见:云盘规格

    • 配置额外性能:FlexPL 性能级别且容量在 500 GiB 以上数据盘支持配置额外性能。开启性能包后,可根据实际需求配置性能类型和 IOPS,性能包相关更多详细介绍参见:云盘额外性能

    说明

    配置额外性能将产生额外费用,详细说明参见:云盘额外性能计费

    回收策略

    云盘的回收策略,包括:Delete、Retain。如果数据安全性要求高,推荐使用 Retain 方式以免误删数据。

    • Delete:删除PVC的时候,PV和云盘会一起删除。
    • Retain:删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。

    存储卷模式绑定

    云盘的绑定模式。包括:

    • Immediate:随存储卷声明的创建直接完成卷的绑定和分配。
    • WaitForFirstConsumer:延迟存储卷的绑定和分配,直到使用该存储卷声明的 Pod 被创建。
  4. 配置完成后,单击 确定,完成存储类创建。

步骤三:创建存储卷声明(PVC)

  1. 在集群管理页面,选择 存储管理 > 存储卷声明
  2. 单击存储卷列表左上角 创建存储卷声明
  3. 在弹出的 创建存储卷声明 页面,完成参数配置。其中,存储类型选择 云盘
    alt
    配置项说明
    命名空间选择存储卷声明所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述
    名称根据系统提示自定义存储卷声明的名称,需确保存储卷声明名称在集群内唯一。
    存储类型存储类型包括:云盘、文件存储、对象存储。本场景选择 云盘
    访问模式选择存储卷声明的访问方式,目前支持 ReadWriteOnce ,此访问方式支持单点读写。
    计费类型按需选择资源计费类型,目前支持按量计费。

    云盘类型

    不同地域支持的云盘类型可能不同,请按需使用。目前支持 极速型 SSD 两种云盘类型。详细的说明及云盘规格对比,请参见 云盘规格

    说明

    不同性能的极速型 SSD 云盘提供的最大 IOPS、最大吞吐量、时延等性能值不同。

    创建方式存储卷声明的创建方式包括:基于存储类创建、使用已有存储卷。本场景选择 基于存储类创建
    存储类自动绑定具有相同存储类,且容量大于或等于当前 PVC 设置的容量大小的存储卷。
    容量所创建存储卷容量。
  4. 配置完成后,单击 确定,完成存储卷声明创建。

步骤四:工作负载添加卷

云盘类型的动态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。
可通过创建工作负载或更新工作负载操作的容器配置步骤,为工作负载添加卷并挂载卷。详细操作,请参见 工作负载

alt

通过 kubectl 命令行使用

准备工作

步骤一:创建 StorageClass

  1. 创建 StorageClass 的 YAML 文件。示例文件storage-class-ebs-essd.yaml代码如下:

    说明

    当前支持 ESSD_PL0、ESSD_FlexPL 两种云盘类型。详细的说明及云盘规格对比,请参见 云盘规格

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ebs-essd-immd-cn-beijing-a
    parameters:
      ChargeType: PostPaid
      type: ESSD_PL0                          # 云盘类型,云盘的名称必须大写。包括:ESSD_PL0、ESSD_FlexPL。
      ExtraPerformanceType: IOPS              # 额外性能类型,包括:IOPS、Balance、Throughput。仅 type 为 ESSD_FlexPL,且云盘容量大于 500 时间生效。
      ExtraPerformanceIOPS: 1000              # 额外性能的 IOPS。仅额外性能类型为 IOPS 或 Balance 生效,取值范围 1-50000。
      ExtraPerformanceThroughputMB: 100       # 额外性能包的吞吐量。与 ExtraPerformanceIOPS 参数不同时出现,且额外性能类型为 Throughput 时生效。
      zone: cn-beijing-a
      projectName: default
    provisioner: ebs.csi.volcengine.com
    reclaimPolicy: Delete
    volumeBindingMode: Immediate  #多 AZ 场景建议使用 Topology
    
  2. 执行以下命令创建 StorageClass。

    kubectl apply -f storage-class-ebs-essd.yaml
    

步骤二:创建 PVC

  1. 创建 PVC 的 YAML 文件。示例文件pvc-ebs-essd-dynamic.yaml代码如下:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-ebs-essd
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      storageClassName: ebs-essd-immd-cn-beijing-a  #步骤一中创建的 StorageClass 名称
      volumeMode: Filesystem
    
  2. 执行以下命令创建 PVC。

    kubectl apply -f pvc-ebs-essd-dynamic.yaml
    

步骤三:创建 Deployment

  1. 创建 Deployment 的 YAML 文件。示例文件deployment-nginx-dynamic.yaml代码如下:

    说明

    如果有使用弹性容器实例 VCI 的需求,需要在代码的spec.template.metadata.annotations中添加vke.volcengine.com/burst-to-vci: enforce`。VCI 具备全托管免运维、按需付费、沙箱容器安全隔离等优势。详细介绍,请参见 什么是弹性容器实例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-nginx-dynamic
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          annotations:
          # vke.volcengine.com/burst-to-vci: enforce  # 强制使用 VCI,如果有 VCI 需求需要添加本行注解
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx-c1
            image: cr-cn-beijing.volces.com/****/vci-demo-nginx:latest #指定需要部署的镜像文件
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: ebs-essd-volume0
              mountPath: /data
          volumes:
            - name: ebs-essd-volume0
              persistentVolumeClaim:
                claimName: pvc-ebs-essd  #步骤二中创建的 PVC 名称
    
  2. 执行以下命令创建 Deployment。

    kubectl apply -f deployment-nginx-dynamic.yaml
    

相关文档