管理驱动器
先决条件
驱动器
添加驱动器
DirectPV 必须能够访问驱动器才能供应卷。这涉及一个两步过程
-
运行
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"
-
运行
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