1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OpenShift on IBM Cloud で IBM Cloud Container Registry にイメージを保管する

Posted at

1.目的

OpenShift on IBM Cloud で IBM Cloud Container Registry にイメージを保管する手順をまとめ確認してみました。

逆のケースIBM Cloud Container RegistryにあるイメージをOpenShift on IBM Cloudで使う場合、defaultプロジェクトのImagePullSecretをコピーして使い回せばいいのですが、pushする場合IBM Cloud IAMのServiceID作成から始める必要があり結構大変になります。

OpenShift on IBM Cloud で IBM Cloud Container Registry にあるイメージを使う

2.手順

1.サービス IDの作成(IBM Cloud IAM)

IAMポリシーと API キーのために使用するクラスターの IBM Cloud IAM サービス ID を作成します。ここではservice99の名前で作成します。

 % ibmcloud iam service-id-create service99
nsakata@jp.ibm.com として 現行アカウント にバインドされるサービス ID service99 を作成しています...
OK
サービス ID service99 が正常に作成されました
                
ID           ServiceId-aa7c7cd6-29ea-411c-8a62-bc6d0b0aa495   
名前         service99   
説明            
CRN          crn:v1:bluemix:public:iam-identity::a/039dbe6794084c7cb514a276dd2345da::serviceid:ServiceId-aa7c7cd6-29ea-411c-8a62-bc6d0b0aa495   
バージョン   1-5724e0df9fe031f518ec6cf708d7b040   
ロック中     false

2.IBM Cloud Container Registryへのアクセス権限の付与(IAM)

ICR(IBM Cloud Container Registry)へのアクセス権を与えるため、上記で作成したサービス ID に対してWriter権限を与えます。--rolesにWriterを指定して"役割 Writer が見つかりませんでした。 有効な役割は 管理者, ライター, リーダー, ビューアー, 管理者, オペレーター, エディター です。"のエラーが出たら、メッセージの通りに日本語でライターを指定ください。

 % ibmcloud iam service-policy-create service99 --roles ライター --service-name container-registry
nsakata@jp.ibm.com としてサービス ID service99 の 現行アカウント にポリシーを作成しています...
OK
サービス・ポリシーは正常に作成されます

                  
ポリシー ID:   0ee6a548-307e-4718-bbd0-5d390901f39f   
バージョン:    1-fe2a60b718fc9eece90c415b7358dcb8   
役割:          ライター   
リソース:                         
               サービス名   container-registry

3.API キーの作成(IAM)

サービス ID の API キーを作成します。ここではapikey99の名前で作成します。

 % ibmcloud iam service-api-key-create apikey99 service99 
nsakata@jp.ibm.com としてアカウント 039dbe6794084c7cb514a276dd2345da にサービス ID service99 の API キー apikey99 を作成しています...
OK
サービス ID API キー apikey99 が作成されます

API キーを保存してください。 作成後に取得することはできません。
              
ID         ApiKey-49ceb0f7-4339-4a20-b559-bc9eb2b83e9d   
名前       apikey99   
説明          
作成日時   2021-10-22T08:09+0000   
API キー   xqgbZXXXXXXXXXXXXXXXXXXXXXXXXXXX 
ロック中   false  

4.シークレットの作成(OpenShift on IBM Cloud)

ICRをpullする権限のあるシークレットをROKS(OpenShift on IBM Cloud)クラスターのプロジェクトtest20に作成します。--docker-password には上記で取得したAPIキーを入力します。--docker-emailは適当にx@y.zを指定します。シークレット名はsecret99とします

 % oc --namespace test20 create secret docker-registry secret99 --docker-server icr.io --docker-username iamapikey --docker-password xqgbZXXXXXXXXXXXXXXXXX --docker-email x@y.z 
secret/secret99 created

4.シークレットをサービス・アカウントに追加(ROKS)

先ほど作成したシークレットsecret99を、クラスター内のビルドで使用する サービス・アカウントbuilderに追加します。

 % oc secrets link builder secret99

4.ビルドの実行及び確認(ROKS)

BuildCondigを作成して実行します。--to-dockerを指定することで生成されたイメージを外部のレジストリに登録することを指定し、--toでICRのicr.ioの名前空間test1(事前作成済み)を指定します。

 % oc new-build openshift/nodejs~https://github.com/sclorg/nodejs-ex.git --to-docker --to icr.io/test1/nodejs-ex
--> Found image b23116f (9 days old) in image stream "openshift/nodejs" under tag "14-ubi8" for "openshift/nodejs"

    Node.js 14 
    ---------- 
    Node.js 14 available as container is a base platform for building and running various Node.js 14 applications and frameworks. Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

    Tags: builder, nodejs, nodejs14

    * A source build using source code from https://github.com/sclorg/nodejs-ex.git will be created
      * The resulting image will be pushed with Docker to "icr.io/test1/nodejs-ex"
      * Use 'oc start-build' to trigger a new build

--> Creating resources with label build=nodejs-ex ...
    buildconfig.build.openshift.io "nodejs-ex" created
--> Success

ビルドログを確認します。ICRに正常に保管されていることを確認します。

 % oc get pods
NAME                     READY   STATUS      RESTARTS   AGE
nodejs-ex-1-build        0/1     Completed   0          2m11s

 % oc logs -f nodejs-ex-1-build 
Caching blobs under "/var/cache/blobs".
Getting image source signatures
Copying blob sha256:06038631a24a25348b51d1bfc7d0a0ee555552a8998f8328f9b657d02dd4c64c

中途略

Successfully pushed icr.io/test1/nodejs-ex@sha256:19924bfd6fafff6a06ef52b705f60a88d4415124f30eeadd9f3a7f2fc333f001
Push successful

3.IBM Cloud Portalからの確認

ICRの画面から上記で作成したイメージnodejs-exが作成されたことを確認できました。

スクリーンショット 2021-10-27 10.47.39.png

4.参考情報

IBM Cloud DOCの関連情報リンクは以下になります。

異なる IAM API キー資格情報を使用してイメージ・プル・シークレットを作成することで、より細かい制御を可能にしたり、他の IBM Cloud アカウント内のイメージへのアクセスを可能にしたりする方法

IBM Cloud Container Registry にイメージをプッシュするように内部レジストリーのビルドをセットアップする

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?