4.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 つの方法で有効にできます。

  1. クラスター内のすべてのユーザーワークスペースの場合、「すべてのワークスペースで fuse-overlayfs を有効にする」 を参照してください。
  2. 特定のユーザーに属するワークスペースの場合、https://access.redhat.com/documentation/ja-jp/red_hat_openshift_dev_spaces/3.18/html-single/user_guide/index#end-user-guide:using-the-fuse-overlay-storage-driver を参照してください。

4.12.1. OpenShift バージョン 4.15 より前のバージョンへのアクセスを有効にする

fuse-overlayfs を使用するには、まず /dev/fuse をワークスペースコンテナーからアクセスできるようにする必要があります。

注記

OpenShift バージョン 4.15 以降では、/dev/fuse デバイスがデフォルトで使用できるため、この手順は必要ありません。リリースノート を参照してください。

警告

OpenShift クラスター上で MachineConfig リソースを作成することは、クラスターに高度なシステムレベルの変更を加えることになるため、潜在的に危険なタスクです。

詳細および考えられるリスクは、MachineConfig のドキュメント を参照してください。

前提条件

  • 使用しているオペレーティングシステムに Butane ツール (butane) がインストールされている。
  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用方法 を参照してください。

手順

  1. OpenShift クラスターのタイプ (シングルノードクラスター、または個別のコントロールプレーンとワーカーノードを持つマルチノードクラスター) に基づいて環境変数を設定します。

    • シングルノードクラスターの場合は、次のように設定します。

      $ NODE_ROLE=master
    • マルチノードクラスターの場合は、次のように設定します。

      $ NODE_ROLE=worker
  2. OpenShift Butane 設定バージョンの環境変数を設定します。この変数は、OpenShift クラスターのメジャーバージョンとマイナーバージョンです。たとえば、4.12.04.13.0、または 4.14.0 です。

    $ VERSION=4.12.0
  3. 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
    1
    CRI-O の新しいドロップイン設定ファイルへの絶対ファイルパス。
    2
    新しいドロップイン設定ファイルの内容。
    3
    podman-fuse ワークロードを定義します。
    4
    podman-fuse ワークロード設定をアクティブにする Pod アノテーション。
    5
    podman-fuse ワークロードが処理できるアノテーションのリスト。
    6
    ユーザーが io.kubernetes.cri-o.Devices アノテーションを使用して指定できるホスト上のデバイスのリスト。
  4. 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
  5. worker ロールを持つすべてのノードのステータスが Ready になると、次のアノテーションを持つすべての Pod で /dev/fuse が利用できるようになります。

    io.openshift.podman-fuse: ''
    io.kubernetes.cri-o.Devices: /dev/fuse

検証手順

  1. worker ロールを持つノードの名前を取得します。

    $ oc get nodes
  2. ワーカーノードへの oc debug セッションを開きます。

    $ oc debug node/<nodename>
  3. 99-podman-fuse という名前の新しい CRI-O 設定ファイルが存在することを確認します。

    sh-4.4# stat /host/etc/crio/crio.conf.d/99-podman-fuse

4.12.1.1. ワークスペース内で Podman と Buildah への fuse-overlayfs の使用

https://access.redhat.com/documentation/ja-jp/red_hat_openshift_dev_spaces/3.18/html-single/user_guide/index#end-user-guide:using-the-fuse-overlay-storage-driver に従って、既存のワークスペースを更新し、Podman および Buildah 用の fuse-overlayfs ストレージドライバーを使用できます。

4.12.2. すべてのワークスペースで fuse-overlayfs を有効にする

ワークスペースのコンテナーエントリーポイントスクリプトを設定して、そのコンテナーを使用するすべてのワークスペースで Fuse-overlayfs が使用されるようにする方法を説明します。

Universal Developer Image (UDI) には、必要な設定がデフォルトですでに含まれています。ただし、Podman 5.x では /home/user/.config フォルダーを現在のユーザーが所有する必要があるため、カスタムイメージを使用する場合はスクリプトを手動で設定する必要があります。

前提条件

手順

  1. CheCluster カスタムリソースの spec.devEnvironments.workspacesPodAnnotations フィールドに必要なアノテーションを設定します。

    kind: CheCluster
    apiVersion: org.eclipse.che/v2
    spec:
      devEnvironments:
        workspacesPodAnnotations:
          io.kubernetes.cri-o.Devices: /dev/fuse
    注記

    OpenShift バージョン 4.14 以下の場合は、io.openshift.podman-Fuse: "" アノテーションも必要です。

  2. オプション: ワークスペースコンテナーにカスタムイメージを使用している場合は、/home/user/.config フォルダーを作成し、エントリーポイントを介して実行時に storage.conf ファイルを設定します。これを行うには、イメージをビルドする前に、ワークスペースコンテナーイメージのエントリーポイントスクリプトに次のコードを追加します。エントリーポイントに /home/user/.config フォルダーを作成すると、フォルダーは現在のユーザーによって所有されることになりますが、これはイメージのビルド時にはわかりません。

    # Configure container builds to use vfs or fuse-overlayfs
    if [ ! -d "${HOME}/.config/containers" ]; then
      mkdir -p ${HOME}/.config/containers
      if [ -c "/dev/fuse" ] && [ -f "/usr/bin/fuse-overlayfs" ]; then
        (echo '[storage]';echo 'driver = "overlay"';echo '[storage.options.overlay]';echo 'mount_program = "/usr/bin/fuse-overlayfs"') > ${HOME}/.config/containers/storage.conf
      else
        (echo '[storage]';echo 'driver = "vfs"') > "${HOME}"/.config/containers/storage.conf
      fi
    fi

    これにより、/home/user/.config がまだ存在しない場合は、フォルダーが作成され、所有者は user になります。たとえば、永続ボリュームに保存されている場合、/home/user/.config がすでに存在している可能性があります。

  3. ワークスペースを起動し、/home/user/.config の所有者が user であることを確認します。

    $ ls -la /home/user

    出力例:

    ...
    drwxrwsr-x.  3 user 1000660000   24 Dec 24 15:40 .config
  4. ストレージドライバーが overlay であることを確認します。

    $ podman info | grep overlay

    出力例:

    graphDriverName: overlay
      overlay.mount_program:
        Executable: /usr/bin/fuse-overlayfs
        Package: fuse-overlayfs-1.14-1.el9.x86_64
          fuse-overlayfs: version 1.13-dev
      Backing Filesystem: overlayfs
    注記

    既存のワークスペースで、次のエラーが発生する可能性があります。

    ERRO[0000] User-selected graph driver "overlay" overwritten by graph driver "vfs" from database - delete libpod local files ("/home/user/.local/share/containers/storage") to resolve.  May prevent use of images created by other tools

    この場合、エラーメッセージに記載されているように libpod ローカルファイルを削除します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.