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​
    ​
  • 预期结果如下,能够查询到 VolumeGroups 信息,表示本地盘初始化成功。​
  • ​
    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​
    ​
步骤四:创建本地存储动态存储卷​
目前支持动态制备方式使用本地存储,系统已经预置存储类,根据实际需求选用即可。​
​
预置存储类​
说明​
csi-local-device-hdd​
HDD 独立盘预置的存储类,文件存储类型为 ext4。​
csi-local-device-ssd​
SSD 独立盘预置的存储类,文件存储类型为 ext4。​
csi-local-lvm​
LVM 共享盘预置的存储类,文件存储类型为 ext4。​
csi-local-lvm-xfs​
LVM 共享盘预置的存储类,文件存储类型为 xfs。​
​
  1. 创建 PVC 的 YAML 文件。示例文件csi-local-pvc.yaml代码如下:​
  • ​
    apiVersion: v1​
    kind: PersistentVolumeClaim​
    metadata:​
    name: csi-local-pvc # PVC 名称​
    spec:​
    accessModes: # 访问模式,ReadWriteOnce 表示单点读写​
    - ReadWriteOnce ​
    resources:​
    requests:​
    storage: 20Gi # 声明的存储使用量​
    storageClassName: csi-local-lvm # 预置的存储类名称,可根据实际需求选择​
    ​
  1. 执行以下命令,创建 PVC。​
  • ​
    kubectl create -f csi-local-pvc.yaml​
    ​
  1. 执行以下命令,查看 PVC 声明的动态卷是否创建成功。​
  • ​
    kubectl get pvc​
    ​
  • 预期输出结果如下:​
  • ​
    NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS ​
    csi-local-pvc Pending pvc-6e8c646b-e3e9-4d02-836e-3b66******** 20Gi RWX csi-local-lvm ​
    ​
步骤五:使用本地存储动态存储卷​
本场景以创建 Pod 为例,介绍如何使用 LVM 类型的本地存储动态存储卷。​
  1. 创建 Pod 的 YAML 文件。示例文件pod-demo.yaml代码如下:​
  • ​
    apiVersion: v1​
    kind: Pod​
    metadata:​
    name: csi-local-pod​
    spec:​
    containers:​
    - name: csi-local-pod​
    image: nginx:latest​
    command:​
    - "/bin/bash"​
    - "-c"​
    - set -euo pipefail; while true; do echo $(hostname) $(date) >> /var/lib/www/$(hostname); sleep 1; done​
    volumeMounts:​
    - mountPath: /var/lib/www​
    name: webroot​
    volumes:​
    - name: webroot​
    persistentVolumeClaim:​
    claimName: csi-local-pvc # 已创建的 PVC 名称​
    ​
  1. 执行以下命令,创建 Pod。​
  • ​
    kubectl create -f pod-demo.yaml​
    ​
结果验证​
存储卷挂载​
Pod 创建成功后,登录节点,查看对应节点上的本地存储详情。​
  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-local--507a6316--bc70--432a--b452--ac2a7c5b060e 253:0 0 20G 0 lvm /mnt/vdb/kubelet/pods/6084b7e4-1b4c-4f61-939f-924d3765261e/volumes/kubernetes.io~csi/local-507a6316-bc70-432a-b452-ac2a7c5b060e/mount​
    ​
  1. 执行以下命令,查看节点中的逻辑卷。​
  • ​
    lvs​
    ​
  • 预期结果如下,显示 LV 已被创建并被挂载。​
  • ​
    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert​
    local-507a6316-bc70-432a-b452-ac2a7c5b060e csi-local-pool-0 -wi-ao---- 20.00g ​
    ​
  1. 删除 Pod 触发 Pod 重建后,可执行exec命令进入新建 Pod,查看旧 Pod 中的数据是否依然存在。​
  • ​
    ❯ kubectl exec -it csi-local-pod cat //var/lib/www/csi-local-pod​
    kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.​
    csi-local-pod Thu Jul 18 03:31:25 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:26 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:27 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:28 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:29 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:30 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:31 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:32 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:33 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:34 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:35 UTC 2024​
    csi-local-pod Thu Jul 18 03:31:36 UTC 2024​
    ​
存储卷回收​
  1. 删除 Pod 和对应的 PVC。​
  1. 再次执行lsblk和lvs命令,可以发现 LV 已被回收。​
  • ​
    root@iv-yda1sl1t***:~# 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-yda1sl1t***:~# lvs​
    root@iv-yda1sl1t***:~# ​
    ​
​
最近更新时间:2026.02.03 17:09:46
这个页面对您有帮助吗?
有用
有用
无用
无用