6
4

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 にあるイメージを使う

Last updated at Posted at 2019-12-23

やりたいこと

OpenShift (on IBM Cloud) でアプリケーションを公開するときに、既存のコンテナイメージを使いたい。
コンテナレポジトリーとして IBM Cloud Container Registry を使いたい。

ImagePullSecretの設定

defaultプロジェクトではデフォルトで使える

defaultプロジェクトにはImagePullSecretがクラスター作成時に一緒に作られています。

$ oc get secret -n default | grep icr
NAME                   TYPE                                  DATA   AGE
default-au-icr-io      kubernetes.io/dockerconfigjson        1      124d
default-de-icr-io      kubernetes.io/dockerconfigjson        1      124d
default-icr-io         kubernetes.io/dockerconfigjson        1      124d
default-jp-icr-io      kubernetes.io/dockerconfigjson        1      124d
default-uk-icr-io      kubernetes.io/dockerconfigjson        1      124d
default-us-icr-io      kubernetes.io/dockerconfigjson        1      124d

defaultプロジェクトにアプリをデプロイする場合は、後述のマニフェストファイルへの記載やService Accountへの追加などをしなくてもイメージを指定すればpullできるようになっています。

defaultプロジェクト以外でも使えるようにする

すでにあるdefaultプロジェクトのImagePullSecretをコピーしてしまいましょう。
今回はdemoプロジェクトを作成し、ここに設定することにします。

$ oc get secret default-jp-icr-io -o yaml -n default | sed 's/default/demo/g' | oc -n demo create -f -
secret/demo-jp-icr-io created

上記は東京リージョンのレジストリーに対するImagePullSecretを作成しています。
他のリージョンで実行したい場合はdefault-jp-icr-iojp部分を変えてください。

上記コマンド実行後、確認してみるとコピーされています。

$ oc get secret | grep icr
demo-jp-icr-io        kubernetes.io/dockerconfigjson        1      35s

ImagePullSecretを使ってアプリをデプロイする

以下の2種類の方法があります。

  • マニフェストファイルにImagePullSecretを記載する
  • Service AccountにImagePullSecretを追加する

マニフェストファイルにImagePullSecretを記載する

spec.imagePullSecretsを追加し、ImagePullSecretを記載します。
この方法だと毎回マニフェストファイルに記載する必要がありますが、プロジェクト内のすべてのPodにレジストリーへのアクセスをさせたくない場合には有効です。

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: mytodo
      image: jp.icr.io/kishida/mytodo:1.0
  imagePullSecrets:
    - name: demo-jp-icr-io

Service AccountにImagePullSecretを追加する

defaultという名前のService AccountにImagePullSecretを追加します。
この方法だとImagepullSecretがPod作成時に自動で付与されるようになるので、いちいちマニフェストファイルで指定する必要はありません。

まずは初期状態のService Account defaultの中身を確認してみましょう。

$ oc describe sa default
Name:                default
Namespace:           demo
Labels:              <none>
Annotations:         <none>
Image pull secrets:  default-dockercfg-xzfhd
Mountable secrets:   default-token-hcxjk
                     default-dockercfg-xzfhd
Tokens:              default-token-hcxjk
                     default-token-wwlw2
Events:              <none>

ここにImagePullSecretを追加します。

$ oc patch -n demo sa/default --type='json' \
-p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"demo-jp-icr-io"}}]'
serviceaccount/default patched

追加できたか確認してみます。

$ oc describe sa default
Name:                default
Namespace:           demo
Labels:              <none>
Annotations:         <none>
Image pull secrets:  default-dockercfg-xzfhd
                     demo-jp-icr-io           ← 追加されたImagePullSecret
Mountable secrets:   default-token-hcxjk
                     default-dockercfg-xzfhd
Tokens:              default-token-hcxjk
                     default-token-wwlw2
Events:              <none>

これでService AccountにImagePullSecretが追加されたので、あとは通常通りイメージを指定するだけでpullできるようになっています。

参考リンク

6
4
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?