按标签调度卷

基于驱动器标签的卷调度

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. 使用以下命令验证标签是否正确设置:list带有命令的--show-labelsflag.

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

    设置一个parameter定义 YAML 中的值。 该值应遵循以下形式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 是一个包含存储类定义的示例:parameterssection:

    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