使用 LocalVolumeSet 进行配置

LocalVolumeSet 会根据匹配筛选条件的设备配置 PersistentVolume。如果不存在由 spec.storageClassName 指定名称的 StorageClass,operator 会创建该 StorageClass。

当磁盘应根据大小、类型或类似属性声明,而不是通过显式路径列表声明时,请使用 LocalVolumeSet。有关精确路径,请参阅使用 LocalVolume 进行配置。

WARNING

请谨慎使用 LocalVolumeSet。当 operator 根据本地磁盘配置 PersistentVolume 时,它可能会声明所有匹配 deviceInclusionSpec 的设备。Alauda Container Platform Local Disk Provisioner 必须是节点上唯一管理这些磁盘的组件。不要创建多个选择同一节点的 LocalVolumeSet。如果必须限制每个节点配置的设备数量,请设置 maxDeviceCount。

LocalVolumeSet 不支持逻辑卷管理(LVM)设备。不要将其指向 LVM 卷。对于由 LVM 支持的动态卷,请使用 LVM Storage。

前提条件

  • 已安装 Alauda Container Platform Local Disk Provisioner。请参阅安装。
  • 设备发现正在运行,以便确认哪些磁盘是 Available。请参阅发现本地磁盘。
  • 匹配的设备已连接、未挂载,并且在选择整个磁盘时没有子分区。

配置 Block 卷

此示例会创建名为 localblock 的 Block StorageClass,并根据匹配的整个磁盘创建 PersistentVolume。

在控制平面节点上:

cat << EOF | kubectl apply -f -
apiVersion: local.storage.openshift.io/v1alpha1
kind: LocalVolumeSet
metadata:
  name: local-block-disks
  namespace: acp-storage
spec:
  storageClassName: localblock
  volumeMode: Block
  maxDeviceCount: 2
  nodeSelector:
    nodeSelectorTerms:
      - matchExpressions:
          - key: kubernetes.io/hostname
            operator: In
            values:
              - worker-01
              - worker-02
              - worker-03
  deviceInclusionSpec:
    deviceTypes:
      - disk
    minSize: 10Gi
    maxSize: 2Ti
EOF
  1. 安装 Alauda Container Platform Local Disk Provisioner 的命名空间。默认值为 acp-storage。
  2. 用于配置 PersistentVolume 的 StorageClass。如果不存在,operator 会创建该 StorageClass。请使用能够唯一标识此集合的名称。
  3. Block 或 Filesystem。对于 Ceph OSD 消费和其他原始设备用户,请使用 Block。
  4. 可选。每个节点配置的匹配设备的最大数量。如果省略,则会声明所选节点上的每个匹配设备。
  5. 可选。运行匹配的节点。请从 kubectl get node 获取主机名。如果省略,则会在每个节点上运行匹配。
  6. 要包含的设备类型:disk、part、loop 或 mpath。如果列表为空,则只选择 disk。不支持 LVM 设备。

可选的 deviceInclusionSpec 筛选条件:

字段值来源
deviceTypesdisk、part、loop 或 mpath。为空表示仅使用 disk。
deviceMechanicalPropertiesRotational 或 NonRotational。默认使用两者。
minSize设备大小下限。为空时,默认为 1Gi。
maxSize设备大小上限。
models磁盘 MODEL 字符串中不区分大小写的子字符串。从 LocalVolumeDiscoveryResult.status.discoveredDevices[].model 或节点上 lsblk -d -o NAME,TYPE,SIZE,MODEL,VENDOR,SERIAL 的 MODEL 列复制值。类似 SAMSUNG 的值会匹配 SAMSUNG MZVLB512。
vendors磁盘 VENDOR 字符串中不区分大小写的子字符串。从 LocalVolumeDiscoveryResult.status.discoveredDevices[].vendor 或同一 lsblk 命令的 VENDOR 列复制值。此列通常是诸如 ATA 或 NVMe 的总线名称,而不是磁盘品牌。品牌通常位于 MODEL 中。

如果 MODEL 或 VENDOR 为空(Virtio 和许多云磁盘中很常见),请不要设置 models 或 vendors。这些筛选条件不会匹配空字符串。

验证 PersistentVolume:

kubectl get pv

示例输出:

NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM        STORAGECLASS   REASON   AGE
local-pv-1cec77cf   100Gi      RWO            Delete           Available                localblock              88m
local-pv-2ef7cd2a   100Gi      RWO            Delete           Available                localblock              82m

如果之后插入的磁盘匹配筛选条件,并且 maxDeviceCount 仍允许配置,则会自动为其配置。

绑定 PersistentVolumeClaim

在将使用该卷的项目中创建声明。对于 Block 卷,请设置 volumeMode: Block。请求不得超过设备容量。

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-block-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Block
  resources:
    requests:
      storage: 100Gi
  storageClassName: localblock
EOF
  1. 必须与 LocalVolumeSet volumeMode 匹配。
  2. 必须小于或等于 PersistentVolume 容量。
  3. 必须与 spec.storageClassName 匹配。

确认声明已绑定:

kubectl get pvc local-block-pvc

添加磁盘或节点

  • 添加磁盘:在选定的节点上连接与 deviceInclusionSpec 匹配的磁盘。当磁盘为 Available 且未超过 maxDeviceCount 时,operator 会配置 PersistentVolume。无需编辑路径列表。
  • 添加节点:在 LocalVolumeSet 以及清点该节点的 LocalVolumeDiscovery 上,将主机名添加到 spec.nodeSelector 中。请参阅发现本地磁盘。