概述

Github:https://github.com/openebs/node-disk-manager

包括过滤器

用户可以只包含选定的块设备用于创建块设备 CR,然后仅将创建的块设备 CR 用于 cStor 池创建或用于基于设备提供本地 PV。为了包含选定的块设备,请在 NDM 配置部分下使用所需的块设备更新操作员 YAML 文件,以便仅使用这些块设备来创建块设备 CR。在以下配置中添加块设备路径以指定特定磁盘。此配置必须加入openebs-ndm-config下Configmap的openebs-operator.yaml。

此更改必须在openebs-operator.yaml您在安装 OpenEBS 之前下载的文件中完成。如果在 OpenEBS 安装后执行更改,则用户必须重新启动相应的 NDM DaemonSet pod 以更新 NDM 配置。

  1. filterconfigs:
  2. - key: path-filter
  3. name: path filter
  4. state: true
  5. include: "/dev/sda"
  6. exclude: ""

使用上述配置时,只会使用块设备/dev/sda来创建块设备自定义资源。所有其他磁盘将被排除。
注意

  • 正则表达式支持filterconfigs在 NDM 中不可用,Configmap并且Configmap适用于集群级别。这意味着,如果用户提供/dev/sdbinfilterconfigs作为包含过滤器,则/dev/sdb来自集群中所有节点的所有块设备将用于 NDM 创建块设备 CR。

    排除过滤器

    NDM 对磁盘进行一些过滤以排除,例如引导磁盘。默认情况下,NDM 在创建块设备 CR 时排除以下设备路径。该配置在加入openebs-ndm-config下Configmap在openebs-operator.yaml。
    1. /dev/loop - loop devices.
    2. /dev/fd - file descriptors.
    3. /dev/sr - CD-ROM devices.
    4. /dev/ram - ramdisks.
    5. /dev/dm -lvm.
    6. /dev/md -multiple device ( software RAID devices).
    7. /dev/rbd - ceph RBD devices
    8. /dev/zd - zfs volumes

以下是来自 openebs 运营商 YAML 的 NDM 配置文件片段,其中不包括提供的磁盘/路径。

  1. filterconfigs:
  2. - key: os-disk-exclude-filter
  3. name: os disk exclude filter
  4. state: true
  5. exclude: "/,/etc/hosts,/boot"
  6. - key: vendor-filter
  7. name: vendor filter
  8. state: true
  9. include: ""
  10. exclude: "CLOUDBYT,OpenEBS"
  11. - key: path-filter
  12. name: path filter
  13. state: true
  14. include: ""
  15. exclude: "loop,/dev/fd0,/dev/sr0,/dev/ram,/dev/dm-,/dev/md,/dev/rbd"

还可以通过添加更多与您的节点关联的磁盘类型来进行自定义。例如,使用过的磁盘、不需要的磁盘等。
此更改必须在openebs-operator.yaml您在安装 OpenEBS 之前下载的文件中完成。如果在 OpenEBS 安装后执行更改,则用户必须重新启动相应的NDM DaemonSet pod以更新NDM 配置。

  1. filterconfigs:
  2. - key: path-filter
  3. name: path filter
  4. state: true
  5. include: ""
  6. exclude: "loop,/dev/fd0,/dev/sr0,/dev/ram,/dev/dm-,/dev/md,/dev/sdb"

