3.12. fuse-overlayfs の設定
デフォルトでは、Universal Developer Image (UDI) には、ワークスペース内でコンテナーイメージをビルドおよびプッシュするために使用できる Podman と Buildah が含まれています。ただし、UDI の Podman と Buildah は、コピーオンライトのサポートを提供しない vfs
ストレージドライバーを使用するように設定されています。より効率的なイメージ管理を行うには、ルートレス環境でコピーオンライトをサポートする fuse-overlayfs ストレージドライバーを使用します。
OpenShift バージョン 4.15 より前のワークスペースで fuse-overlayfs を有効にするには、管理者はまず 「OpenShift バージョン 4.15 より前のバージョンへのアクセスを有効にする」 の手順でクラスター上の /dev/fuse
アクセスを有効にする必要があります。
OpenShift バージョン 4.15 以降では、/dev/fuse
デバイスがデフォルトで使用できるため、これは必要ありません。リリースノート を参照してください。
/dev/fuse
アクセスを有効にした後、fuse-overlayfs は次の 2 つの方法で有効にできます。
- クラスター内のすべてのユーザーワークスペースの場合、「すべてのワークスペースで fuse-overlayfs を有効にする」 を参照してください。
- 特定のユーザーに属するワークスペースの場合、https://access.redhat.com/documentation/ja-jp/red_hat_openshift_dev_spaces/3.15/html-single/user_guide/index#end-user-guide:using-the-fuse-overlay-storage-driver を参照してください。
3.12.1. OpenShift バージョン 4.15 より前のバージョンへのアクセスを有効にする
fuse-overlayfs を使用するには、まず /dev/fuse
をワークスペースコンテナーからアクセスできるようにする必要があります。
OpenShift バージョン 4.15 以降では、/dev/fuse
デバイスがデフォルトで使用できるため、この手順は必要ありません。リリースノート を参照してください。
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.0
NODE_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-fuse 1 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 EOF
MachineConfig
リソースを適用した後、変更が適用されると、worker
ロールを持つ各ノードのスケジュール設定が一時的に無効になります。ノードのステータスを表示します。$ 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
worker
ロールを持つすべてのノードのステータスがReady
になると、次のアノテーションを持つすべての Pod で/dev/fuse
が利用できるようになります。io.openshift.podman-fuse: '' io.kubernetes.cri-o.Devices: /dev/fuse
検証手順
worker
ロールを持つノードの名前を取得します。$ oc get nodes
ワーカーノードへの
oc debug
セッションを開きます。$ oc debug node/<nodename>
99-podman-fuse
という名前の新しい CRI-O 設定ファイルが存在することを確認します。sh-4.4# stat /host/etc/crio/crio.conf.d/99-podman-fuse
3.12.1.1. ワークスペース内で Podman と Buildah への fuse-overlayfs の使用
https://access.redhat.com/documentation/ja-jp/red_hat_openshift_dev_spaces/3.15/html-single/user_guide/index#end-user-guide:using-the-fuse-overlay-storage-driver に従って、既存のワークスペースを更新し、Podman および Buildah 用の fuse-overlayfs ストレージドライバーを使用できます。
3.12.2. すべてのワークスペースで fuse-overlayfs を有効にする
前提条件
- 「OpenShift バージョン 4.15 より前のバージョンへのアクセスを有効にする」 セクションを完了した。これは、OpenShift バージョン 4.15 以降には必要ありません。
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。
手順
すべてのユーザーワークスペースに
storage.conf
ファイルをマウントする ConfigMap を作成します。kind: ConfigMap apiVersion: v1 metadata: name: fuse-overlay namespace: openshift-devspaces labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config annotations: controller.devfile.io/mount-as: subpath controller.devfile.io/mount-path: /home/user/.config/containers/ data: storage.conf: | [storage] driver = "overlay" [storage.options.overlay] mount_program="/usr/bin/fuse-overlayfs"
CheCluster カスタムリソースの
spec.devEnvironments.workspacesPodAnnotations
フィールドに必要なアノテーションを設定します。kind: CheCluster apiVersion: org.eclipse.che/v2 spec: devEnvironments: workspacesPodAnnotations: io.kubernetes.cri-o.Devices: /dev/fuse
注記4.15 より前のバージョンの OpenShift では、
io.openshift.podman-fuse: ""
アノテーションも必要です。
検証手順
ワークスペースを起動し、ストレージドライバーが
overlay
であることを確認します。$ podman info | grep overlay
出力例:
graphDriverName: overlay overlay.mount_program: Executable: /usr/bin/fuse-overlayfs Package: fuse-overlayfs-1.12-1.module+el8.9.0+20326+387084d0.x86_64 fuse-overlayfs: version 1.12 Backing Filesystem: overlayfs