管理驱动器

先决条件

驱动器

添加驱动器

DirectPV 必须能够访问驱动器才能供应卷。这涉及一个两步过程

  1. 运行discover命令。

    discover命令探测 DirectPV 节点上的合格驱动器并将驱动器信息存储在 YAML 文件中。检查生成的 YAML 文件,并为要添加的每个驱动器将select字段设置为yes。如果不想添加特定驱动器,请将其select值设置为no

    默认情况下,DirectPV 将所有发现的驱动器的select字段设置为yes。必须手动取消选择 DirectPV 不应格式化和使用的任何已发现驱动器。仔细查看生成的 YAML 文件。

    以下是discover命令的示例

    # Probe and save drive information to drives.yaml file.
    $ kubectl directpv discover
    
     Discovered node 'master' Discovered node 'node1'
    ┌─────────────────────┬────────┬───────┬─────────┬────────────┬──────┬───────────┬─────────────┐
    │ ID                  │ NODE   │ DRIVE │ SIZE    │ FILESYSTEM │ MAKE │ AVAILABLE │ DESCRIPTION │
    ├─────────────────────┼────────┼───────┼─────────┼────────────┼──────┼───────────┼─────────────┤
    │ 252:16$ud8mwCjPT... │ master │ vdb   │ 512 MiB │ -          │ -    │ YES       │ -           │
    │ 252:16$gGz4UIuBj... │ node1  │ vdb   │ 512 MiB │ -          │ -    │ YES       │ -           │
    └─────────────────────┴────────┴───────┴─────────┴────────────┴──────┴───────────┴─────────────┘
    
    Generated 'drives.yaml' successfully.
    
    # Show generated drives.yaml file.
    $ cat drives.yaml
    version: v1
    nodes:
        - name: master
          drives:
            - id: 252:16$ud8mwCjPTH8147TysmiQ2GGLpffqUht6bz7NtHqReJo=
              name: vdb
              size: 536870912
              make: ""
              select: "yes"
        - name: node1
          drives:
            - id: 252:16$gGz4UIuBjQlO1KibOv7bZ+kEDk3UCeBneN/UJdqdQl4=
              name: vdb
              size: 536870912
              make: ""
              select: "yes"
    
  2. 运行init命令。

    init命令创建一个请求,以在上一步骤中使用discover命令生成的 YAML 文件中添加选定的驱动器。

    此过程会擦除选定驱动器上的所有数据。错误的驱动器选择将导致永久性数据丢失。

    在运行此命令之前,修改 YAML 文件以将任何不需要的驱动器标记为select字段的no

    以下是init命令的示例

    $ kubectl directpv init drives.yaml
    
    
     ███████████████████████████████████████████████████████████████████████████ 100%
    
     Processed initialization request 'c24e22f5-d582-49ba-a883-2ce56909904e' for node 'master' Processed initialization request '7e38a453-88ed-412c-b146-03eef37b23bf' for node 'node1'
    ┌──────────────────────────────────────┬────────┬───────┬─────────┐
    │ REQUEST_ID                           │ NODE   │ DRIVE │ MESSAGE │
    ├──────────────────────────────────────┼────────┼───────┼─────────┤
    │ c24e22f5-d582-49ba-a883-2ce56909904e │ master │ vdb   │ Success │
    │ 7e38a453-88ed-412c-b146-03eef37b23bf │ node1  │ vdb   │ Success │
    └──────────────────────────────────────┴────────┴───────┴─────────┘
    

有关更多详细信息和可选参数,请参阅discover 命令init 命令

列出驱动器

要获取有关来自 DirectPV 的驱动器的信息,请运行list drives命令。

$ kubectl directpv list drives
┌────────┬──────┬──────┬─────────┬─────────┬─────────┬────────┐
│ NODE   │ NAME │ MAKE │ SIZE    │ FREE    │ VOLUMES │ STATUS │
├────────┼──────┼──────┼─────────┼─────────┼─────────┼────────┤
│ master │ vdb  │ -    │ 512 MiB │ 506 MiB │ -       │ Ready  │
│ node1  │ vdb  │ -    │ 512 MiB │ 506 MiB │ -       │ Ready  │
└────────┴──────┴──────┴─────────┴─────────┴─────────┴────────┘

有关更多信息,请参阅list drives 命令

标记驱动器

标记驱动器以设置自定义标签,这些标签可用于卷供应。

# Set label 'tier' key to 'hot' value.
$ kubectl directpv label drives tier=hot

# Remove label 'tier'.
$ kubectl directpv label drives tier-

设置后,使用标签来调度驱动器

有关更多信息,请参阅label drives 命令

替换驱动器

在同一节点上用新驱动器替换故障驱动器。在此过程中,故障驱动器中的所有卷都将移动到新驱动器,然后故障驱动器将从 DirectPV 中移除。目前,DirectPV 不支持将卷上的数据移动到新驱动器。使用 replace.sh 脚本执行驱动器替换。

以下是一个示例

# Replace 'sdd' drive by 'sdf' drive on 'node1' node
$ replace.sh sdd sdf node1

移除驱动器

不包含任何卷的驱动器可以移除。

# Remove drive 'vdb' from 'node1' node
$ kubectl directpv remove --drives=vdb --nodes=node1

有关更多信息,请参阅 remove 命令

修复驱动器

数据丢失
这是一个危险的操作,会导致数据丢失。

DirectPV 支持使用 xfs_repair 实用程序尝试修复报告 XFS 文件系统错误、故障或损坏的已管理驱动器。此命令无法保证成功或完全恢复。

repair 命令创建一个一次性 Kubernetes Job,其 Pod 名称为 repair-<DRIVE-ID>。Kubernetes 会在完成五分钟后自动移除此作业。

可以使用 kubectl log 命令查看驱动器修复的进度和状态。

在开始修复之前,必须先 挂起驱动器

使用 repair.sh 脚本修复故障驱动器。

挂起驱动器

数据丢失
这是一个危险的操作,会导致数据丢失。

根据 Kubernetes 的设计,只有当 StatefulSet 工作负载的所有 Pod 都处于运行状态时,它才会处于活动状态。故障驱动器会阻止 StatefulSet 启动。

DirectPV 提供了一种解决方法来挂起故障驱动器,该方法以只读方式将相应的卷挂载到空的 /var/lib/directpv/tmp 目录中。可以通过执行 suspend drives 命令来实现。

kubectl directpv suspend drives af3b8b4c-73b4-4a74-84b7-1ec30492a6f0

修复后,通过恢复驱动器返回到正常的驱动器功能。恢复后,相应的卷将返回到使用各自分配的驱动器。这可以通过使用 resume drives 命令来实现。

kubectl directpv resume drives af3b8b4c-73b4-4a74-84b7-1ec30492a6f0