4.12. fuse-overlayfs 구성
기본적으로 UBI(Universal Developer Image)에는 작업 공간 내에서 컨테이너 이미지를 빌드하고 내보내는 데 사용할 수 있는 Podman 및 Buildah가 포함되어 있습니다. 그러나 UDI의 Podman 및 Buildah는 COW(Copy-On-Write) 지원을 제공하지 않는 vfs 스토리지 드라이버를 사용하도록 구성됩니다. 보다 효율적인 이미지 관리를 위해 루트 없는 환경에서 COW(Copy-On-Write)를 지원하는 fuse-overlayfs 스토리지 드라이버를 사용하십시오.
4.15 이전 버전의 OpenShift의 작업 공간에 fuse-overlayfs를 활성화하려면 관리자가 먼저 4.12.1절. “4.15 이전의 OpenShift 버전에 대한 액세스 활성화” 를 통해 클러스터에서 /dev/fuse 액세스를 활성화해야 합니다.
/dev/fuse 장치는 기본적으로 사용 가능하므로 OpenShift 버전 4.15 이상에는 필요하지 않습니다. 릴리스 정보를 참조하십시오.
/dev/fuse 액세스를 활성화한 후 다음 두 가지 방법으로 fuse-overlayfs를 활성화할 수 있습니다.
- 클러스터 내의 모든 사용자 작업 공간 4.12.2절. “모든 작업 공간에 fuse-overlayfs 활성화”을 참조하십시오.
- 특정 사용자에게 속한 작업 공간의 경우 https://access.redhat.com/documentation/en-us/red_hat_openshift_dev_spaces/3.19/html-single/user_guide/index#end-user-guide:using-the-fuse-overlay-storage-driver 을 참조하십시오.
4.12.1. 4.15 이전의 OpenShift 버전에 대한 액세스 활성화 링크 복사링크가 클립보드에 복사되었습니다!
fuse-overlayfs를 사용하려면 먼저 작업 공간 컨테이너에서 /dev/fuse 에 액세스할 수 있도록 해야 합니다.
/dev/fuse 장치를 기본적으로 사용할 수 있으므로 OpenShift 버전 4.15 이상에는 이 절차가 필요하지 않습니다. 릴리스 정보를 참조하십시오.
OpenShift 클러스터에서 MachineConfig 리소스를 생성하는 것은 클러스터에 대한 고급 시스템 수준의 변경을 수행하기 때문에 잠재적으로 위험한 작업입니다.
자세한 내용 및 가능한 위험은 MachineConfig 문서를 참조하십시오.
사전 요구 사항
절차
OpenShift 클러스터 유형(단일 노드 클러스터 또는 별도의 컨트롤 플레인 및 작업자 노드가 있는 다중 노드 클러스터)에 따라 환경 변수를 설정합니다.
단일 노드 클러스터의 경우 다음을 설정합니다.
$ NODE_ROLE=master다중 노드 클러스터의 경우 다음을 설정합니다.
$ NODE_ROLE=worker
OpenShift Butane 구성 버전의 환경 변수를 설정합니다. 이 변수는 OpenShift 클러스터의 메이저 및 마이너 버전입니다. 예를 들면
4.12.0,4.13.0또는4.14.0입니다.$ VERSION=4.12.0NODE_ROLE노드에99-podman-fuse라는 드롭인 CRI-O 구성 파일을 생성하는MachineConfig리소스를 생성합니다. 이 구성 파일을 사용하면 특정 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-fuse1 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 EOFMachineConfig리소스를 적용하면 변경 사항이 적용되면작업자역할이 있는 각 노드에 대해 예약이 일시적으로 비활성화됩니다. 노드 상태를 확인합니다.$ 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작업자역할의 모든 노드의 상태가Ready이면 다음 주석이 있는 모든 Pod에서/dev/fuse를 사용할 수 있습니다.io.openshift.podman-fuse: '' io.kubernetes.cri-o.Devices: /dev/fuse
검증 단계
작업자역할이 있는 노드의 이름을 가져옵니다.$ oc get nodes작업자 노드에 대한
oc 디버그세션을 엽니다.$ oc debug node/<nodename>99-podman-fuse라는 새 CRI-O 구성 파일이 있는지 확인합니다.sh-4.4# stat /host/etc/crio/crio.conf.d/99-podman-fuse
4.12.1.1. 작업 공간 내에서 Podman 및 Buildah에 fuse-overlayfs 사용 링크 복사링크가 클립보드에 복사되었습니다!
사용자는 https://access.redhat.com/documentation/en-us/red_hat_openshift_dev_spaces/3.19/html-single/user_guide/index#end-user-guide:using-the-fuse-overlay-storage-driver 에 따라 Podman 및 Buildah의 fuse-overlayfs 스토리지 드라이버를 사용하도록 기존 작업 공간을 업데이트할 수 있습니다.
4.12.2. 모든 작업 공간에 fuse-overlayfs 활성화 링크 복사링크가 클립보드에 복사되었습니다!
해당 컨테이너를 사용하는 모든 작업 공간에 fuse-overlayfs를 사용할 수 있도록 작업 공간의 컨테이너 진입점 스크립트를 구성하는 방법을 알아봅니다.
UDI(Universal Developer Image)에는 기본적으로 필요한 구성이 이미 포함되어 있습니다. 그러나 Podman 5.x로 인해 사용자 지정 이미지를 사용하는 경우 현재 사용자가 /home/user/.config 폴더를 소유해야 하는 경우 스크립트를 수동으로 구성해야 합니다.
사전 요구 사항
- OpenShift 버전 4.14 이하의 경우 4.12.1절. “4.15 이전의 OpenShift 버전에 대한 액세스 활성화” 섹션이 완료되었습니다.
-
대상 OpenShift 클러스터에 대한 관리 권한이 있는 활성
oc세션. CLI 시작하기를 참조하십시오.
절차
CheCluster 사용자 정의 리소스의
spec.devEnvironments.workspacesPodAnnotations필드에 필요한 주석을 설정합니다.kind: CheCluster apiVersion: org.eclipse.che/v2 spec: devEnvironments: workspacesPodAnnotations: io.kubernetes.cri-o.Devices: /dev/fuse참고OpenShift 버전 4.14 이하의 경우
io.openshift.podman-fuse: ""주석도 필요합니다.선택 사항: 작업 공간 컨테이너에 사용자 지정 이미지를 사용하는 경우
/home/user/.config폴더를 생성하고 진입점을 통해 런타임에서storage.conf파일을 구성합니다. 이렇게 하려면 이미지를 빌드하기 전에 작업 공간 컨테이너 이미지의 진입점 스크립트에 다음을 추가합니다. 진입점에/home/user/.config폴더를 생성하면 이미지 빌드 시 알 수 없는 현재 사용자가 폴더를 소유하게 됩니다.# Configure container builds to use vfs or fuse-overlayfs if [ ! -d "${HOME}/.config/containers" ]; then mkdir -p ${HOME}/.config/containers if [ -c "/dev/fuse" ] && [ -f "/usr/bin/fuse-overlayfs" ]; then (echo '[storage]';echo 'driver = "overlay"';echo '[storage.options.overlay]';echo 'mount_program = "/usr/bin/fuse-overlayfs"') > ${HOME}/.config/containers/storage.conf else (echo '[storage]';echo 'driver = "vfs"') > "${HOME}"/.config/containers/storage.conf fi fi이렇게 하면
/home/user/.config가 아직 존재하지 않는 경우 폴더가 생성되어사용자가소유합니다. 예를 들어/home/user/.config가 영구 볼륨에 저장된 경우 이미 존재할 수 있습니다.작업 영역을 시작하고
/home/user/.config의 소유자가user인지 확인합니다.$ ls -la /home/user출력 예:
... drwxrwsr-x. 3 user 1000660000 24 Dec 24 15:40 .config스토리지 드라이버가
오버레이인지 확인합니다.$ podman info | grep overlay출력 예:
graphDriverName: overlay overlay.mount_program: Executable: /usr/bin/fuse-overlayfs Package: fuse-overlayfs-1.14-1.el9.x86_64 fuse-overlayfs: version 1.13-dev 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 로컬 파일을 삭제합니다.