7.10. /dev/fuse를 사용하여 더 빠른 빌드에 액세스


특히 권한이 없는 사용자의 경우 더 빠르고 효율적인 컨테이너 이미지 빌드를 활성화하도록 /dev/fuse 장치를 사용하여 Pod를 구성할 수 있습니다. 이 장치를 사용하면 권한이 없는 Pod에서 오버레이 파일 시스템을 마운트할 수 있으며 Podman과 같은 툴에서 활용할 수 있습니다.

7.10.1. Pod에서 권한이 없는 빌드에 대한 /dev/fuse 구성

/dev/fuse 장치를 권한이 없는 Pod에 노출하면 사용자 공간(FUSE) 마운트에서 파일 시스템을 수행할 수 있는 기능을 부여합니다. 이를 위해 Pod 정의에 io.kubernetes.cri-o.Devices: "/dev/fuse" 주석을 추가합니다. 이 설정을 사용하면 Pod 내의 권한이 없는 사용자가 Pod에 대한 전체 권한 권한을 부여하지 않고 권한 있는 빌드 기능을 안전하고 효율적인 방식으로 fuse-overlayfs 와 같은 스토리지 드라이버와 함께 사용할 수 있습니다.

프로세스

  1. /dev/fuse 액세스를 사용하여 Pod를 정의합니다.

    • 다음 콘텐츠를 사용하여 fuse-builder-pod.yaml 이라는 YAML 파일을 생성합니다.

      apiVersion: v1
      kind: Pod
      metadata:
        name: fuse-builder-pod
        annotations:
          io.kubernetes.cri-o.Devices: "/dev/fuse" 
      1
      
      spec:
        containers:
        - name: build-container
          image: quay.io/podman/stable 
      2
      
          command: ["/bin/sh", "-c"]
          args: ["echo 'Container is running. Use oc exec to get a shell.'; sleep infinity"] 
      3
      
          securityContext: 
      4
      
            runAsUser: 1000
      Copy to Clipboard Toggle word wrap
      1
      io.kubernetes.cri-o.Devices: "/dev/fuse" 주석은 FUSE 장치를 사용할 수 있도록 합니다.
      2
      이 주석은 podman (예: quay.io/podman/stable)을 포함하는 이미지를 사용하는 컨테이너를 지정합니다.
      3
      이 명령은 컨테이너를 계속 실행하므로 해당 컨테이너를 실행할 수 있습니다.
      4
      이 주석은 컨테이너를 권한이 없는 사용자로 실행하는 securityContext (예: runAsUser: 1000)를 지정합니다. *
      참고

      클러스터의 SCC(보안 컨텍스트 제약 조건) 또는 기타 정책에 따라 /dev/fuse alone이 fuse-overlayfs 가 작동하기에 충분하지 않은 경우 특정 기능을 허용하여 securityContext 사양을 추가로 조정해야 할 수 있습니다.

    • 다음 명령을 실행하여 Pod를 생성합니다.

      $ oc apply -f fuse-builder-pod.yaml
      Copy to Clipboard Toggle word wrap
  2. Pod가 실행 중인지 확인합니다.

    $ oc get pods fuse-builder-pod
    Copy to Clipboard Toggle word wrap
  3. Pod에 액세스하여 빌드 환경을 준비합니다.

    fuse-builder-pod Pod가 Running 상태인 후 build-container 환경에 쉘 세션을 엽니다.

    $ oc exec -ti fuse-builder-pod -- /bin/bash
    Copy to Clipboard Toggle word wrap

    이제 컨테이너에 들어 있습니다. 권한이 없는 사용자가 기본 작업 디렉터리를 쓸 수 없으므로 /tmp 와 같은 쓰기 가능한 디렉터리로 변경합니다.

    $ cd /tmp
    $ pwd
    /tmp
    Copy to Clipboard Toggle word wrap
  4. dockerfile을 생성하고 Podman을 사용하여 이미지를 빌드합니다.

    Pod의 쉘과 /tmp 디렉터리 내에서 Dockerfile 을 생성하고 podman 을 사용하여 컨테이너 이미지를 빌드할 수 있습니다. fuse-overlayfs 가 기본 또는 구성된 스토리지 드라이버인 경우 Podman은 사용 가능한 /dev/fuse 장치 때문에 fuse-overlayfs 를 활용할 수 있습니다.

    1. 샘플 Dockerfile 을 생성합니다.

      $ cat > Dockerfile <<EOF
      FROM registry.access.redhat.com/ubi9/ubi-minimal
      RUN microdnf install -y findutils && microdnf clean all
      RUN echo "This image was built inside a pod with /dev/fuse by user $(id -u)" > /app/build_info.txt
      COPY Dockerfile /app/Dockerfile_copied
      WORKDIR /app
      CMD ["sh", "-c", "cat /app/build_info.txt && echo '--- Copied Dockerfile ---' && cat /app/Dockerfile_copied"]
      EOF
      Copy to Clipboard Toggle word wrap
    2. podman 을 사용하여 이미지를 빌드합니다. -t 플래그는 이미지에 태그를 지정합니다.

      $ podman build -t my-fuse-built-image:latest .
      Copy to Clipboard Toggle word wrap

      Podman에서 빌드 단계를 실행해야 합니다.

  5. 선택 사항: 빌드된 이미지를 테스트합니다.

    fuse-builder-pod 내부에서는 방금 빌드한 이미지에서 컨테이너를 실행하여 테스트할 수 있습니다.

    $ podman run --rm my-fuse-built-image:latest
    Copy to Clipboard Toggle word wrap

    이렇게 하면 /app/build_info.txt 파일과 복사한 Dockerfile의 콘텐츠가 출력됩니다.

  6. Pod를 종료하고 정리합니다.

    • 완료되면 Pod의 쉘 세션을 종료합니다.

      $ exit
      Copy to Clipboard Toggle word wrap
    • 그런 다음 Pod가 더 이상 필요하지 않은 경우 삭제할 수 있습니다.

      $ oc delete pod fuse-builder-pod
      Copy to Clipboard Toggle word wrap
    • 로컬 YAML 파일을 제거합니다.

      $ rm fuse-builder-pod.yaml
      Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat