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
    • 对于多节点集群,请设置:

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

    $ VERSION=4.12.0
  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
    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

    输出示例:

    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
  5. 当所有具有 worker 角色的节点都处于 Ready 状态后,/dev/fuse 可供带有以下注解的任何 pod 使用:

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

验证步骤

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

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

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

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

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

用户可遵循 https://access.redhat.com/documentation/zh-cn/red_hat_openshift_dev_spaces/3.15/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"
  2. 在 CheCluster 自定义资源的 spec.devEnvironments.workspacesPodAnnotations 字段中设置所需的注解。

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

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

验证步骤

  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
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.