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

    对于 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

验证步骤

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

    $ stat /dev/fuse

完成此步骤后,按照 第 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"

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

storage.conf

[storage]
driver = "overlay"

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

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"
    警告

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

验证步骤

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

    $ podman info | grep overlay

    输出示例:

    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
    注意

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

    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

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

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部