背景
QuarkusのOpenShiftエクステンションを使用して、Single Node OpenShiftへデプロイしようとしたらエラーが発生しました。
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Applied: BuildConfig wake-on-lan [ERROR] Failed to upload archive file for the build: wake-on-lan [ERROR] Please check cluster events via `oc get events` to see what could have possibly gone wrong [WARNING] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] An exception: 'Can't instantiate binary build, due to error reading/writing stream. Can be caused if the output stream was closed by the server.See if something's wrong in recent events in Cluster = InvalidOutput wake-on-lan-1.17d881cb2b5ed3fc Error starting build: an image stream cannot be used as build output because the integrated container image registry is not configured BuildFailed wake-on-lan-1.17d881cb2d2462e0 Build home/wake-on-lan-1 failed ' occurred while instantiating the build, however the build has been started.
Error starting build: an image stream cannot be used as build output because the integrated container image registry is not configured
と出力されていたのでイメージレジストリを構築したら無事にビルドができるようになりました。
環境
- OpenShift 4.15
- デフォルトの StorageClasses は構成済み
参考
イメージレジストリの構築
イメージレジストリを構築しましょう。 全体の流れは以下のとおりです。
- イメージレジストリの管理状態の変更
- イメージレジストリーストレージの設定
0. 事前確認
事前に以下の4つを確認します。
- イメージレジストリのPodがいるかどうか
- オペレータのステータス
- インスタンスがあるかどうか
- インスタンスの設定値
イメージレジストリのPodがいるかどうか
リソースがなければOKです。
> oc get pod -n openshift-image-registry -l docker-registry=default No resources found in openshift-image-registry namespace
以下のようにリソースが表示されればイメージレジストリは設定されてます。そのため、作業は不要です。
NAME READY STATUS RESTARTS AGE image-registry-f79ccc88f-8sm2s 1/1 Running 0 15h
オペレータのステータス
オペレータのステータスでAVAILABLE
がTrue
になっているか確認します。
> oc get clusteroperator image-registry NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE image-registry 4.15 True False False 15h
インスタンスがあるかどうか
デフォルトで作成されているcluster
というインスタンスがあればOK。
oc get configs.imageregistry.operator.openshift.io NAME AGE cluster 93d
インスタンスの設定値
spec.managementState
がRemoved
になっていればOK。
> oc get configs.imageregistry cluster -o=jsonpath='{.spec.managementState}{"\n"}' Removed
1. イメージレジストリの管理状態の変更
oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
2. イメージレジストリストレージの設定
2箇所換えます。
- configs.imageregistry.operator.openshift.io
- configs.imageregistry/cluster
configs.imageregistry.operator.openshift.io
oc edit configs.imageregistry.operator.openshift.io
こうなっているのを
spec: storage: {}
以下のように変えます。
spec: storage: pvc: claim:
configs.imageregistry/cluster
oc edit configs.imageregistry/cluster
以下のようにmanagementState
がRemoved
になっていたら
spec managementState: Removed
Managed
に換える
spec managementState: Managed
確認
以下のようにイメージレジストリのPodが表示されればイメージレジストリが使えるようになります。
> oc get pod -n openshift-image-registry -l docker-registry=default NAME READY STATUS RESTARTS AGE image-registry-f79ccc88f-8sm2s 1/1 Running 0 15h