第4章 Red Hat build of MicroShift アプリケーションの埋め込みのチュートリアル
次のチュートリアルでは、さまざまな環境の MicroShift クラスターで使用するために、RHEL for Edge イメージにアプリケーションを埋め込む方法の詳細な例を示します。
4.1. アプリケーション RPM の埋め込みのチュートリアル
次のチュートリアルでは、MicroShift のインストール手順を確認し、さらにアプリケーションを埋め込むためのワークフローを説明します。Red Hat Enterprise Linux for Edge (RHEL for Edge) や MicroShift などの rpm-ostree
システムにすでに慣れている場合は、そのまま手順に進んでください。
4.1.1. インストールワークフローの再確認
アプリケーションを埋め込むには、MicroShift を RHEL for Edge イメージに埋め込む場合と同様のワークフローが必要です。
- 次の画像は、RPM、コンテナー、ファイルなどのシステムアーティファクトをブループリントに追加し、それらをイメージコンポーザーで使用して ostree コミットを作成する方法を示しています。
- ostree コミットは、ISO パスまたはリポジトリーパスのいずれかを使用してエッジデバイスに到達できます。
- ISO パスは非接続環境で使用できます。一方、リポジトリーパスはネットワークが通常接続されている場所でよく使用されます。
MicroShift の埋め込みワークフロー
次の手順を再確認すると、アプリケーションの埋め込みに必要な手順を理解するのに役立ちます。
- MicroShift を RHEL for Edge に埋め込むために、MicroShift リポジトリーを Image Builder に追加しました。
- MicroShift の追加など、必要なすべての RPM、コンテナーイメージ、ファイル、およびカスタマイズを宣言するブループリントを作成しました。
-
ブループリントを Image Builder に追加し、Image Builder CLI ツール (
composer-cli
) を使用してビルドを実行しました。この手順では、コンテナーイメージの作成に使用されるrpm-ostree
コミットを作成しました。このイメージには RHEL for Edge が含まれていました。 -
インストーラーブループリントを Image Builder に追加して、起動元の
rpm-ostree
イメージ (ISO) を作成しました。このビルドには、RHEL for Edge と MicroShift の両方が含まれていました。 - MicroShift が埋め込まれた ISO をダウンロードし、使用できるように準備し、プロビジョニングして、エッジデバイスにインストールしました。
4.1.2. アプリケーション RPM の埋め込みワークフロー
Image Builder の要件を満たすビルドホストを設定したら、マニフェストのディレクトリーの形式でアプリケーションをイメージに追加できます。これらの手順の後、アプリケーションまたはワークロードを新しい ISO に埋め込む最も簡単な方法は、マニフェストを含む独自の RPM を作成します。アプリケーションの RPM には、デプロイメントを記述するすべての設定ファイルが含まれています。
次の「アプリケーションの埋め込みワークフロー」の画像は、Kubernetes アプリケーションマニフェストと RPM 仕様ファイルが単一のアプリケーション RPM ビルドにどのように組み合わされるかを示しています。このビルドは、MicroShift を ostree コミットに埋め込むワークフローで使用する RPM アーティファクトになります。
アプリケーションの埋め込みワークフロー
以下の手順では、rpmbuild
ツールを使用して、仕様ファイルとローカルリポジトリーを作成します。この仕様ファイルにより、パッケージのビルド方法を定義し、アプリケーションマニフェストを RPM パッケージ内の正しい場所に移動して、MicroShift が取得できるようにします。この RPM パッケージは ISO に埋め込まれます。
4.1.3. アプリケーション RPM の作成準備
独自の RPM を構築するには、rpmbuild
ツールなどの任意のツールを選択し、ホームディレクトリーで RPM ビルドツリーを初期化します。以下に手順の例を示します。RPM が Image Builder にアクセスできる限り、任意の方法を使用してアプリケーション RPM を構築できます。
前提条件
- Image Builder のシステム要件を満たす Red Hat Enterprise Linux for Edge (RHEL for Edge) 9.2 ビルドホストを設定している。
- ホストへの root アクセス権限がある。
手順
rpmbuild
ツールをインストールし、以下のコマンドを実行してその yum リポジトリーを作成します。$ sudo dnf install rpmdevtools rpmlint yum-utils createrepo
次のコマンドを実行して、RPM パッケージの構築に必要なファイルツリーを作成します。
$ rpmdev-setuptree
検証
次のコマンドを実行して、ディレクトリーを一覧表示して作成を確認します。
$ ls ~/rpmbuild/
出力例
BUILD RPMS SOURCES SPECS SRPMS
4.1.4. アプリケーションマニフェストの RPM パッケージの構築
独自の RPM を構築するには、アプリケーションマニフェストを RPM パッケージに追加する仕様ファイルを作成する必要があります。以下に手順の例を示します。イメージ構築に必要なアプリケーション RPM およびその他の要素が Image Builder にアクセスできる限り、任意の方法を使用できます。
前提条件
- Image Builder のシステム要件を満たす Red Hat Enterprise Linux for Edge (RHEL for Edge) 9.2 ビルドホストを設定している。
- ホストへの root アクセス権限がある。
- RPM パッケージの構築に必要なファイルツリーが作成されている。
手順
~/rpmbuild/SPECS
ディレクトリーに、次のテンプレートを使用して<application_workload_manifests.spec>
などのファイルを作成します。仕様ファイルの例
Name: <application_workload_manifests> Version: 0.0.1 Release: 1%{?dist} Summary: Adds workload manifests to microshift BuildArch: noarch License: GPL Source0: %{name}-%{version}.tar.gz #Requires: microshift %description Adds workload manifests to microshift %prep %autosetup %install 1 rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/%{_prefix}/lib/microshift/manifests cp -pr ~/manifests $RPM_BUILD_ROOT/%{_prefix}/lib/microshift/ %clean rm -rf $RPM_BUILD_ROOT %files %{_prefix}/lib/microshift/manifests/** %changelog * <DDD MM DD YYYY username@domain - V major.minor.patch> - <your_change_log_comment>
- 1
%install
セクションは、RPM パッケージ内にターゲットディレクトリー/usr/lib/microshift/manifests/
を作成し、ソースホームディレクトリー~/manifests
からマニフェストをコピーします。
重要必要な YAML ファイルはすべて、ソースホームディレクトリー
~/manifests
に置かれている必要があります (kustomize を使用している場合はkustomize.yaml
ファイルも含まれます)。以下のコマンドを実行して、
~/rpmbuild/RPMS
ディレクトリーに RPM パッケージをビルドします。$ rpmbuild -bb ~/rpmbuild/SPECS/<application_workload_manifests.spec>
4.1.5. ブループリントへのアプリケーション RPM の追加
アプリケーション RPM をブループリントに追加するには、Image Builder が ISO の作成に使用できるローカルリポジトリーを作成する必要があります。この手順では、ワークロードに必要なコンテナーイメージをネットワーク経由でプルできます。
前提条件
- ホストへの root アクセス権限がある。
-
ワークロードまたはアプリケーション RPM が
~/rpmbuild/RPMS
ディレクトリーにある。
手順
次のコマンドを実行して、ローカル RPM リポジトリーを作成します。
$ createrepo ~/rpmbuild/RPMS/
次のコマンドを実行して、Image Builder に RPM リポジトリーへのアクセス権限を付与します。
$ sudo chmod a+rx ~
注記イメージ構築に必要なファイル全てにアクセスする必須のパーミッションが Image Builder に割り当てられている必要があります。そうでないと、ビルドを続行できません。
次のテンプレートを使用して、ブループリントファイル
repo-local-rpmbuild.toml
を作成します。id = "local-rpm-build" name = "RPMs build locally" type = "yum-baseurl" url = "file://<path>/rpmbuild/RPMS" 1 check_gpg = false check_ssl = false system = false
- 1
- 選択したロケーションを作成するパスの一部を指定します。後のコマンドでこのパスを使用して、リポジトリーを設定し、RPM をコピーします。
次のコマンドを実行して、Image Builder のソースとしてリポジトリーを追加します。
$ sudo composer-cli sources add repo-local-rpmbuild.toml
以下の行を追加して、RPM をブループリントに追加します。
… [[packages]] name = "<application_workload_manifests>" 1 version = "*" …
- 1
- ワークロードの名前をここに追加します。
次のコマンドを実行して、更新されたブループリントを Image Builder にプッシュします。
$ sudo composer-cli blueprints push repo-local-rpmbuild.toml
この時点で、Image Builder を実行して ISO を作成するか、オフラインで使用するためにコンテナーイメージを埋め込むことができます。
ISO を作成するには、次のコマンドを実行して Image Builder を起動します。
$ sudo composer-cli compose start-ostree repo-local-rpmbuild edge-commit
このシナリオでは、起動時にエッジデバイスによってネットワーク経由でコンテナーイメージがプルされます。