概述
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 配置。
filterconfigs:
- key: path-filter
name: path filter
state: true
include: "/dev/sda"
exclude: ""
使用上述配置时,只会使用块设备/dev/sda来创建块设备自定义资源。所有其他磁盘将被排除。
注意:
- 正则表达式支持filterconfigs在 NDM 中不可用,Configmap并且Configmap适用于集群级别。这意味着,如果用户提供/dev/sdbinfilterconfigs作为包含过滤器,则/dev/sdb来自集群中所有节点的所有块设备将用于 NDM 创建块设备 CR。
排除过滤器
NDM 对磁盘进行一些过滤以排除,例如引导磁盘。默认情况下,NDM 在创建块设备 CR 时排除以下设备路径。该配置在加入openebs-ndm-config下Configmap在openebs-operator.yaml。/dev/loop - loop devices.
/dev/fd - file descriptors.
/dev/sr - CD-ROM devices.
/dev/ram - ramdisks.
/dev/dm -lvm.
/dev/md -multiple device ( software RAID devices).
/dev/rbd - ceph RBD devices
/dev/zd - zfs volumes
以下是来自 openebs 运营商 YAML 的 NDM 配置文件片段,其中不包括提供的磁盘/路径。
filterconfigs:
- key: os-disk-exclude-filter
name: os disk exclude filter
state: true
exclude: "/,/etc/hosts,/boot"
- key: vendor-filter
name: vendor filter
state: true
include: ""
exclude: "CLOUDBYT,OpenEBS"
- key: path-filter
name: path filter
state: true
include: ""
exclude: "loop,/dev/fd0,/dev/sr0,/dev/ram,/dev/dm-,/dev/md,/dev/rbd"
还可以通过添加更多与您的节点关联的磁盘类型来进行自定义。例如,使用过的磁盘、不需要的磁盘等。
此更改必须在openebs-operator.yaml您在安装 OpenEBS 之前下载的文件中完成。如果在 OpenEBS 安装后执行更改,则用户必须重新启动相应的NDM DaemonSet pod以更新NDM 配置。
filterconfigs:
- key: path-filter
name: path filter
state: true
include: ""
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和任何其他过滤器的值。
---
# This is the node-disk-manager related config.
# It can be used to customize the disks probes and filters
apiVersion: v1
kind: ConfigMap
metadata:
name: openebs-ndm-config
namespace: openebs
data:
# udev-probe is default or primary probe which should be enabled to run ndm
# filterconfigs contains configs of filters - in their form fo include
# and exclude comma separated strings
node-disk-manager.config: |
probeconfigs:
- key: udev-probe
name: udev probe
state: true
- key: seachest-probe
name: seachest probe
state: false
- key: smart-probe
name: smart probe
state: true
filterconfigs:
- key: os-disk-exclude-filter
name: os disk exclude filter
state: true
exclude: "/,/etc/hosts,/boot"
- key: vendor-filter
name: vendor filter
state: true
include: ""
exclude: "CLOUDBYT,OpenEBS"
- key: path-filter
name: path filter
state: true
include: ""
exclude: "loop,/dev/fd0,/dev/sr0,/dev/ram,/dev/dm-,/dev/md,/dev/sdc"
---
为不受支持的磁盘创建块设备 CR
目前,NDM 开箱即用地管理磁盘、分区、lvm、crypt 和其他 dm 设备。如果用户需要为其他设备类型(如 md array 或任何其他不受支持的设备类型)设置块设备,可以使用以下步骤手动创建块设备资源:
- 使用以下规范创建示例块设备 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
- kind: by-id
links:
```
- 使用磁盘信息修改创建的块设备 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
- 应为by-id 和by-path 填写此字段。可以通过运行以下命令从工作节点获取这些详细信息udevadm info -q property -n
- 节点名
- 连接块设备的节点的名称。的输出kubectl get nodes可用于获取此值。
- 小路
- 该值应该类似于/dev/dm-0或/dev/md0。
- 名称
- 应用修改后的 YAML 文件为提供的设备路径创建块设备 CR。kubectl apply -f <blockdevice-cr.yaml> -n <openebs_namespace> 注意: blockdevice CR 应该在安装 openebs 的同一个命名空间中创建。
- 对每个不受支持的设备重复相同的步骤,并为这些设备创建块设备 CR。
- 通过运行以下kubectl get blockdevice -n openebs命令验证块设备是否已创建。
注意:如果您要为不受支持的设备创建块设备 CR,则必须在排除过滤器下添加相应的磁盘,以便 NDM 不会选择特定的磁盘来创建 BD。请参阅此处以在 NDM 配置中自定义排除过滤器。