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 文档以了解 更多详细信息和可能的风险。
流程
根据 OpenShift 集群的类型设置环境变量:单一节点集群,或具有独立 control plane 和 worker 节点的多节点集群。
对于单一节点集群,设置:
$ NODE_ROLE=master
对于多节点集群,设置:
$ NODE_ROLE=worker
为 OpenShift Butane 配置版本设置环境变量。此变量是 OpenShift 集群的主版本和次要版本。例如:
4.12.0
、4.13.0
或4.14.0
。$ VERSION=4.12.0
创建一个
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
应用
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
当所有具有
worker
角色的节点都处于Ready
状态后,/dev/fuse
将提供给具有以下注解的任何 pod。io.openshift.podman-fuse: '' io.kubernetes.cri-o.Devices: /dev/fuse
验证步骤
获取具有
worker
角色的节点名称:$ oc get nodes
打开到 worker 节点的
oc debug
会话。$ oc debug node/<nodename>
验证名为
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 存储驱动程序。