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

容器服务

复制全文
下载 pdf
本地存储卷
通过临时卷方式使用本地存储 LVM 卷
复制全文
下载 pdf
通过临时卷方式使用本地存储 LVM 卷
容器服务支持通过 CSI 使用本地存储,本文为您介绍如何通过临时卷方式使用本地存储 LVM 卷。
说明
邀测·申请试用】本地存储相关的 csi-local 组件存储感知调度 功能目前均处于邀测阶段,如需使用,请提交申请。
使用限制
  • 需使用极速型 SSD 数据盘挂载到容器、镜像存储目录 /var/lib/containerd/var/lib/kubelet避免使用本地盘挂载到容器、镜像存储目录,否则,将不适用本地存储使用场景。
  • 本场景依赖 3 个组件的安装和卸载存在顺序要求,请严格遵循下文介绍的顺序进行安装或卸载,否则将影响正常调度功能
  • 集群的 Kubernetes 版本要求:
  • 本地存储并非高可用存储卷,只适用于一些临时数据的保存及应用自带高可用的场景。
  • LVM 类型的本地存储卷,不支持数据的跨节点迁移,不适合在高可用场景中使用。
前提条件
  • 已创建 Kubernetes 版本符合要求的容器集群。详情请参见 创建集群
操作步骤
步骤一:安装和配置组件
使用本地存储需要依赖如下组件,请参考以下顺序依次安装和配置。
警告
  • csi-local 组件依赖 snapshot-controller 组件,安装 csi-local 组件前确认 snapshot-controller 组件已安装。
  • csi-local 组件必须与 scheduler-plugin 组件中的存储感知调度功能结合使用,开启存储感知调度功能前,请确保 snapshot-controller 和 csi-local 组件均已安装,否则会影响正常调度。
  • 如需卸载 csi-local 组件,请关闭 scheduler-plugin 组件中的存储感知调度功能后再执行卸载操作,否则会影响正常调度。
  1. 在左侧导航栏中选择 集群,单击需要配置的目标集群。
  1. 在集群管理页面的左侧导航栏中,选择 组件管理
  1. 选择 存储 页签,将鼠标移动到 snapshot-controller 和 csi-local 组件卡片上,单击 部署,依次安装组件。
  1. 选择 调度 页签,将鼠标移动到 scheduler-plugin 组件卡片上,单击 配置,并在配置弹窗中勾选 存储感知调度 配置项的 本地存储
  • 配置项
    说明
    存储感知调度
    本地存储:默认关闭,勾选表示开启本地存储的存储感知调度功能,开启后可根据节点的存储资源进行调度。
    说明
    需要安装 csi-local 组件才可以生效。
步骤二:配置本地盘类型的节点池
配置本地盘类型的节点池,本场景涉及的关键配置说明如下,其他配置项按需配置即可。详情请参见 创建节点池创建托管节点池
  1. 配置计算规格。选择支持本地盘的 ECS 实例类型。详情请参见 本地盘
  1. 配置数据盘。
  • 配置容器、镜像存储目录。使用极速型 SSD 数据盘挂载到容器、镜像存储目录 /var/lib/containerd/var/lib/kubelet
警告
请勿使用本地盘挂载到容器、镜像存储目录,否则,将不适用本地存储使用场景。
  • 单击 添加数据盘,使用本地盘配置其他数据盘。本地数据盘支持 SSD 和 HDD 类型,不同 ECS 类型支持的数据盘类型不同,可根据实际需求选择。
  1. 自定义节点标签,用于初始化本地盘时筛选节点,例如csi-local: "i4ag"
  1. 配置部署执行脚本,在节点中安装 lvm2,安装命令为apt-get install -y lvm2
步骤三:初始化本地盘
csi-local 组件安装成功后,将自动创建本地存储相关 CRD,包括:
  • NodeLocalStorageInitConfig用于初始化每个节点的 NodeLocalStorage 资源。csi-local 组件在创建 NodeLocalStorage 资源时,如果存在 NodeLocalStorageInitConfig。则会将 NodeLocalStorageInitConfig 中的配置填充到新创建 NodeLocalStorage 资源的 Spec 中。
  • NodeLocalStorage:用于上报每个节点的存储设备信息,您可根据需要编辑 NodeLocalStorage 资源的 Spec 字段。
