3.12. 配置 fuse-overlayfs


默认情况下,通用基础镜像(UDI)包含 Podman 和 Buildah,您可以在工作区中构建和推送容器镜像。但是,UDI 中的 Podman 和 Buildah 被配置为使用 vfs 存储驱动程序,该驱动程序不提供写时复制支持。要更有效地镜像管理,请使用 fuse-overlayfs 存储驱动程序,该驱动程序在无根环境中支持 copy-on-write。

要为早于 4.15 的 OpenShift 版本启用 fuse-overlayfs,管理员必须首先通过 第 3.12.1 节 “为早于 4.15 的 OpenShift 版本启用访问” 在集群中启用 /dev/fuse 访问。

OpenShift 版本 4.15 及更高版本不需要这样做,因为 /dev/fuse 设备默认可用。请参阅 发行注记

启用 /dev/fuse 访问后,可通过两种方式启用 fuse-overlayfs:

3.12.1. 为早于 4.15 的 OpenShift 版本启用访问

要使用 fuse-overlayfs,您必须首先使 /dev/fuse 可以被工作区容器访问。

注意

OpenShift 版本 4.15 及更新的版本不需要这个过程,因为 /dev/fuse 设备默认可用。请参阅 发行注记

警告

在 OpenShift 集群中创建 MachineConfig 资源是一个潜在的危险任务,因为您要对集群进行高级系统级更改。

查看 MachineConfig 文档 以了解更多详情和可能的风险。

先决条件

  • Butane 工具(但ane)安装在您使用的操作系统中。
  • 对目标 OpenShift 集群具有管理权限的活动 oc 会话。请参阅 CLI 入门

流程

  1. 根据 OpenShift 集群的类型设置环境变量:单一节点集群,或使用单独的 control plane 和 worker 节点的多节点集群。

    • 对于单一节点集群,请设置:

      $ NODE_ROLE=master
      Copy to Clipboard
    • 对于多节点集群,请设置:

      $ NODE_ROLE=worker
      Copy to Clipboard
  2. 为 OpenShift Butane 配置版本设置环境变量。此变量是 OpenShift 集群的主版本和次要版本。例如: 4.12.04.13.04.14.0

    $ VERSION=4.12.0
    Copy to Clipboard
  3. 创建一个 MachineConfig 资源,在 NODE_ROLE 节点上创建一个名为 99-podman-fuse 的 drop-in CRI-O 配置文件。此配置文件可让您访问某些 pod 的 /dev/fuse 设备。

    cat << EOF | butane | oc apply -f -
    variant: openshift
    version: ${VERSION}
    metadata:
      labels:
        machineconfiguration.openshift.io/role: ${NODE_ROLE}
      name: 99-podman-dev-fuse-${NODE_ROLE}
    storage:
      files:
      - path: /etc/crio/crio.conf.d/99-podman-fuse 
    1
    
        mode: 0644
        overwrite: true
        contents: 
    2
    
          inline: |
            [crio.runtime.workloads.podman-fuse] 
    3
    
            activation_annotation = "io.openshift.podman-fuse" 
    4
    
            allowed_annotations = [
              "io.kubernetes.cri-o.Devices" 
    5
    
            ]
            [crio.runtime]
            allowed_devices = ["/dev/fuse"] 
    6
    
    EOF
    Copy to Clipboard
    1
    CRI-O 的新置入配置文件的绝对路径。
    2
    新置入配置文件的内容。
    3
    定义 podman-fuse 工作负载。
    4
    激活 podman-fuse 工作负载设置的 pod 注解。
    5
    允许 podman-fuse 工作负载处理的注释列表。
    6
    用户可以使用 io.kubernetes.cri-o.Devices 注解指定的主机上的设备列表。
  4. 应用 MachineConfig 资源后,在应用更改时,会临时禁用具有 worker 角色的每个节点调度。查看节点的状态。

    $ oc get nodes
    Copy to Clipboard

    输出示例:

    NAME                           STATUS                     ROLES    AGE   VERSION
    ip-10-0-136-161.ec2.internal   Ready                      worker   28m   v1.27.9
    ip-10-0-136-243.ec2.internal   Ready                      master   34m   v1.27.9
    ip-10-0-141-105.ec2.internal   Ready,SchedulingDisabled   worker   28m   v1.27.9
    ip-10-0-142-249.ec2.internal   Ready                      master   34m   v1.27.9
    ip-10-0-153-11.ec2.internal    Ready                      worker   28m   v1.27.9
    ip-10-0-153-150.ec2.internal   Ready                      master   34m   v1.27.9
    Copy to Clipboard
  5. 当所有具有 worker 角色的节点都处于 Ready 状态后,/dev/fuse 可供带有以下注解的任何 pod 使用:

    io.openshift.podman-fuse: ''
    io.kubernetes.cri-o.Devices: /dev/fuse
    Copy to Clipboard

验证步骤

  1. 获取具有 worker 角色的节点名称:

    $ oc get nodes
    Copy to Clipboard
  2. 打开到 worker 节点的 oc debug 会话。

    $ oc debug node/<nodename>
    Copy to Clipboard
  3. 验证存在名为 99-podman-fuse 的新 CRI-O 配置文件。

    sh-4.4# stat /host/etc/crio/crio.conf.d/99-podman-fuse
    Copy to Clipboard

3.12.1.1. 在工作区中为 Podman 和 Buildah 使用 fuse-overlayfs

用户可遵循 https://access.redhat.com/documentation/zh-cn/red_hat_openshift_dev_spaces/3.16/html-single/user_guide/index#end-user-guide:using-the-fuse-overlay-storage-driver 来更新现有工作区,为 Podman 和 Buildah 使用 fuse-overlayfs 存储驱动程序。

3.12.2. 为所有工作区启用 fuse-overlayfs

先决条件

流程

  1. 创建一个 ConfigMap,为所有用户工作区挂载 storage.conf 文件。

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: fuse-overlay
      namespace: openshift-devspaces
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-config
      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 将导致所有正在运行的工作区重启。

  2. 在 CheCluster 自定义资源的 spec.devEnvironments.workspacesPodAnnotations 字段中设置所需的注解。

    kind: CheCluster
    apiVersion: org.eclipse.che/v2
    spec:
      devEnvironments:
        workspacesPodAnnotations:
          io.kubernetes.cri-o.Devices: /dev/fuse
    Copy to Clipboard
    注意

    对于 4.15 之前的 OpenShift 版本,还需要 io.openshift.podman-fuse: "" 注解。

验证步骤

  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