容器服务支持通过 CSI 使用本地存储,本文为您介绍如何使用 LVM 类型的本地存储动态存储卷。
说明
【邀测·申请试用】本地存储相关的 csi-local 组件 和 存储感知调度 功能目前均处于邀测阶段,如需使用,请提交申请。
/var/lib/containerd
和 /var/lib/kubelet
。避免使用本地盘挂载到容器、镜像存储目录,否则,将不适用本地存储使用场景。v1.24.15-vke.34
及以上版本的 1.24 集群、v1.26.10-vke.22
及以上版本的 1.26 集群、v1.28.3-vke.16
及以上版本的 1.28 集群。apt-get install lvm2
。使用本地存储需要依赖 3 个组件,请参考以下顺序依次安装和配置。
警告
snapshot-controller
和 csi-local
组件。scheduler-plugin
组件右侧 配置 按钮,在配置弹窗中勾选存储感知调度配置项的 本地存储。配置项 | 说明 |
---|---|
存储感知调度 | 目前支持本地存储,默认关闭,勾选即表示开启本地存储的存储感知调度功能,开启后可根据节点所具有的存储资源进行调度。 说明 需要安装相应存储 CSI 组件才可以生效,本场景已经安装 |
创建挂载本地盘的节点池或使用已有节点池,并配置节点池相关信息。本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:创建节点池、创建托管节点池。
配置项 | 说明 |
---|---|
数据盘 | 容器、镜像存储目录 警告 避免使用本地盘挂载到容器、镜像存储目录,否则,将不适用本地存储使用场景。 |
其他数据盘 | |
节点标签 | 自定义配置节点标签,后续初始化本地盘,组 VG 时用于筛选节点,例如:csi-local: "i2-2xlarge" 。 |
初始化环节,需要根据实际需求组 VolumeGroup(VG),目前支持使用 CRD 自定义组 VolumeGroup(VG)。csi-local 组件安装成功后,将自动创建本地存储相关 CRD,根据实际需求创建 CR 即可。
本场景以 ecs.i2.2xlarge 机型为例,存在一块 3.5T 的 SSD 盘 /dev/nvme0n1
,并已经为该机型节点打上标签 csi-local: "i2-2xlarge"
。
本场景使用的 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: {}
❯ 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
目前支持动态制备方式使用本地存储,系统已经预置存储类,根据实际需求选用即可。
预置存储类 | 说明 |
---|---|
csi-local-device-hdd | HDD 独立盘预置的存储类,文件存储类型为 ext4。 |
csi-local-device-ssd | SSD 独立盘预置的存储类,文件存储类型为 ext4。 |
csi-local-lvm | LVM 共享盘预置的存储类,文件存储类型为 ext4。 |
csi-local-lvm-xfs | LVM 共享盘预置的存储类,文件存储类型为 xfs。 |
csi-local-pvc.yaml
代码如下:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-local-pvc # PVC 名称。 spec: accessModes: # 访问模式,ReadWriteOnce 表示单点读写。 - ReadWriteOnce resources: requests: storage: 20Gi # 声明应用存储使用量,可修改 PVC 中的 storage 进行扩容。 storageClassName: csi-local-lvm # 预置的存储类名称,可根据实际需求选择。
kubectl create -f csi-local-pvc.yaml
预期输出结果如下,表示本地存储通过配置 StorageClass 完成了 PVC 与 PV 的动态绑定成功。kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS csi-local-pvc Bound pvc-6e8c646b-e3e9-4d02-836e-3b66******** 20Gi RWX csi-local-lvm
本场景以创建 Pod 为例,介绍如何使用 LVM 类型的本地存储动态存储卷。
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 名称。
root@iv-yda1sl1tdscva4fdr6uj:~# 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--98219686--4575--4a7f--9103--4eed93369454 253:0 0 5G 0 lvm /mnt/vdb/kubelet/pods/40a9e082-d84f-4395-a563-0c108261c81e/volumes/kubernetes.io~csi/local-98219686-4575-4a7f-9103-4eed93369454/mount root@iv-yda1sl1tdscva4fdr6uj:~# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert local-98219686-4575-4a7f-9103-4eed93369454 csi-local-pool-0 -wi-ao---- 5.00g
❯ 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
❯ kubectl delete -f lvm-pod.yaml pod "csi-local-pod" deleted ❯ kubectl delete -f lvm-pvc.yaml persistentvolumeclaim "csi-local-pvc" deleted root@iv-yda1sl1tdscva4fdr6uj:~# 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-yda1sl1tdscva4fdr6uj:~# lvs root@iv-yda1sl1tdscva4fdr6uj:~#