笔记:

  • filterconfigsNDM 中不提供正则表达式支持 Configmap,Configmap 适用于集群级别。这意味着,如果用户/dev/sdb在 configmap 中提供排除过滤器,则/dev/sdb来自集群中所有节点的所有块设备将被 NDM 排除。
  • 建议在集群中单独使用 OpenEBS 配置器。如果您将其他存储提供程序供应商gce-pd与 OpenEBS 一起使用,请使用排除过滤器来避免 OpenEBS 使用这些磁盘。例如,如果您将standardGKE 中的存储类与存储配置器一起用作kubernetes.io/gce-pd,并且当它创建 PVC 时,GPD 会附加到节点。NDM 会检测到此 GPD,OpenEBS 可能会使用它来配置卷。为避免这种情况,建议将在节点上创建的关联设备路径放在path-filter下的exclude字段中。如果 GPD 附加为,则在上述字段中添加。/dev/sdc/dev/sdc示例片段:在下载的 openebs-operator.yaml 中,找到openebs-ndm-config configmap 并根据需要更新path-filter和任何其他过滤器的值。
  1. ---
  2. # This is the node-disk-manager related config.
  3. # It can be used to customize the disks probes and filters
  4. apiVersion: v1
  5. kind: ConfigMap
  6. metadata:
  7. name: openebs-ndm-config
  8. namespace: openebs
  9. data:
  10. # udev-probe is default or primary probe which should be enabled to run ndm
  11. # filterconfigs contains configs of filters - in their form fo include
  12. # and exclude comma separated strings
  13. node-disk-manager.config: |
  14. probeconfigs:
  15. - key: udev-probe
  16. name: udev probe
  17. state: true
  18. - key: seachest-probe
  19. name: seachest probe
  20. state: false
  21. - key: smart-probe
  22. name: smart probe
  23. state: true
  24. filterconfigs:
  25. - key: os-disk-exclude-filter
  26. name: os disk exclude filter
  27. state: true
  28. exclude: "/,/etc/hosts,/boot"
  29. - key: vendor-filter
  30. name: vendor filter
  31. state: true
  32. include: ""
  33. exclude: "CLOUDBYT,OpenEBS"
  34. - key: path-filter
  35. name: path filter
  36. state: true
  37. include: ""
  38. exclude: "loop,/dev/fd0,/dev/sr0,/dev/ram,/dev/dm-,/dev/md,/dev/sdc"
  39. ---

为不受支持的磁盘创建块设备 CR

目前,NDM 开箱即用地管理磁盘、分区、lvm、crypt 和其他 dm 设备。如果用户需要为其他设备类型(如 md array 或任何其他不受支持的设备类型)设置块设备,可以使用以下步骤手动创建块设备资源:

  1. 使用以下规范创建示例块设备 CR YAML。以下是示例块设备 CR YAML。 ```yaml apiVersion: openebs.io/v1alpha1 kind: BlockDevice metadata: name: example-blockdevice-1 labels: kubernetes.io/hostname: # like gke-openebs-user-default-pool-044afcb8-bmc0 ndm.io/managed: “false” # for manual blockdevice creation put false ndm.io/blockdevice-type: blockdevice status: claimState: Unclaimed state: Active spec: capacity: logicalSectorSize: 512 storage: #like 53687091200 details: deviceType: # like disk, partition, lvm, crypt, md firmwareRevision: model: # like PersistentDisk serial: # like google-disk-2 compliance: #like “SPC-4” vendor: #like Google devlinks:
    • kind: by-id links:
      • # like /dev/disk/by-id/scsi-0Google_PersistentDisk_disk-2
      • # like /dev/disk/by-id/google-disk-2
    • kind: by-path links:
      • # like /dev/disk/by-path/virtio-pci-0000:00:03.0-scsi-0:0:2:0 nodeAttributes: nodeName: # output of kubectl get nodes can be used path: # like /dev/md0

```

  1. 使用磁盘信息修改创建的块设备 CR 示例 YAML。在上述块设备 CR 示例规范中,在应用 YAML 之前必须填写以下字段。
    • 名称
      • 为块设备 CR 提供唯一名称。在上面的 YAML 规范中,块设备 CR 的给定名称是example-blockdevice-1
    • kubernetes.io/主机名
      • 连接块设备的节点的主机名。
    • 贮存
      • 提供bytes类似的存储容量53687091200。
    • 逻辑扇区大小
      • 块设备的逻辑扇区大小。例如,512、4096 等。在上面的示例片段中提供了 512。可以根据设备的逻辑扇区大小更改此值。
    • 设备类型
      • 设备类型。这可以从lsblk输出中获得。例如:lvm、crypt、nbd、md 等
    • 链接
      • 应为by-id 和by-path 填写此字段。可以通过运行以下命令从工作节点获取这些详细信息udevadm info -q property -n
    • 节点名
      • 连接块设备的节点的名称。的输出kubectl get nodes可用于获取此值。
    • 小路
      • 该值应该类似于/dev/dm-0或/dev/md0。
  2. 应用修改后的 YAML 文件为提供的设备路径创建块设备 CR。kubectl apply -f <blockdevice-cr.yaml> -n <openebs_namespace> 注意: blockdevice CR 应该在安装 openebs 的同一个命名空间中创建。
  3. 对每个不受支持的设备重复相同的步骤,并为这些设备创建块设备 CR。
  4. 通过运行以下kubectl get blockdevice -n openebs命令验证块设备是否已创建。

注意:如果您要为不受支持的设备创建块设备 CR,则必须在排除过滤器下添加相应的磁盘,以便 NDM 不会选择特定的磁盘来创建 BD。请参阅此处以在 NDM 配置中自定义排除过滤器。