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
과 같은 도구를 사용할 수 있으며, 포드에 대한 전체 권한 액세스를 부여하지 않고도 안전하고 효율적인 방식으로 권한이 있는 빌드 기능을 모방할 수 있습니다.
프로세스
/dev/fuse
액세스로 포드를 정의합니다.다음 내용으로
fuse-builder-pod.yaml
이라는 YAML 파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고클러스터의 보안 컨텍스트 제약(SCC) 또는 기타 정책에 따라
securityContext
사양을 추가로 조정해야 할 수도 있습니다. 예를 들어,/dev/fuse
만으로는fuse-overlayfs가
작동하기에 충분하지 않은 경우 특정 기능을 허용해야 할 수 있습니다.다음 명령을 실행하여 Pod를 생성합니다.
oc apply -f fuse-builder-pod.yaml
$ oc apply -f fuse-builder-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pod가 실행 중인지 확인합니다.
oc get pods fuse-builder-pod
$ oc get pods fuse-builder-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 포드에 접근하여 빌드 환경을 준비합니다.
fuse-builder-pod
포드가실행
상태가 되면build-container
환경에서 셸 세션을 엽니다.oc exec -ti fuse-builder-pod -- /bin/bash
$ oc exec -ti fuse-builder-pod -- /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 컨테이너 안에 들어왔습니다. 권한이 없는 사용자는 기본 작업 디렉토리에 쓸 수 없을 수 있으므로
/tmp
와 같은 쓰기 가능한 디렉토리로 변경합니다.cd /tmp pwd
$ cd /tmp $ pwd /tmp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman을 사용하여 dockerfile을 만들고 이미지를 빌드합니다.
이제 포드 셸 내부와
/tmp
디렉토리에서Dockerfile을
만들고podman을
사용하여 컨테이너 이미지를 빌드할 수 있습니다.fuse-overlayfs가
기본 또는 구성된 스토리지 드라이버인 경우 Podman은 사용 가능한/dev/fuse
장치 덕분에fuse-overlayfs를
활용할 수 있습니다.샘플
Dockerfile을
만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman을
사용하여 이미지를 빌드합니다.-t
플래그는 이미지에 태그를 지정합니다.podman build -t my-fuse-built-image:latest .
$ podman build -t my-fuse-built-image:latest .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman이 빌드 단계를 실행하는 것을 볼 수 있습니다.
선택 사항: 빌드된 이미지를 테스트합니다.
fuse-builder-pod
내부에서 방금 빌드한 이미지에서 컨테이너를 실행하여 테스트할 수 있습니다.podman run --rm my-fuse-built-image:latest
$ podman run --rm my-fuse-built-image:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면
/app/build_info.txt
파일과 복사된 Dockerfile의 내용이 출력됩니다.포드에서 나와 청소하세요:
작업이 끝나면 Pod에서 셸 세션을 종료합니다.
exit
$ exit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 더 이상 필요하지 않은 포드는 다음과 같이 삭제할 수 있습니다.
oc delete pod fuse-builder-pod
$ oc delete pod fuse-builder-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로컬 YAML 파일을 제거합니다.
rm fuse-builder-pod.yaml
$ rm fuse-builder-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow