按标签调度卷

基于驱动器标签的卷调度

DirectPV 提供多种方式来限制卷如何调度到驱动器

  • 可用驱动器空间
  • 具有亲和性和反亲和性的节点拓扑以及类似工具
  • 用户定义的驱动器标签

您可以分配标签来对驱动器类型进行分类。分配后,在存储类参数中使用这些标签来选择所需的类型。

默认情况下,DirectPV 驱动器上未设置任何用户定义的标签。使用 kubectl directpv label drives 设置 DirectPV 驱动器的用户定义标签。

仅在创建新卷时,标签才会限制调度,因为这是一个调度时间过程。

教程

在本教程中,请将占位符 <label-key><label-value><drive-name> 替换为您根据选择的分类选择的适当值
  1. 在 DirectPV 驱动器上设置标签。

    kubectl directpv label drives <label-key>=<label-value> --drives /dev/<drive-name>
    
  2. 使用带有 --show-labels 标志的 list 命令验证标签是否已正确设置。

    kubectl directpv list drives --drives /dev/<drive-name> --show-labels
    
  3. 创建或修改存储类定义。

    在定义 YAML 中设置 parameter 值。该值应遵循 directpv-min-io/<label-key>: <label-value> 的格式。

    parameters:
      directpv.min.io/<label-key>: <label-value>
    
    参考默认存储类 kubectl get storageclass directpv-min-io -n directpv -o yaml 以进行比较并检查新存储类中是否存在所有字段。

    以下 YAML 是包含 parameters 部分的存储类定义示例

    allowVolumeExpansion: false
    allowedTopologies:
    - matchLabelExpressions:
      - key: directpv.min.io/identity
        values:
        - directpv-min-io
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      finalizers:
      - foregroundDeletion
      labels:
        application-name: directpv.min.io
        application-type: CSIDriver
        directpv.min.io/created-by: kubectl-directpv
        directpv.min.io/version: v1beta1
      name: directpv-min-io-new # Define any storage class name of your choice
      resourceVersion: "511457"
      uid: e93d8dab-b182-482f-b8eb-c69d4a1ec62d
    parameters:
      fstype: xfs
      directpv.min.io/<label-key>: <label-value>
    provisioner: directpv-min-io
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    
  4. 使用设置的新存储类名称部署工作负载。

    卷仅放置在带标签的驱动器上。您可以使用以下命令进行验证

    kubectl directpv list drives --labels <label-key>:<label-value>
    kubectl directpv list volumes