2.4. 制限された環境での odo の使用
2.4.1. 制限された環境での odo について
odo
を非接続の OpenShift Container Platform クラスター、または制限された環境でプロビジョニングされたクラスターで実行するには、クラスター管理者がミラーリングされたレジストリーでクラスターを作成していることを確認する必要があります。
非接続クラスターで作業を開始するには、まず odo init
イメージをクラスターのレジストリーにプッシュし、ODO_BOOTSTRAPPER_IMAGE
環境変数を使用して odo init
イメージパスを上書きする必要があります。
odo init image
のプッシュ後に、レジストリーからサポートされているビルダーイメージをミラーリングし、ミラーレジストリーを上書きした後にアプリケーションを作成する必要があります。ビルダーイメージは、アプリケーションのランタイム環境を設定するために必要であり、これにはアプリケーションのビルドに必要なビルドツールが含まれます (例: Node.js の場合は npm、Java の場合は Maven)。ミラーレジストリーには、アプリケーションに必要なすべての依存関係が含まれます。
2.4.2. odo init イメージの制限されたクラスターレジストリーへのプッシュ
クラスターおよびオペレーティングシステムの設定に応じて、odo init
イメージをミラーレジストリーにプッシュするか、または内部レジストリーに直接プッシュできます。
前提条件
-
クライアントオペレーティングシステムに
oc
をインストールします。 -
odo
をクライアントオペレーティングシステムにインストールします。 - 内部レジストリーまたはミラーレジストリーが設定された OpenShift Container Platform の制限付きクラスターへのアクセス。
2.4.2.1. odo init
イメージのミラーレジストリーへのプッシュ
オペレーティングシステムによっては、以下のように odo init
イメージをミラーレジストリーを持つクラスターにプッシュできます。
2.4.2.1.1. init
イメージを Linux のミラーレジストリーにプッシュする
手順
base64
を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。$ echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
エンコーディングされたルート CA 証明書を適切な場所にコピーします。
$ sudo cp ./disconnect-ca.crt /etc/pki/ca-trust/source/anchors/<mirror-registry>.crt
クライアントプラットフォームで CA を信頼し、OpenShift Container Platform ミラーレジストリーにログインします。
$ sudo update-ca-trust enable && sudo systemctl daemon-reload && sudo systemctl restart / docker && docker login <mirror-registry>:5000 -u <username> -p <password>
odo init
イメージをミラーリングします。$ oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
ODO_BOOTSTRAPPER_IMAGE
環境変数を設定してデフォルトのodo init
イメージパスを上書きします。$ export ODO_BOOTSTRAPPER_IMAGE=<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
2.4.2.1.2. init
イメージを MacOS のミラーレジストリーにプッシュする
手順
base64
を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。$ echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
エンコーディングされたルート CA 証明書を適切な場所にコピーします。
- Docker UI を使用して Docker を再起動します。
以下のコマンドを実行します。
$ docker login <mirror-registry>:5000 -u <username> -p <password>
odo init
イメージをミラーリングします。$ oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
ODO_BOOTSTRAPPER_IMAGE
環境変数を設定してデフォルトのodo init
イメージパスを上書きします。$ export ODO_BOOTSTRAPPER_IMAGE=<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
2.4.2.1.3. Windows のミラーレジストリーに init
イメージをプッシュする
手順
base64
を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。PS C:\> echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
管理者として、以下のコマンドを実行して、エンコーディングされたルート CA 証明書を適切な場所にコピーします。
PS C:\WINDOWS\system32> certutil -addstore -f "ROOT" disconnect-ca.crt
クライアントプラットフォームで CA を信頼し、OpenShift Container Platform ミラーレジストリーにログインします。
- Docker UI を使用して Docker を再起動します。
以下のコマンドを実行します。
PS C:\WINDOWS\system32> docker login <mirror-registry>:5000 -u <username> -p <password>
odo init
イメージをミラーリングします。PS C:\> oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
ODO_BOOTSTRAPPER_IMAGE
環境変数を設定してデフォルトのodo init
イメージパスを上書きします。PS C:\> $env:ODO_BOOTSTRAPPER_IMAGE="<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>"
2.4.2.2. odo init
イメージを内部レジストリーに直接プッシュする
クラスターでイメージを内部レジストリーに直接プッシュできる場合、以下のように odo init
イメージをレジストリーにプッシュします。
2.4.2.2.1. init
イメージを Linux 上で直接プッシュする
手順
デフォルトのルートを有効にします。
$ oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
ワイルドカードルート CA を取得します。
$ oc get secret router-certs-default -n openshift-ingress -o yaml apiVersion: v1 data: tls.crt: ************************** tls.key: ################## kind: Secret metadata: [...] type: kubernetes.io/tls
base64
を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。$ echo <tls.crt> | base64 -d > ca.crt
クライアントプラットフォームで CA を信頼します。
$ sudo cp ca.crt /etc/pki/ca-trust/source/anchors/externalroute.crt && sudo update-ca-trust enable && sudo systemctl daemon-reload && sudo systemctl restart docker
内部レジストリーにログインします。
$ oc get route -n openshift-image-registry NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD default-route <registry_path> image-registry <all> reencrypt None $ docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
odo init
イメージをプッシュします。$ docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> $ docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag> $ docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
ODO_BOOTSTRAPPER_IMAGE
環境変数を設定してデフォルトのodo init
イメージパスを上書きします。$ export ODO_BOOTSTRAPPER_IMAGE=<registry_path>/openshiftdo/odo-init-image-rhel7:1.0.1
2.4.2.2.2. init
イメージを MacOS 上で直接プッシュする
手順
デフォルトのルートを有効にします。
$ oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
ワイルドカードルート CA を取得します。
$ oc get secret router-certs-default -n openshift-ingress -o yaml apiVersion: v1 data: tls.crt: ************************** tls.key: ################## kind: Secret metadata: [...] type: kubernetes.io/tls
base64
を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。$ echo <tls.crt> | base64 -d > ca.crt
クライアントプラットフォームで CA を信頼します。
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
内部レジストリーにログインします。
$ oc get route -n openshift-image-registry NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD default-route <registry_path> image-registry <all> reencrypt None $ docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
odo init
イメージをプッシュします。$ docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> $ docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag> $ docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
ODO_BOOTSTRAPPER_IMAGE
環境変数を設定してデフォルトのodo init
イメージパスを上書きします。$ export ODO_BOOTSTRAPPER_IMAGE=<registry_path>/openshiftdo/odo-init-image-rhel7:1.0.1
2.4.2.2.3. init
イメージを Windows 上で直接プッシュする
手順
デフォルトのルートを有効にします。
PS C:\> oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
ワイルドカードルート CA を取得します。
PS C:\> oc get secret router-certs-default -n openshift-ingress -o yaml apiVersion: v1 data: tls.crt: ************************** tls.key: ################## kind: Secret metadata: [...] type: kubernetes.io/tls
base64
を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。PS C:\> echo <tls.crt> | base64 -d > ca.crt
管理者として、以下のコマンドを実行して、クライアントプラットフォームの CA を信頼します。
PS C:\WINDOWS\system32> certutil -addstore -f "ROOT" ca.crt
内部レジストリーにログインします。
PS C:\> oc get route -n openshift-image-registry NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD default-route <registry_path> image-registry <all> reencrypt None PS C:\> docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
odo init
イメージをプッシュします。PS C:\> docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> PS C:\> docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag> PS C:\> docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
ODO_BOOTSTRAPPER_IMAGE
環境変数を設定してデフォルトのodo init
イメージパスを上書きします。PS C:\> $env:ODO_BOOTSTRAPPER_IMAGE="<registry_path>/openshiftdo/odo-init-image-rhel7:<tag>"
2.4.3. コンポーネントの作成および非接続クラスターへのデプロイ
ミラーリングされたレジストリーを持つクラスターに init
イメージをプッシュした後に、アプリケーションでサポートされるビルダーイメージを oc
ツールでミラーリングし、環境変数を使用してミラーレジストリーを上書きし、コンポーネントを作成する必要があります。
前提条件
-
クライアントオペレーティングシステムに
oc
をインストールします。 -
odo
をクライアントオペレーティングシステムにインストールします。 - 内部レジストリーまたはミラーレジストリーが設定された OpenShift Container Platform の制限付きクラスターへのアクセス。
-
odo init
イメージをクラスターレジストリーにプッシュします。
2.4.3.1. サポートされるビルダーイメージのミラーリング
Node.js の依存関係に npm パッケージを使用し、Java の依存関係に Maven パッケージを使用し、アプリケーションのランタイム環境を設定するには、ミラーレジストリーから適切なビルダーイメージをミラーリングする必要があります。
手順
必要なイメージタグがインポートされていないことを確認します。
$ oc describe is nodejs -n openshift Name: nodejs Namespace: openshift [...] 10 tagged from <mirror-registry>:<port>/rhoar-nodejs/nodejs-10 prefer registry pullthrough when referencing this tag Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs. Tags: builder, nodejs, hidden Example Repo: https://github.com/sclorg/nodejs-ex.git ! error: Import failed (NotFound): dockerimage.image.openshift.io "<mirror-registry>:<port>/rhoar-nodejs/nodejs-10:latest" not found About an hour ago 10-SCL (latest) tagged from <mirror-registry>:<port>/rhscl/nodejs-10-rhel7 prefer registry pullthrough when referencing this tag Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs. Tags: builder, nodejs Example Repo: https://github.com/sclorg/nodejs-ex.git ! error: Import failed (NotFound): dockerimage.image.openshift.io "<mirror-registry>:<port>/rhscl/nodejs-10-rhel7:latest" not found About an hour ago [...]
サポートされるイメージタグをプライベートレジストリーに対してミラーリングします。
$ oc image mirror registry.access.redhat.com/rhscl/nodejs-10-rhel7:<tag> <private_registry>/rhscl/nodejs-10-rhel7:<tag>
イメージをインポートします。
$ oc tag <mirror-registry>:<port>/rhscl/nodejs-10-rhel7:<tag> nodejs-10-rhel7:latest --scheduled
イメージを定期的に再インポートする必要があります。
--scheduled
フラグは、イメージの自動再インポートを有効にします。指定されたタグを持つイメージがインポートされていることを確認します。
$ oc describe is nodejs -n openshift Name: nodejs [...] 10-SCL (latest) tagged from <mirror-registry>:<port>/rhscl/nodejs-10-rhel7 prefer registry pullthrough when referencing this tag Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs. Tags: builder, nodejs Example Repo: https://github.com/sclorg/nodejs-ex.git * <mirror-registry>:<port>/rhscl/nodejs-10-rhel7@sha256:d669ecbc11ac88293de50219dae8619832c6a0f5b04883b480e073590fab7c54 3 minutes ago [...]
2.4.3.2. ミラーレジストリーの上書き
Node.js の依存関係用の npm パッケージおよび Java の依存関係用の Maven パッケージをプライベートミラーレジストリーからダウンロードするには、クラスター上にミラー npm または Maven レジストリーを作成し、設定する必要があります。その後、既存のコンポーネントで、または新規コンポーネントの作成時にミラーレジストリーを上書きできます。
手順
既存のコンポーネントでミラーレジストリーを上書きするには、以下を実行します。
$ odo config set --env NPM_MIRROR=<npm_mirror_registry>
コンポーネントの作成時にミラーレジストリーを上書きするには、以下を実行します。
$ odo component create nodejs --env NPM_MIRROR=<npm_mirror_registry>
2.4.3.3. odo を使用した Node.js アプリケーションの作成
Node.js コンポーネントを作成するには、Node.js アプリケーションをダウンロードし、odo
でソースコードをクラスターにプッシュします。
手順
現在のディレクトリーをアプリケーションのあるディレクトリーに切り替えます。
$ cd <directory name>
Node.js タイプのコンポーネントをアプリケーションに追加します。
$ odo create nodejs
注記デフォルトで、最新イメージが使用されます。また、
odo create openshift/nodejs:8
を使用してイメージのバージョンを明示的に指定できます。初期ソースコードをコンポーネントにプッシュします。
$ odo push
これで、コンポーネントは OpenShift Container Platform にデプロイされます。
URL を作成し、以下のようにローカル設定ファイルにエントリーを追加します。
$ odo url create --port 8080
変更をプッシュします。これにより、URL がクラスターに作成されます。
$ odo push
コンポーネントに必要な URL を確認するために URL を一覧表示します。
$ odo url list
生成された URL を使用してデプロイされたアプリケーションを表示します。
$ curl <URL>