发现本地磁盘

LocalVolumeDiscovery 会清点集群节点上未使用的块设备,并为每个节点写入一个 LocalVolumeDiscoveryResult 对象。使用结果为 LocalVolume 选择设备路径,或为 LocalVolumeSet 选择过滤器。

发现操作不会创建 PersistentVolumes、StorageClasses 或文件系统。具有 status.state: Available 的设备可用于配置。它不是 PersistentVolume。

前提条件

  • 已安装 Alauda Container Platform Local Disk Provisioner。请参阅安装。
  • 您可以对集群运行 kubectl。

检查是否已存在发现对象

安装 Alauda Container Platform Local Disk Provisioner 后,如果同时安装了 Alauda Container Platform Storage Essentials 且尚不存在 LocalVolumeDiscovery,平台会在 acp-storage 中创建一个名为 auto-discover-devices 的 LocalVolumeDiscovery。

在控制平面节点上:

kubectl -n acp-storage get localvolumediscovery

如果列出了 auto-discover-devices,请勿创建其他对象。在下一节中检查结果。若要限制扫描的节点,请编辑该对象上的 spec.nodeSelector。

创建 LocalVolumeDiscovery

仅当 acp-storage 中不存在 LocalVolumeDiscovery 时,才创建一个该对象。

cat << EOF | kubectl apply -f -
apiVersion: local.storage.openshift.io/v1alpha1
kind: LocalVolumeDiscovery
metadata:
  name: auto-discover-devices
  namespace: acp-storage
spec:
  nodeSelector:
    nodeSelectorTerms:
      - matchExpressions:
          - key: kubernetes.io/hostname
            operator: In
            values:
              - worker-01
              - worker-02
              - worker-03
  tolerations:
    - operator: Exists
EOF
  1. 可选。运行发现操作的节点。请从 kubectl get node 获取主机名。如果省略,发现操作将在每个节点上运行。
  2. 可选。传递给发现 DaemonSet 的容忍度。operator: Exists 匹配每个污点。

检查发现结果

在控制平面节点上:

kubectl -n acp-storage get localvolumediscoveryresult

示例输出:

NAME                         AGE
discovery-result-worker-01   21m
discovery-result-worker-02   21m
discovery-result-worker-03   21m

每个选定的节点都会获得一个 LocalVolumeDiscoveryResult。在一个节点上检查设备:

kubectl -n acp-storage get localvolumediscoveryresult discovery-result-worker-01 -o yaml

在 LocalVolume 中使用 status.discoveredDevices[].deviceID(一个 /dev/disk/by-id/... 路径)作为稳定路径。不要使用 path 值(例如 /dev/sdb 或 /dev/disk/by-path/...)。节点重启后,这些名称可能会发生变化。

status.discoveredDevices[].status.state 的值为以下之一:

状态含义
Available设备未使用,可以进行配置。尚不存在 PersistentVolume。
NotAvailable设备已在使用中,不得进行配置。
Unknownoperator 无法确定设备是否空闲。

列表中的设备不可移除、不是只读设备、未挂载、不是启动磁盘,并且没有子分区。发现操作仍然不会创建卷。

后续步骤