3.11. 配置 fuse-overlayfs


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

3.11.1. 为 OpenShift 启用 /dev/fuse 的容器访问权限

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

注意

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

警告

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

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

先决条件

  • Butane 工具(但 )安装在您正在使用的操作系统中。
  • 具有对目标 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 的置入 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
    新 drop-in 配置文件的内容。
    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.11.2. 在工作区中使用 fuse-overlayfs 用于 Podman 和 Buildah

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.