2.2. ネットワーク制限のある環境でソースからイメージへのビルドを作成する
非接続環境で ソースからイメージへの ビルドストラテジーを使用するには、まず必要なビルダーイメージをローカルレジストリーにミラーリングしてください。このアプローチにより、組織のコンテンツポリシーを遵守しながら、パブリックレジストリーへのアクセスなしでクラスターを運用することが可能になります。
前提条件
- OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
-
ocCLI がインストールされている。 -
オプション:
shpCLI がインストールされている。 - お使いのクラスターは、ソースからイメージへのビルドを作成するために使用できる Git ソースに接続してやり取りすることができます。
-
ローカルレジストリーで
source-to-imageビルドを作成するために必要な builder-image がある。ビルダーイメージがローカルレジストリーに存在しない場合は、ソースイメージをミラーリングしてください。
手順
ソースからイメージへのビルドストラテジーに必要なイメージをミラーリングするには、次のコマンドを実行します。$ oc image mirror --insecure -a <registry_authentication> registry.redhat.io/source-to-image/source-to-image-rhel8@sha256:d041c1bbe503d152d0759598f79802e257816d674b342670ef61c6f9e6d401c5 <mirror_registry>/<repo>/source-to-image-source-to-image-rhel8各項目の説明:
< レジストリー認証 >- コンテナーレジストリーへのアクセスに使用する認証情報を指定します。これは、プライベートレジストリーへのプッシュまたはプライベートレジストリーからのプルを行う際に必要です。
< ミラーレジストリー >- ミラーリングしたいイメージが保存されているレジストリーを指定します。
Buildリソースを作成して OpenShift Container Platform クラスターに適用します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: s2i-nodejs-build spec: source: type: Git git: url: https://github.com/redhat-openshift-builds/samples contextDir: s2i-build/nodejs strategy: name: source-to-image kind: ClusterBuildStrategy paramValues: - name: builder-image value: quay.io/centos7/nodejs-12-centos7:master output: image: quay.io/<repo>/s2i-nodejs-example pushSecret: registry-credential EOF各項目の説明:
source- ソースコードが配置される場所を定義します。
strategy- コンテナーを構築するために使用するビルドストラテジーを定義します。
パラメーター値-
ビルドストラテジーのパラメーターを定義します。
ソースからイメージへのビルドの場合、これにはアプリケーションのビルドに使用されるベースイメージを指定するbuilder-imageパラメーターが含まれます。 output-
ビルドされたイメージがプッシュされる場所を定義します。この手順例では、ビルドされたイメージが OpenShift Container Platform クラスターの内部レジストリーにプッシュされます。
buildah-exampleは現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。 pushSecret-
コンテナーイメージをプッシュするための認証情報を格納する秘密の名前を定義します。認証用に
docker-registryタイプのシークレットを生成するには、「コンテナーレジストリーへの認証」を参照してください。
$ shp build create s2i-nodejs-build \ --source-url="https://github.com/redhat-openshift-builds/samples" --source-context-dir="s2i-build/nodejs" \ --strategy-name="source-to-image" \ --builder-image="quay.io/centos7/nodejs-12-centos7" \ --output-image="quay.io/<repo>/s2i-nodejs-example" \ --output-credentials-secret="registry-credential"各項目の説明:
ソースコンテキストディレクトリー- ソースコードが配置される場所を定義します。
ストラテジー名- コンテナーの構築に使用するビルドストラテジー。
builder-image-
ビルドストラテジーで定義されるパラメーター。
ソースイメージビルドの場合、これはアプリケーションのビルドに使用されるベースイメージを指定します。 出力イメージ-
ビルドイメージがプッシュされる場所。この手順例では、ビルドされたイメージが OpenShift Container Platform クラスターの内部レジストリーにプッシュされます。
buildah-exampleは現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。 出力認証情報シークレット-
コンテナーイメージをプッシュするための認証情報を保存するシークレット名。認証用に
docker-registryタイプのシークレットを生成するには、「コンテナーレジストリーへの認証」を参照してください。
ビルドリソースが作成されているかどうかを確認します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc get builds.shipwright.io s2i-nodejs-build$ shp build listBuildRunリソースを作成し、それを OpenShift Container Platform クラスターに適用します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: s2i-nodejs-buildrun spec: build: name: s2i-nodejs-build EOF各項目の説明:
spec.build.name- 実行するビルドを指定します。このビルドは同じ名前空間に存在することが想定されます。
$ shp build run s2i-nodejs-build --follow詳細は次のとおりです。
--follow-
(オプション)
--followフラグを使用すると、出力結果にビルドログを表示できます。
BuildRunリソースが作成されているかどうかを確認します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc get buildrun s2i-nodejs-buildrun$ shp buildrun listBuildRunリソースはTaskRunリソースを作成し、その後ビルドストラテジーの手順を実行する Pod を作成します。
検証
すべてのコンテナーがタスクを完了したら、以下のリソースの状態を確認してください。
Pod で
STATUSフィールドがCompletedとして表示されるかどうかを確認します。$ oc get pods -w出力例:
NAME READY STATUS RESTARTS AGE s2i-nodejs-buildrun-phxxm-pod 2/2 Running 0 10s s2i-nodejs-buildrun-phxxm-pod 1/2 NotReady 0 14s s2i-nodejs-buildrun-phxxm-pod 0/2 Completed 0 2mそれぞれの
TaskRunリソースにSUCCEEDEDフィールドがTrueと表示されているかどうかを確認します。$ oc get tr出力例:
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME s2i-nodejs-buildrun-phxxm True Succeeded 2m39s 13sそれぞれの
BuildRunリソースにSUCCEEDEDフィールドがTrueと表示されているかどうかを確認します。$ oc get br出力例:
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME s2i-nodejs-buildrun True Succeeded 2m41s 15s検証中にビルドの実行が失敗した場合は、
BuildRunリソースのstatus.failureDetailsフィールドをチェックして、Pod またはコンテナー内で失敗が発生した正確なポイントを特定できます。注記コンテナーの 1 つがタスクを完了したため、Pod が
NotReady状態に切り替わる可能性があります。これは想定される動作です。build.spec.output.imageフィールドで指定されたレジストリーにイメージがプッシュされたかどうかを検証します。レジストリーにログインし、以下のコマンドを実行してイメージをプルします。$ podman manifest inspect image-registry.openshift-image-registry.svc:5000/s2i-example/taxi-app前の例では、プロジェクト名は
s2i-example、イメージ名はtaxi- アプリケーションです。出力例:
"schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 594, "digest": "sha256:6a05100e302c86c03fec6277f4b3107f1fdde6c69d3ca9a4207e4735a5213e32", "platform": { "architecture": "amd64", "os": "linux" } ]