7.10. /dev/fuse を使用した高速ビルドへのアクセス
/dev/fuse
デバイスを使用して Pod を設定すると、特に権限のないユーザー向けに、より高速で効率的なコンテナーイメージビルドが可能になります。このデバイスにより、権限のない Pod がオーバーレイファイルシステムをマウントできるようになり、Podman などのツールで活用できるようになります。
7.10.1. Pod 内の特権のないビルド用に /dev/fuse を設定する リンクのコピーリンクがクリップボードにコピーされました!
/dev/fuse
デバイスを権限のない Pod に公開すると、Filesystem in Userspace (Fuse) マウントを実行するケイパビリティーが付与されます。そのためには、Pod 定義に io.kubernetes.cri-o.Devices: "/dev/fuse"
アノテーションを追加します。この設定により、Pod 内の権限のないユーザーは、Pod への完全な権限アクセスを許可せずに、権限のあるビルドケイパビリティーを安全かつ効率的に模倣することで、podman
などのツールを fuse-overlayfs
などのストレージドライバーとともに使用できるようになります。
手順
/dev/fuse
アクセスを持つ Pod を定義します。次の内容で
fuse-builder-pod.yaml
という名前の YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記クラスターの Security Context Constraints (SCC) またはその他のポリシーに応じて、たとえば、
fuse-overlayfs
が動作するために/dev/fuse
だけでは不十分な場合に特定のケイパビリティーを許可するなど、securityContext
仕様をさらに調整する必要がある場合があります。以下のコマンドを実行して 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 Pod にアクセスし、ビルド環境を準備します。
fuse-builder-pod
Pod がRunning
状態になったら、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 dockerfile を作成し、Podman を使用してイメージをビルドします。
Pod のシェル内および
/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 を終了してクリーンアップします。
完了したら、Pod のシェルセッションを終了します。
exit
$ exit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 不要になった Pod は削除できます。
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