2.2. 独自のイメージからカスタムイメージを作成する
独自のカスタムイメージを構築できます。ただし、イメージが OpenShift および OpenShift AI と互換性があることを確認する必要があります。
関連情報
- OpenShift Container Platform イメージドキュメントの 一般的なコンテナーイメージガイドラインセクション。
- Red Hat Universal Base Image: https://catalog.redhat.com/software/base-images
- Red Hat Ecosystem Catalog: https://catalog.redhat.com/
2.2.1. 独自のワークベンチイメージを作成するための基本的なガイドライン
次の基本的なガイドラインは、独自のカスタムワークベンチイメージを構築する際に考慮すべき情報を提供します。
USER 1001 で実行するためのイメージの設計
OpenShift では、コンテナーはランダムな UID と GID 0
で実行されます。特にディレクトリーへの書き込みアクセスが必要な場合は、イメージがこれらのユーザーおよびグループの要件と互換性があることを確認してください。ベストプラクティスとしては、イメージを USER 1001
で実行するように設計することです。
$HOME にアーティファクトを配置しない
ワークベンチに接続された永続ボリュームは /opt/app-root/src
にマウントされます。この場所は $HOME
の場所でもあります。したがって、ワークベンチがデプロイされ、永続ボリュームがマウントされた後はファイルやその他のリソースが表示されなくなるため、$HOME
に直接ファイルやその他のリソースを配置しないでください。
API エンドポイントの指定
OpenShift の readiness および liveness プローブは /api
エンドポイントを照会します。Jupyter IDE の場合、これがデフォルトのエンドポイントです。他の IDE の場合は、/api
エンドポイントを実装する必要があります。
2.2.2. 独自のワークベンチイメージを作成するための高度なガイドライン
次のガイドラインは、独自のカスタムワークベンチイメージをビルドする際に考慮すべき情報を提供します。
イメージサイズの最小化
ワークベンチイメージは、"階層化された" ファイルシステムを使用します。ワークベンチイメージファイルで COPY コマンドまたは RUN コマンドを使用するたびに、新しいレイヤーが作成されます。アーティファクトは削除されません。ファイルなどのアーティファクトを削除すると、次のレイヤーで "マスク" されます。したがって、ワークベンチイメージファイルを作成するときは、次のガイドラインを考慮してください。
dnf update
コマンドは使用しないようにしてください。-
Red Hat Catalog の
ubi9/python-39
など、常に更新されるイメージから起動する場合は、dnf update
コマンドを使用する必要がない場合があります。このコマンドは、新しいメタデータを取得し、影響がない可能性のあるファイルを更新し、ワークベンチのイメージサイズを増やします。 -
古いバージョンで
dnf update
を実行するのではなく、ベースイメージの新しいバージョンを指定します。
-
Red Hat Catalog の
-
RUN
コマンドをグループ化します。各行の末尾に&& \
を追加してコマンドを連結します。 - カスタムイメージに含めるコード (ライブラリーやアプリケーションなど) をコンパイルする必要がある場合は、最終イメージにビルドアーティファクトが含まれないように、マルチステージビルドを実装します。つまり、ライブラリーまたはアプリケーションを中間イメージでコンパイルし、その結果を最終イメージにコピーして、含めたくないビルドアーティファクトを残します。
ファイルとディレクトリーへのアクセスの設定
以下のように、ファイルとフォルダーの所有権を
1001:0
(ユーザー "default"、グループ "0") に設定します。COPY --chown=1001:0 os-packages.txt ./
OpenShift では、(セキュリティーを変更しない限り) すべてのコンテナーは標準の namespace にあります。コンテナーは、ランダムなユーザー ID (uid) とグループ ID (gid) が
0
のユーザーで実行されます。したがって、イメージ内の書き込み先のすべてのフォルダーと (一時的に) 変更するすべてのファイルは、ランダムユーザー ID (uid) を持つユーザーがアクセスできる必要があります。または、次の例に示すように、任意のユーザーにアクセスを設定することもできます。COPY --chmod=775 os-packages.txt ./
永続化するデータのデフォルトの場所として
/opt/app-root/src
を使用してイメージをビルドします。次に例を示します。WORKDIR /opt/app-root/src
ユーザーが OpenShift AI Applications
Enabled ページからワークベンチを起動すると、ユーザーの "個人" のボリュームが /opt/app-root/src
にマウントされます。この場所は設定できないため、カスタムイメージをビルドするときに、永続化データのこのデフォルトの場所を指定する必要があります。OpenShift 環境で PIP (Python パッケージのパッケージマネージャー) をサポートするための権限を修正します。次のコマンドをカスタムイメージに追加します (必要に応じて、
python3.9
を使用している Python バージョンに変更します)。chmod -R g+w /opt/app-root/lib/python3.9/site-packages && \ fix-permissions /opt/app-root -P
ワークベンチイメージ内のサービスは
${NB_PREFIX}/api
で応答する必要があります。そうでない場合、OpenShift の liveness/readiness プローブは失敗し、ワークベンチイメージの Pod が削除されます。NB_PREFIX
環境変数は、コンテナーがリッスンすると予想される URL パスを指定します。以下は、Nginx 設定の例です。
location = ${NB_PREFIX}/api { return 302 /healthz; access_log off; }
アイドルカリングが機能するには、次の例に示すように、
${NB_PREFIX}/api/kernels
URL が特定の形式の JSON ペイロードを返す必要があります。以下は、Nginx 設定の例です。
location = ${NB_PREFIX}/api/kernels { return 302 $custom_scheme://$http_host/api/kernels/; access_log off; } location ${NB_PREFIX}/api/kernels/ { return 302 $custom_scheme://$http_host/api/kernels/; access_log off; } location /api/kernels/ { index access.cgi; fastcgi_index access.cgi; gzip off; access_log off; }
返される JSON ペイロードは次のようになります。
{"id":"rstudio","name":"rstudio","last_activity":(time in ISO8601 format),"execution_state":"busy","connections": 1}
CodeReady Builder (CRB) と Enterprise Linux 用の追加パッケージ (EPEL) を有効にする
CRB と EPEL は、標準の Red Hat Enterprise Linux (RHEL) または Universal Base Image (UBI) インストールには存在しないパッケージを提供するリポジトリーです。このリポジトリーは必須で、RStudio などのソフトウェアをインストールする場合に役立ちます。
UBI9 イメージでは、CRB がデフォルトで有効になっています。UBI9 ベースのイメージで EPEL を有効にするには、次のコマンドを実行します。
RUN yum install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
Centos Stream 9 ベースのイメージで CRB と EPEL を有効にするには、次のコマンドを実行します。
RUN yum install -y yum-utils && \ yum-config-manager --enable crb && \ yum install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
Elyra 互換性の追加
データサイエンスパイプライン V2 (odh-elyra
パッケージで提供) のサポートは、Red Hat OpenShift AI バージョン 2.9 以降で利用できます。OpenShift AI の以前のバージョンでは、データサイエンスパイプライン V1 (elyra
パッケージで提供) がサポートされています。
カスタムイメージでデータサイエンスパイプライン V2 をサポートする場合は、次の要件を満たす必要があります。
Data Science pipeline V2 のサポートを受けるには、以下のように、
odh-elyra
パッケージ (elyra
パッケージではありません) を含めます。USER 1001 RUN pip install odh-elyra
- データサイエンスパイプライン設定をランタイム設定として自動的に含める場合は、カスタムワークベンチイメージをインポートするときにアノテーションを追加します。