alt
本场景以 ecs.i4ag.12xlarge 机型为例,存在一块 3.5T 的 SSD 盘 /dev/nvme0n1,并已经为该机型节点打上标签 csi-local: "i4ag"
  1. 在左侧导航栏中选择 工作负载 > 对象浏览器,单击 使用 Yaml 创建 ,配置 CR 初始化本地盘。
  • 类型 下拉菜单中选择 自定义。
  • Yaml 中输入如下 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: "i4ag" # 筛选节点的 Label
    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 分钟左右,执行以下命令,查看对应节点的 NodeLocalStorage 配置。其中192.168.2.6为节点的 IP 地址。
  • kubectl get nls 192.168.2.6 -oyaml
  • 预期结果如下,能够查询到 VolumeGroup 信息,表示初始化成功。
  • 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 初始化成功,可查看 VolumeGroup 相关信息
    - allocatable: 3840753532928
    available: 3840753532928
    condition: DiskReady
    name: csi-local-pool-0
    physicalVolumes:
    - /dev/nvme0n1
    total: 3840753532928
步骤四:通过临时卷方式使用 LVM 卷
本场景以创建无状态为例,介绍如何通过临时卷方式使用 LVM 卷。
  1. 创建 Deployment 的 YAML 文件。示例文件deployment-demo.yaml代码如下:
  • apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: deployment-demo
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: deployment-demo
    template:
    metadata:
    labels:
    app: deployment-demo
    spec:
    containers:
    - name: demo
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0
    volumeMounts:
    - mountPath: /srv
    name: webroot
    volumes:
    - name: webroot
    csi:
    driver: local.csi.volcengine.com
    fsType: ext4 # 指定文件系统,取值:ext4、xfs
    volumeAttributes:
    vgName: csi-local-pool-0 # 必填,临时卷所用的 VolumeGroup
    size: 10Gi # 选填,临时卷大小,未配置默认为 1Gi
  1. 执行以下命令,创建工作负载。
  • kubectl create -f deployment-demo.yaml
结果验证
存储卷挂载
工作负载创建成功后,登录节点,查看对应节点上的块本地存储分配详情。
  1. 使用 ECS Terminal 登录节点。详情请参见 ECS Terminal
  1. 执行以下命令,查看节点中的块设备信息。
  • lsblk
  • 预期结果如下,可以看到已初始化的本地存储块。
  • NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    vda 254:0 0 40G 0 disk
    ├─vda1 254:1 0 190M 0 part /boot/efi
    └─vda2 254:2 0 39.8G 0 part /
    vdb 254:16 0 100G 0 disk /mnt/vdb
    nvme0n1 259:0 0 3.5T 0 disk
    └─csi--local--pool--0-csi--c77b8485df5eae495f6b2d902772697a7d9c9364fc4d8bb4750da62c89abba49 253:0 0 10G 0 lvm /mnt/vdb/kubelet/pods/7e9fd2a9-d9a0-4ba4-b80a-6682a8a202a9/volumes/kubernetes.io~csi/webroot/mount
  1. 执行以下命令,查看节点中的逻辑卷。
  • lvs
  • 预期结果如下,显示 LV 已被创建并被挂载。
  • LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    csi-c77b8485df5eae495f6b2d902772697a7d9c9364fc4d8bb4750da62c89abba49 csi-local-pool-0 -wi-ao---- 10.00g
存储卷回收
  1. 删除工作负载,待 Pod 成功删除后。
  1. 再次执行lsblklvs命令,可以发现 LV 已被回收。
  • root@iv-yebwt6xkhsqb***:~# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    vda 254:0 0 40G 0 disk
    ├─vda1 254:1 0 190M 0 part /boot/efi
    └─vda2 254:2 0 39.8G 0 part /
    vdb 254:16 0 100G 0 disk /mnt/vdb
    nvme0n1 259:0 0 3.5T 0 disk
    root@iv-yebwt6xkhsqb***:~#
    root@iv-yebwt6xkhsqb***:~#
    root@iv-yebwt6xkhsqb***:~# lvs
    root@iv-yebwt6xkhsqb***:~#
最近更新时间:2026.02.03 17:09:47
这个页面对您有帮助吗?
有用
有用
无用
无用