概述
open-local 通过 NodeLocalStorageInitConfig 决定如何对节点硬盘进行初始化,运维需要按照一定的规则定义盘符,云平台需要根据盘符规则定制不同介质的硬件。
盘符规则
当前的规则如下,比如节点只有两块盘,其中 sda 是系统盘,sdb 是数据盘,这个具体要看节点上的配置。
1
2
3
4
|
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 893.1G 0 disk
sdb 8:16 0 1.8T 0 disk
|
open-local规则
当前集群的规则如下,resourceToBeInited 字段定义了 open-local 的 agent 在节点运行之后,会如何绑定设备和 vg 的关系,其中 devices 支持正则配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
apiVersion: csi.aliyun.com/v1alpha1
kind: NodeLocalStorageInitConfig
metadata:
annotations:
meta.helm.sh/release-name: open-local
meta.helm.sh/release-namespace: kube-system
spec:
globalConfig:
listConfig:
vgs:
include:
- 'open-local-pool-[0-9]+'
resourceToBeInited:
vgs:
- devices:
- /dev/sdb
name: open-local-pool-0
|
StorageClass规则
StorageClass 可以通过指定 vgName 控制 PVC/PV 在具体哪个 vg 创建。
1
2
3
4
5
6
7
8
9
10
11
12
|
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: test-open-local-lvm
parameters:
csi.storage.k8s.io/fstype: ext4
volumeType: LVM
vgName: test
provisioner: local.csi.aliyun.com
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
|
规则示意图
未来如果不同规格的机器,考虑这种情况,至少需要按照不同类型的磁盘,区分不同的 vg,再区分不同的 StorageClass。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
apiVersion: csi.aliyun.com/v1alpha1
kind: NodeLocalStorageInitConfig
metadata:
annotations:
meta.helm.sh/release-name: open-local
meta.helm.sh/release-namespace: kube-system
spec:
globalConfig:
listConfig:
vgs:
include:
- 'open-local-pool-[0-9]+'
- 'nvme-[0-9]+'
resourceToBeInited:
vgs:
- devices:
- /dev/sdb
name: open-local-pool-0
- devices:
- /dev/nvme0n1
name: nvme-pool-0
|