3.8.  使用 FlexVolume 的持久性存储


OpenShift Container Platform 支持 FlexVolume,这是一个树外插件,使用可执行模型与驱动程序进行接口。

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

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

其他参考资源

3.8.1. 关于 FlexVolume 驱动程序

FlexVolume 驱动程序是一个可执行文件,它位于集群中所有节点的一个明确定义的目录中。OpenShift Container Platform 会在需要挂载或卸载由带有 flexVolume 的 PersistentVolume 代表的卷时调用 FlexVolume 驱动程序。

重要

OpenShift Container Platform 不支持 FlexVolume 的 attach 和 detach 操作。

3.8.2. FlexVolume 驱动程序示例

FlexVolume 驱动程序的第一个命令行参数始终是一个操作名称。其他参数都针对于每个操作。大多数操作都使用 JSON 字符串作为参数。这个参数是一个完整的 JSON 字符串,而不是包括 JSON 数据的文件名称。

FlexVolume 驱动程序包含:

  • 所有 flexVolume.options。
  • flexVolume 的一些选项带有 kubernetes.io/前缀 ,如 fsType 和 readwrite。
  • 如果使用 secret,secret 的内容带有 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引用的 secret 的所有键及其值。

OpenShift Container Platform 需要有关驱动程序标准输出的 JSON 数据。如果没有指定,输出会描述操作的结果。

FlexVolume 驱动程序默认输出示例

{
	"status": "<Success/Failure/Not supported>",
	"message": "<Reason for success/failure>"
}

驱动程序的退出代码应该为 0(成功),或 1(失败) 。

操作应该是”幂等”的,这意味着挂载一个已被挂载的卷的结果是一个成功的操作。

3.8.3. 安装 FlexVolume 驱动程序

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

先决条件

  • FlexVolume 驱动程序必须实现以下操作:

    init

    初始化驱动程序。它会在初始化所有节点的过程中被调用。

    • 参数: 无
    • 执行于:节点
    • 预期输出:默认 JSON
    mount

    挂载一个卷到目录。这可包括挂载该卷所需的任何内容,包括查找该设备,然后挂载该设备。

    • 参数: <mount-dir> <json>
    • 执行于:节点
    • 预期输出:默认 JSON
    unmount

    从目录中卸载卷。这可以包括在卸载后清除卷所必需的任何内容。

    • 参数: <mount-dir>
    • 执行于:节点
    • 预期输出:默认 JSON
    mountdevice
    将卷的设备挂载到一个目录,然后 Pod 可以从这个目录绑定挂载。

这个 call-out 不会传递 FlexVolume spec 中指定的 "secrets"。如果您的驱动需要 secret,不要实现这个 call-out。

  • 参数: <mount-dir> <json>
  • 执行于:节点
  • 预期输出:默认 JSON

    unmountdevice
    从目录中卸载卷的设备。
  • 参数: <mount-dir>
  • 执行于:节点
  • 预期输出:默认 JSON

    • 所有其他操作都应该返回带有 {"status":"Not supported"} 及退出代码 1 的 JSON。

流程

安装 FlexVolume 驱动程序:

  1. 确保可执行文件存在于集群中的所有节点上。
  2. 将可执行文件放在卷插件路径: /etc/kubernetes/kubelet-plugins/volume/exec/<vendor>~<driver>/<driver>。

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

3.8.4. 使用 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
对 secret 的引用。此 secret 中的键和值在调用时会提供给 FlexVolume 驱动程序。这个字段是可选的。
6
read-only 标记。这个字段是可选的。
7
FlexVolume 驱动程序的额外选项。除了用户在 options 字段中指定的标记外,以下标记还会传递给可执行文件:
"fsType":"<FS type>",
"readwrite":"<rw>",
"secret/key1":"<secret1>"
...
"secret/keyN":"<secretN>"
注意

secret 只会传递到 mount 或 unmount call-outs。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部