目录

open-local里磁盘和vg的配置

概述

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
/open-local%E9%87%8C%E7%A3%81%E7%9B%98%E5%92%8Cvg%E7%9A%84%E9%85%8D%E7%BD%AE/img.png