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


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

7.10.1. 포드에서 권한이 없는 빌드를 위해 /dev/fuse 구성

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

프로세스

  1. /dev/fuse 액세스로 포드를 정의합니다.

    • 다음 내용으로 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
      이 명령은 컨테이너를 계속 실행하여 컨테이너로 exec를 실행할 수 있도록 합니다.
      4
      이 주석은 컨테이너를 권한이 없는 사용자로 실행하는 securityContext를 지정합니다(예: runAsUser: 1000 ).*
      참고

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

    • 다음 명령을 실행하여 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. 포드에 접근하여 빌드 환경을 준비합니다.

    fuse-builder-pod 포드가 실행 상태가 되면 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. Podman을 사용하여 dockerfile을 만들고 이미지를 빌드합니다.

    이제 포드 셸 내부와 /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에서 셸 세션을 종료합니다.

      $ exit
      Copy to Clipboard Toggle word wrap
    • 더 이상 필요하지 않은 포드는 다음과 같이 삭제할 수 있습니다.

      $ 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