You need to enable JavaScript to run this app.
导航
通过临时卷方式使用本地存储 LVM 卷
最近更新时间:2024.08.26 16:34:40首次发布时间:2024.08.26 16:34:40

容器服务支持通过 CSI 使用本地存储,本文为您介绍如何通过临时卷方式使用本地存储 LVM 卷。

说明

邀测·申请试用】本地存储相关的 csi-local 组件存储感知调度 功能目前均处于邀测阶段,如需使用,请提交申请。

前提条件

  • 已经创建 Kubernetes 版本符合要求的容器集群,详细介绍参见:创建集群
  • 目前支持通过 kubectl 命令行使用,需确保本地已经将安装 kubectl 工具。详细操作参见:安装和设置 kubectl

使用限制

  • 确保使用极速型 SSD 数据盘挂载到容器、镜像存储目录 /var/lib/containerd/var/lib/kubelet避免使用本地盘挂载到容器、镜像存储目录,否则,将不适用本地存储使用场景。
  • 本场景依赖的 3 个组件的安装和卸载存在顺序要求,务必根据推荐的顺序进行安装或卸载,否则将影响正常调度功能
  • 确保容器集群的 Kubernetes 版本符合要求,支持 v1.24.15-vke.34 及以上版本的 1.24 集群、v1.26.10-vke.22 及以上版本的 1.26 集群、v1.28.3-vke.16 及以上版本的 1.28 集群。
  • 本地存储并非高可用存储卷,只适用于一些临时数据的保存及应用自带高可用的场景。
  • LVM 类型的本地存储卷,不支持数据的跨节点迁移,不适合在高可用场景中使用。

操作步骤

步骤一:安装和配置依赖组件

使用本地存储需要依赖 3 个组件,请参考以下顺序依次安装和配置。

警告

  • csi-local 组件依赖 snapshot-controller 组件,安装 csi-local 组件前确认 snapshot-controller 组件已安装。
  • csi-local 组件必须与 scheduler-plugin 组件中的存储感知调度功能结合使用,开启存储感知调度功能前,请确保 snapshot-controller 和 csi-local 组件均已安装,否则会影响正常调度。
  • 如需卸载 csi-local 组件,请关闭 scheduler-plugin 组件中的存储感知调度功能后再执行卸载操作,否则会影响正常调度。
  1. 登录 容器服务控制台
  2. 在左侧导航栏中选择 集群,单击需要配置的目标集群。
  3. 在集群管理页面的左侧导航栏中,选择 组件管理
  4. 单击组件右上角的 ... > 安装,依次安装 snapshot-controllercsi-local 组件。

alt

  1. 单击 scheduler-plugin 组件右侧 配置 按钮,在配置弹窗中勾选存储感知调度配置项的 本地存储

alt

配置项说明

存储感知调度

目前支持本地存储,默认关闭,勾选即表示开启本地存储的存储感知调度功能,开启后可根据节点所具有的存储资源进行调度。

说明

需要安装相应存储 CSI 组件才可以生效,本场景已经安装 csi-local 组件。

步骤二:配置本地盘类型的节点池

创建挂载本地盘的节点池或使用已有节点池,并配置节点池相关信息。本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:创建节点池创建托管节点池

alt

alt

配置项说明

数据盘

容器、镜像存储目录
使用极速型 SSD 数据盘挂载到容器、镜像存储目录 /var/lib/containerd/var/lib/kubelet

警告

避免使用本地盘挂载到容器、镜像存储目录,否则,将不适用本地存储使用场景。

其他数据盘
本地数据盘支持 SSD 和 HDD 类型,可根据实际需求选择,不同实例规格支持的本地盘类型及其详细介绍参见:本地盘

节点标签自定义配置节点标签,后续初始化本地盘,组 VG 时用于筛选节点,例如:csi-local: "i2-2xlarge"

步骤三:初始化本地盘

初始化环节,需要根据实际需求组 VolumeGroup(VG),目前支持使用 CRD 自定义组 VolumeGroup(VG)。csi-local 组件安装成功后,将自动创建本地存储相关 CRD,根据实际需求创建 CR 即可。

alt

本场景以 ecs.i2.2xlarge 机型为例,存在一块 3.5T 的 SSD 盘 /dev/nvme0n1,并已经为该机型节点打上标签 csi-local: "i2-2xlarge"

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击需要配置的目标集群。
  4. 在集群管理页面的左侧导航栏中,单击 工作负载 > 对象浏览器
  5. 单击 NodeLocalStorageInitConfig 名称,前往 CRD 详情页。
  6. 单击 使用 Yaml 新建 ,在配置页面选择 自定义 类型并输入已经准备好的 Yaml,完成后单击 确定

alt

本场景使用的 Yaml 如下,实际使用场景可根据实际需求更新配置。

apiVersion: csi.volcengine.com/v1alpha1
kind: NodeLocalStorageInitConfig
metadata:
  name: csi-local
spec:
  globalConfig:        # 全局默认节点配置。
    listConfig:
      devices: {}
      mountPoints: {}
      vgs: {}
    resourceToBeInited: {}
    spdkConfig: {}
  nodesConfig:         # 按 Label 筛选的节点池级别配置。
    - selector:        # 筛选规则。
        matchLabels:
          csi-local: "i2-2xlarge"     # 筛选节点的 Lable。
      listConfig:                     # 可被 csi-local 分配的存储设备列表。
        mountPoints: {}
        vgs:                    # LVM(共享盘)黑白名单,此处的共享盘名称指 VolumeGroup 名称。
          include:
            - csi-local-pool-[0-9]+
      resourceToBeInited:      # 设备初始化列表。
        vgs:                   # LVM(共享盘)初始化。
          - devices:           # 将块设备 /dev/nvme0n1 初始化为名为 csi-local-pool-0 的 VolumeGroup。注意:若当节点上包含同名 VG,则 csi-local 不做操作。
              - /dev/nvme0n1
            name: csi-local-pool-0
      spdkConfig: {}
  1. 等待 1 分钟左右,参考如下命令查看对应节点的 nls CR,能够查询到 VG 信息表示初始化成功。
❯ kubectl get nls 192.168.2.6 -oyaml

apiVersion: csi.volcengine.com/v1alpha1
kind: NodeLocalStorage
metadata:
  creationTimestamp: "2024-07-17T08:52:03Z"
  generation: 1
  name: 192.168.2.6
  resourceVersion: "30819"
  uid: 129012df-d9b2-41f1-bb5f-0d86fc15baf3
spec:
  listConfig:
    devices:
      include:
      - /dev/vdc
    mountPoints: {}
    vgs:
      include:
      - csi-local-pool-[0-9]+
  nodeName: 192.168.2.6
  resourceToBeInited:
    vgs:
    - devices:
      - /dev/nvme0n1
      name: csi-local-pool-0
  spdkConfig: {}
status:
  filteredStorageInfo:
    updateStatusInfo:
      lastUpdateTime: "2024-07-17T09:51:24Z"
      updateStatus: accepted
    volumeGroups:
    - csi-local-pool-0
  nodeStorageInfo:
    volumeGroups:                      # VolumeGroup 初始化成功,可查看 VG 相关信息。
    - allocatable: 3840753532928
      available: 3840753532928
      condition: DiskReady
      name: csi-local-pool-0
      physicalVolumes:
      - /dev/nvme0n1
      total: 3840753532928

步骤四:通过临时卷方式使用 LVM 卷

本场景以创建 Deployment Pod 为例,介绍如何通过临时卷方式使用 LVM 卷。

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 选择 工作负载 > 无状态负载
  4. 单击 使用 YAML 创建,在配置页面选择 Deployment 类型并输入已经准备好的 Yaml,完成后单击 确定

Yaml 示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: file-server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: file-server
  template:
    metadata:
      labels:
        app: file-server
    spec:
      containers:
      - name: file-server
        image: nginx:latest
        volumeMounts:
          - mountPath: /srv
            name: webroot
      volumes:
        - name: webroot
          csi:
            driver: local.csi.volcengine.com
            fsType: ext4                  # 此处指定文件系统,可为 ext4、xfs。
            volumeAttributes:
              vgName: csi-local-pool-0    # 【必填】临时卷所用的 VG。
              size: 10Gi                  # 【选填】临时卷大小,留空不配置默认为 1Gi。

后续操作

  • Pod 运行成功后,可前往节点上运行 lsblk、lvs,显示 lv 已被创建并被挂载。

alt

  • 删除 Deployment,Pod 成功删除后,对应 lv 将被自动回收。

alt