×

FlexVolume 是一个已弃用的功能。已弃用的功能仍然包含在 OpenShift Container Platform 中,并且继续受支持;但是,它将在该产品的未来版本中删除,并且不推荐用于新的部署。

树外容器存储接口 (CSI) 驱动程序是在 OpenShift Container Platform 中编写卷驱动程序的推荐方法。FlexVolume 驱动程序的维护人员应实现 CSI 驱动程序,并将 FlexVolume 的用户迁移到 CSI。FlexVolume 的用户应将其工作负载迁移到 CSI 驱动程序。

有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行说明中的“已弃用和删除的功能”部分。

OpenShift Container Platform 支持 FlexVolume,这是一种使用可执行模型与驱动程序交互的树外插件。

要使用没有内置插件的后端存储,您可以通过 FlexVolume 驱动程序扩展 OpenShift Container Platform 并为应用程序提供持久性存储。

Pod 通过树内插件 `flexvolume` 与 FlexVolume 驱动程序交互。

其他资源

关于 FlexVolume 驱动程序

FlexVolume 驱动程序是一个可执行文件,位于集群中所有节点上的定义良好的目录中。每当需要挂载或卸载由 `PersistentVolume` 对象(其源为 `flexVolume`)表示的卷时,OpenShift Container Platform 都会调用 FlexVolume 驱动程序。

OpenShift Container Platform 不支持 FlexVolume 的附加和分离操作。

FlexVolume 驱动程序示例

FlexVolume 驱动程序的第一个命令行参数始终是操作名称。其他参数特定于每个操作。大多数操作都采用 JavaScript 对象表示法 (JSON) 字符串作为参数。此参数是一个完整的 JSON 字符串,而不是包含 JSON 数据的文件名。

FlexVolume 驱动程序包含

  • 所有 `flexVolume.options`。

  • 一些以 `kubernetes.io/` 为前缀的 `flexVolume` 选项,例如 `fsType` 和 `readwrite`。

  • 如果指定,则引用密钥的内容,以 `kubernetes.io/secret/` 为前缀。

FlexVolume 驱动程序 JSON 输入示例
{
	"fooServer": "192.168.0.1:1234", (1)
        "fooVolumeName": "bar",
	"kubernetes.io/fsType": "ext4", (2)
	"kubernetes.io/readwrite": "ro", (3)
	"kubernetes.io/secret/<key name>": "<key value>", (4)
	"kubernetes.io/secret/<another key name>": "<another key value>",
}
1 所有来自 `flexVolume.options` 的选项。
2 `flexVolume.fsType` 的值。
3 基于 `flexVolume.readOnly` 的 `ro`/`rw`。
4 由 `flexVolume.secretRef` 引用的密钥中的所有键及其值。

OpenShift Container Platform 期望驱动程序的标准输出上提供 JSON 数据。如果未指定,则输出描述操作的结果。

FlexVolume驱动程序默认输出示例
{
	"status": "<Success/Failure/Not supported>",
	"message": "<Reason for success/failure>"
}

驱动程序的退出代码应为0表示成功,1表示错误。

操作应是幂等的,这意味着挂载已挂载的卷应导致成功操作。

安装FlexVolume驱动程序

用于扩展OpenShift Container Platform的FlexVolume驱动程序仅在节点上执行。要实现FlexVolume,只需提供要调用的操作列表和安装路径即可。

先决条件
  • FlexVolume驱动程序必须实现以下操作

    init

    初始化驱动程序。在所有节点初始化期间调用。

    • 参数:无

    • 执行位置:节点

    • 预期输出:默认JSON

    mount

    将卷挂载到目录。这可能包括挂载卷所需的一切,包括查找设备然后挂载设备。

    • 参数:<mount-dir> <json>

    • 执行位置:节点

    • 预期输出:默认JSON

    unmount

    从目录卸载卷。这可能包括卸载后清理卷所需的一切。

    • 参数:<mount-dir>

    • 执行位置:节点

    • 预期输出:默认JSON

    mountdevice

    将卷的设备挂载到目录,然后各个Pod可以绑定挂载。

此调用不会传递FlexVolume规范中指定的“密钥”。如果您的驱动程序需要密钥,请不要实现此调用。

  • 参数:<mount-dir> <json>

  • 执行位置:节点

  • 预期输出:默认JSON

    unmountdevice

    从目录卸载卷的设备。

  • 参数:<mount-dir>

  • 执行位置:节点

  • 预期输出:默认JSON

    • 所有其他操作都应返回包含{"status": "Not supported"}的JSON并退出代码1

步骤

安装FlexVolume驱动程序

  1. 确保可执行文件存在于集群中的所有节点上。

  2. 将可执行文件放置在卷插件路径:/etc/kubernetes/kubelet-plugins/volume/exec/<vendor>~<driver>/<driver>

例如,要为存储foo安装FlexVolume驱动程序,请将可执行文件放置在:/etc/kubernetes/kubelet-plugins/volume/exec/openshift.com~foo/foo

使用FlexVolume驱动程序使用存储

OpenShift Container Platform中的每个PersistentVolume对象都表示存储后端中的一种存储资源,例如卷。

步骤
  • 使用PersistentVolume对象引用已安装的存储。

使用FlexVolume驱动程序的持久卷对象定义示例
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001 (1)
spec:
  capacity:
    storage: 1Gi (2)
  accessModes:
    - ReadWriteOnce
  flexVolume:
    driver: openshift.com/foo (3)
    fsType: "ext4" (4)
    secretRef: foo-secret (5)
    readOnly: true (6)
    options: (7)
      fooServer: 192.168.0.1:1234
      fooVolumeName: bar
1 卷的名称。这是通过持久卷声明或Pod来标识它的方式。此名称可能与后端存储上的卷名称不同。
2 分配给此卷的存储量。
3 驱动程序的名称。此字段是必填字段。
4 卷上存在的文件夹系统。此字段是可选字段。
5 对密钥的引用。调用时,将向FlexVolume驱动程序提供此密钥的密钥和值。此字段是可选字段。
6 只读标志。此字段是可选字段。
7 FlexVolume驱动程序的其他选项。除了用户在options字段中指定的标志外,还会将以下标志传递给可执行文件
"fsType":"<FS type>",
"readwrite":"<rw>",
"secret/key1":"<secret1>"
...
"secret/keyN":"<secretN>"

密钥仅传递给mount或unmount调用。