1.5. 为 Podman 和 Buildah 使用 fuse-overlayfs 存储驱动程序


默认情况下,新创建的不使用 devfile 的工作区将使用通用基础镜像(UDI)。UDI 包含开发人员常用的开发工具和依赖项。

Podman 和 Buildah 包含在 UDI 中,允许开发人员从工作区构建和推送容器镜像。

默认情况下,UDI 中的 Podman 和 Buildah 被配置为使用 vfs 存储驱动程序。要更有效地镜像管理,请使用 fuse-overlayfs 存储驱动程序,该驱动程序在无根环境中支持 copy-on-write。

您必须在工作区中使用 fuse-overlayfs 的以下要求:

  1. 对于早于 4.15 的 OpenShift 版本,管理员已通过 https://access.redhat.com/documentation/zh-cn/red_hat_openshift_dev_spaces/3.21/html-single/administration_guide/index#administration-guide:configuring-fuse 在集群中启用了 /dev/fuse 访问。
  2. 工作区具有使用 /dev/fuse 设备所需的注解。请参阅 第 1.5.1 节 “访问 /dev/fuse”
  3. 工作区容器中的 storage.conf 文件已配置为使用 fuse-overlayfs。请参阅 第 1.5.2 节 “使用 ConfigMap 启用 fuse-overlayfs”

1.5.1. 访问 /dev/fuse

您必须有权访问 /dev/fuse,才能使用 fuse-overlayfs。本节论述了如何使 /dev/fuse 可以被工作区容器访问。

先决条件

流程

  1. 使用 pod-overrides 属性将 https://access.redhat.com/documentation/zh-cn/red_hat_openshift_dev_spaces/3.21/html-single/administration_guide/index#administration-guide:configuring-fuse 中定义的所需注解添加到工作区。pod-overrides 属性允许合并工作区 pod 的 spec 中的某些字段。

    对于早于 4.15 的 OpenShift 版本:

    $ oc patch devworkspace <DevWorkspace_name> \
      --patch '{"spec":{"template":{"attributes":{"pod-overrides":{"metadata":{"annotations":{"io.kubernetes.cri-o.Devices":"/dev/fuse","io.openshift.podman-fuse":""}}}}}}}' \
      --type=merge
    Copy to Clipboard

    对于 OpenShift 版本 4.15 及更新的版本:

    $ oc patch devworkspace <DevWorkspace_name> \
      --patch '{"spec":{"template":{"attributes":{"pod-overrides":{"metadata":{"annotations":{"io.kubernetes.cri-o.Devices":"/dev/fuse"}}}}}}}' \
      --type=merge
    Copy to Clipboard

验证步骤

  1. 启动工作区,并验证 /dev/fuse 是否在工作区容器中可用。

    $ stat /dev/fuse
    Copy to Clipboard

完成此步骤后,按照 第 1.5.2 节 “使用 ConfigMap 启用 fuse-overlayfs” 中的步骤为 Podman 使用 fuse-overlayfs。

1.5.2. 使用 ConfigMap 启用 fuse-overlayfs

您可以在 ~/.config/containers/storage.conf 文件中定义 Podman 和 Buildah 的存储驱动程序。以下是 UDI 容器中 /home/user/.config/containers/storage.conf 文件的默认内容:

storage.conf

[storage]
driver = "vfs"
Copy to Clipboard

要使用 fuse-overlayfs,storage.conf 可以设置为以下内容:

storage.conf

[storage]
driver = "overlay"

[storage.options.overlay]
mount_program="/usr/bin/fuse-overlayfs" 
1
Copy to Clipboard

1
fuse-overlayfs 二进制文件的绝对路径。/usr/bin/fuse-overlayfs 路径是 UDI 的默认路径。

您可以在启动工作区后手动执行此操作。另一种选择是基于 UDI 构建新镜像,并更改 storage.conf,并将新镜像用于工作区。

否则,您可以通过创建一个挂载更新文件的 ConfigMap,为项目中的所有工作区更新 /home/user/.config/containers/storage.conf。请参阅 第 6.2 节 “挂载 ConfigMap”

先决条件

注意

由于按照 本指南 挂载的 ConfigMap 将 ConfigMap 的数据挂载到所有工作区,因此此流程会将存储驱动程序设置为 fuse-overlayfs。确保工作区包含使用以下 第 1.5.1 节 “访问 /dev/fuse” 来使用 fuse-overlayfs 所需的注解。

流程

  1. 应用在项目中挂载 /home/user/.config/containers/storage.conf 文件的 ConfigMap。

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: fuse-overlay
      labels:
        controller.devfile.io/mount-to-devworkspace: 'true'
        controller.devfile.io/watch-configmap: 'true'
      annotations:
        controller.devfile.io/mount-as: subpath
        controller.devfile.io/mount-path: /home/user/.config/containers
    data:
      storage.conf: |
        [storage]
        driver = "overlay"
    
        [storage.options.overlay]
        mount_program="/usr/bin/fuse-overlayfs"
    Copy to Clipboard
    警告

    创建此 ConfigMap 将导致所有正在运行的工作区重启。

验证步骤

  1. 启动包含所需注解的工作区,并验证存储驱动程序是否已 覆盖

    $ podman info | grep overlay
    Copy to Clipboard

    输出示例:

    graphDriverName: overlay
      overlay.mount_program:
        Executable: /usr/bin/fuse-overlayfs
        Package: fuse-overlayfs-1.12-1.module+el8.9.0+20326+387084d0.x86_64
          fuse-overlayfs: version 1.12
      Backing Filesystem: overlayfs
    Copy to Clipboard
    注意

    现有工作区可能会出现以下错误:

    ERRO[0000] User-selected graph driver "overlay" overwritten by graph driver "vfs" from database - delete libpod local files ("/home/user/.local/share/containers/storage") to resolve.  May prevent use of images created by other tools
    Copy to Clipboard

    在这种情况下,删除错误信息中所述的 libpod 本地文件。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat