IBM Cloud Docs
Red Hat OpenShift on IBM Cloud のスケーラブルな Web アプリケーション

Red Hat OpenShift on IBM Cloud のスケーラブルな Web アプリケーション

このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。

このチュートリアルでは、リモート リポジトリからアプリケーションをクラスタにデプロイする方法を説明します。 Red Hat OpenShift on IBM Cloud アプリケーションをリモートの Git リポジトリからクラスタにデプロイする方法、アプリケーションをルートに公開する方法、環境の健全性を監視する方法、アプリケーションをスケールする方法を説明します。 さらに、プライベート・コンテナ・レジストリを使用する方法、 Git のプライベート・リポジトリーからアプリケーションをデプロイする方法、カスタム・ドメインをアプリケーションにバインドする方法についても学びます。

Red Hat OpenShift on IBM Cloudを使用すると、 OpenShift Container Platformとともにインストールされるワーカー・ノードを持つ Kubernetes クラスターを作成できます。 OpenShift Container Platform アーキテクチャの詳細については、 Red Hat OpenShift ドキュメントを参照のこと。 クラスターの マネージド・サービスの利点 をすべて得られます。

目標

  • Red Hat OpenShift on IBM Cloud クラスターに Web アプリケーションをデプロイする。
  • カスタム・ドメインをバインドする。
  • クラスターのログと正常性をモニターする。
  • Red Hat OpenShift on IBM Cloud ポッドをスケーリングする。

" caption-side="bottom"}*の{: caption="図

  1. 開発者は、リモート Git リポジトリーにあるコードを使用して Web アプリケーションをデプロイします。 オプションとして、開発者は IBM Cloud の Git プライベートリポジトリにコードをプッシュすることもできる。
  2. コンテナ・イメージはコードから構築される。
  3. イメージはクラスタに付属するローカルコンテナレジストリか、 IBM Cloud Container Registry のネームスペースにプッシュされる。
  4. アプリケーションはイメージをプルすることで Red Hat OpenShift on IBM Cloud クラスタにデプロイされる。
  5. ユーザーは、パブリック経路を介してアプリケーションにアクセスします。

開始前に

このチュートリアルでは、以下が必要です。

  • IBM Cloud CLI
    • IBM Cloud Kubernetes Service プラグイン (kubernetes-service)
    • (オプション) Container Registry プラグイン (container-registry)
  • Docker エンジン
  • oc: Red Hat OpenShift on IBM Cloud と対話します。
  • git: ソース・コード・リポジトリーを複製します。
  • (オプション) IBM Cloud GitLab SSHキーで設定。 ここの資料Generate an SSH key pair および Add an SSH key to your GitLab account セクションの説明を確認してください。

ご使用のオペレーティング環境でこれらのツールをダウンロードおよびインストールするための手順は、チュートリアルの概説ガイドに記載されています。

これらのツールのインストールを回避するには Cloud Shell を IBM Cloud コンソールから実行する。 oc version を使用して、Red Hat OpenShift on IBM Cloud CLI のバージョンがクラスターのバージョン (4.13.x) と一致することを確認します。一致しない場合は、以下の指示に従って、一致するバージョンをインストールしてください。

また、必ずレジストリー名前空間をセットアップするようにします。

Red Hat OpenShift on IBM Cloud クラスターの作成

Red Hat OpenShift on IBM Cloud では、 Kubernetes クラスタ上でエンタープライズ・ワークロードをコンテナ化し、デプロイするための高速で安全な方法があります。 Red Hat OpenShift on IBM Cloud クラスタは、 Kubernetes コンテナ・オーケストレーションの上に構築され、開発ライフサイクル運用のための一貫性と柔軟性を提供します。

このセクションでは、2 つのワーカー・ノードを持つ、1 つのゾーン内の Red Hat OpenShift on IBM Cloud クラスターをプロビジョンします。

  1. IBM Cloud® カタログ から Red Hat OpenShift on IBM Cloud クラスターを作成します。
  2. 「インフラストラクチャー」 で、 「VPC」 または 「クラシック」 を選択します。
    • VPCインフラストラクチャ上の Red Hat OpenShift on IBM Cloud、クラスタを作成する前にVPCと1つのサブネットを作成する必要があります。 以下の要件に留意して、VPC を作成するか、既存の VPC を使用します。
      • このチュートリアルで使用できるサブネットは 1 つ (サブネットのゾーンと名前をメモしてください)。
      • パブリック・ゲートウェイがサブネットに接続されます。詳しくは、 VPC クラスターの作成 を参照してください。
  3. 「場所」 の下で、以下のようにします
    • VPC インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合
      • 適用できないゾーンとサブネットのチェック・マークを外します。
      • ご希望のゾーンで、ご希望のサブネット名を確認し、ない場合は編集の鉛筆ボタンをクリックして、ご希望のサブネット名を選択します
    • クラシック・インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合:
      • 「リソース・グループ」 を選択します。
      • 地域 を選択します。
      • 「可用性」 として 「単一ゾーン」 を選択します。
      • ワーカーゾーンを選択する。
      • 詳しくは、 クラシック・クラスターの作成 の手順を参照してください。
  4. OpenShift バージョン4.13.x に設定します (注: 4.15.xx 以上のバージョンを使用する場合は、 「アウトバウンド・トラフィック保護」 をオフにする必要があります)。
  5. OpenShift Container Platform (OCP) ライセンスを選択します。
  6. 「ワーカー・プール (Worker pool)」 の下で、以下のようにします
    • 4 vCPUs 16GB メモリー をフレーバーとして選択します。
    • このチュートリアルでは、データ・センターごとに Worker ノードを 2 つ選択します(クラシック・インフラストラクチャを選択した場合: ローカル・ディスクを暗号化のままにします)。
  7. 「クラスターの詳細」 の下:
    • クラスタ名を myopenshiftcluster に設定する。
    • 「リソース・グループ」 を選択します (VPC インフラストラクチャーを選択した場合)。
  8. 「作成」 をクリックして、Red Hat OpenShift on IBM Cloud クラスターをプロビジョンします。

ここで選択したリソース・グループをメモしておいてください。 この同じリソース・グループを、このラボのすべてのリソースに使用することになります。

CLI の構成

この手順では、作成した新規クラスターを指すように、oc を構成します。 Red Hat OpenShift on IBM Cloud Container Platform CLIは、アプリケーションを管理するためのコマンドと、システムの各コンポーネントとやり取りするための低レベルのツールを公開している。 oc コマンドを使用すると、この CLI を使用できます。

  1. クラスタの準備ができたら、 OpenShift web consoleをクリックしてコンソールを開きます。
  2. Web コンソールで、ページ右上のドロップダウン・メニューから、「Copy Login Command」 をクリックし、「Display Token」 リンクをクリックします。
  3. このトークンでログイン 」の下にあるテキストをコピー します。
  4. oc login コマンドを使用してログインしたら、以下のコマンドを実行してクラスタ内のすべてのネームスペースを確認します。
    oc get ns
    

新規 Red Hat OpenShift on IBM Cloud アプリケーションの作成

このセクションでは、 Red Hat OpenShift on IBM Cloud プロジェクトを作成し、 GitHub リポジトリーからアプリケーションをデプロイします。 このアプリケーションのコードは、単純な Node.js ランディング・ページと、開始するための 2 つの API エンドポイントです。 このアプリケーションは、独自の探索要件に基づいていつでも拡張できます。

プロジェクトの作成

Kubernetes 名前空間は、クラスター内のリソースをスコープ設定するメカニズムを提供します。 Red Hat OpenShift on IBM Cloud では、プロジェクトは追加のアノテーションを持つ Kubernetes 名前空間です。

  1. MYPROJECT という名前の環境変数を定義し、<your-initials> を独自のイニシャルに置き換えてアプリケーション名を設定します。
    export MYPROJECT=<your-initials>-openshiftapp
    
  2. 新規プロジェクトを作成します。
    oc new-project $MYPROJECT
    
    上記のコマンドを使用してプロジェクトを作成すると、そのプロジェクトに自動的に切り替わり、後続のすべてのコマンドがそのプロジェクトのコンテキストで実行されます。 後でプロジェクトを切り替えるか、そのプロジェクトに戻る必要がある場合は、 oc project $MYPROJECT コマンドを使用します。

アプリケーションをデプロイします

oc new-app コマンドを使用して、ローカルまたはリモートの Git リポジトリーのソース・コードからアプリケーションを作成できます。

  1. リポジトリーにある Dockerfile からコンテナー・イメージをビルドする docker ビルド戦略を使用して、アプリケーションを作成します。 簡単にするために、アプリケーション名をプロジェクト名に設定します。

    oc new-app https://github.com/IBM-Cloud/openshift-node-app --name=$MYPROJECT --strategy=docker --as-deployment-config
    

    新規アプリケーションの作成時に Jenkins ファイルがソース・リポジトリーのルートまたは指定されたコンテキスト・ディレクトリーにある場合、Red Hat OpenShift on IBM Cloud は pipeline ビルド戦略を生成します。 それ以外の場合は、 source ビルド・ストラテジーを生成します。 --strategy フラグを設定することにより、いつでもビルド・ストラテジーをオーバーライドできます。

  2. ビルダー・コンテナ・イメージの作成と内部 Red Hat OpenShift on IBM Cloud Container Registry (OCR) へのプッシュを確認するには、以下のコマンドを実行する。

    oc logs -f buildconfig/$MYPROJECT
    

    クラスターには内部 Red Hat OpenShift on IBM Cloud コンテナー・レジストリーがセットアップされているので、Red Hat OpenShift on IBM Cloud はクラスター内からアプリケーション・ライフサイクルを自動的にビルド、デプロイ、および管理できます。

  3. ビルドが成功し、イメージがプッシュされるまで待つ。 以下のコマンドを実行して、デプロイメントとサービスの状況を確認できます。

    oc status
    

IBM、提供されたドメインからアプリケーションにアクセスする

アプリケーションにアクセスするには、ルートを作成する必要があります。 ルートはサービスを世界に告知します。

  1. ターミナルで以下のコマンドを実行してルートを作成する。

    oc expose service/$MYPROJECT
    
  2. IBM、提供されたドメインからアプリケーションにアクセスできます。 以下のコマンドを実行して URL を取得します。

    oc get route/$MYPROJECT
    
  3. HOST/PORT 値の下にあるホスト名の値をコピーし、 URL をブラウザに貼り付けて、 http://<hostname> でアプリケーションの動作を確認してください。 URLには必ず http を使用してください。

  4. ホスト名を指す環境変数を設定する。

    export HOST=<hostname>
    

デフォルトの IBM 提供ドメイン・ルートの保護

  1. Red Hat OpenShift on IBM Cloud のデフォルト証明書を使用して暗号化されたセキュア HTTPS ルートを作成するには、create route コマンドを使用できます。
    oc create route edge $MYPROJECT-https --service=$MYPROJECT --port=3000
    
  2. HTTPS HOST URL の場合、oc get routes を実行します。 ブラウザーで、ルート $MYPROJECT-https の横に HTTPS URL (https://<HOST>) をコピーして貼り付けます。 今回は URLに https を使用できます。

アプリのモニター

このセクションでは、アプリケーションの正常性とパフォーマンスのモニターについて説明します。 OpenShift Container Platform には、事前構成された自己更新モニターおよびアラート・スタックが付属しています。

  1. ターミナルから、 URLのコマンドを実行して負荷を生成します。 コマンドは、アプリケーションに無限に要求を送信します。
    while sleep 1; do curl --max-time 2 -s http://$HOST/load/50; done
    
  2. OpenShift Web コンソールで、 「管理者」 ビューに切り替えます。
  3. 「監視」 で、 「メトリック」 を選択します。
  4. 式ボックスに以下の式を入力し、 <MYPROJECT> をプロジェクト名で置き換えて、 「照会の実行」 をクリックすると、グラフに合計コンテナー CPU 使用率 (秒) が表示されます。
    sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace="<MYPROJECT>"}) by (container)
    
  5. 「監視」 で、 「ダッシュボード」 を選択します。
  6. 「ダッシュボード」 ドロップダウンをクリックし、 Kubernetes /Compute Resources/Namespace (Workloads)」 を選択します。
  7. 「名前空間」 をプロジェクトに変更します。
  8. 「時刻範囲」「過去 5 分間」 に設定します。
  9. CPU とメモリーの使用量を確認します。
  10. 上記のスクリプトを control+C で停止します。
  11. ロギングの場合、組み込みの oc logs コマンドを使用できます。 リソースの閲覧ログをチェックし、 oc logs

IBM Cloud Logs サービスと IBM Cloud Monitoring サービスをプロビジョンして、Red Hat OpenShift on IBM Cloud アプリケーションのロギングとモニタリングのために使用することもできます。 このリンクに記載された説明に従って、クラスターの正常性をモニターするようにロギングとモニタリングのアドオンをセットアップしてください。

アプリのスケーリング

このセクションでは、アプリケーションを手動でスケーリングする方法と、自動でスケーリングする方法を学習します。

手動スケーリング

  1. oc scale コマンドを使用して、ポッドの手動スケーリングを実行できます。 このコマンドは、デプロイメント構成またはレプリケーションのコントローラーの新しいサイズを設定します
    oc scale dc/$MYPROJECT --replicas=2
    
  2. oc get pods コマンドを実行して、プロビジョンする新しいポッドを参照できます。
  3. 「モニター」 ステップを再実行して、更新されたメトリックを確認します。

自動スケーリング

水平ポッド自動スケーリング機能 (HPA) を使用して、デプロイメント構成 (dc) または複製コントローラー (rc) のスケールを、その dc または rc に属するポッドから収集されたメトリックに基づいて、Red Hat OpenShift on IBM Cloud が自動的に増減する方法を指定できます。

  1. ポッドの自動スケーリングをセットアップするには、その前に、まずクラスター内で実行されているポッドにリソース制限を設定する必要があります。 制限により、ポッドのための最小と最大の CPU およびメモリー使用量を選択することができます。 oc set resources コマンドを使用して、コンテナーで制限と要求を設定できます。
    oc set resources dc/$MYPROJECT --limits=cpu=250m,memory=512Mi --requests=cpu=100m,memory=256Mi
    
    確認するには、 oc describe dc/$MYPROJECT を実行して、LimitsRequests を見つけます。
  2. 自動スケーリング機能を作成するには、oc autoscale コマンドを実行する必要があります。これには、自動スケーリング機能で設定できるポッド数の下限 (min) と上限 (max)、およびすべてのポッドに対する目標平均 CPU 使用率 (要求された CPU の割合として表される) を指定します。 テストのために、--cpu-percent を 5% に設定します。
    oc autoscale dc/$MYPROJECT \
     --min=1 \
     --max=5 \
     --cpu-percent=5
    
  3. 「モニター」 ステップを再実行して、アプリケーションの負荷を生成します。
  4. oc get pods --watch コマンドを実行するか、Web コンソールでアプリケーションを確認することで、新しいポッドがプロビジョンされていることを確認できます。
  5. 自動スケーリング機能を削除します。
    oc delete hpa/$MYPROJECT
    

(オプション) コンテナー・イメージをビルドして Container Registry にプッシュする

このセクションでは、リモートのプライベート Container Registry を使用して、作成したコンテナー・イメージを格納する方法について学習します。

IBM Cloud Container Registry には、IBM によってホストおよび管理されている、マルチテナントの、可用性が高く、スケーラブルで、暗号化された専用イメージ・レジストリーが用意されています。 独自のイメージ名前空間をセットアップし、コンテナー・イメージを名前空間にプッシュすることにより、IBM Cloud Container Registry を使用できます。

  1. Container Registry URL を確認するには、以下を実行する:

    ibmcloud cr region
    
  2. レジストリを指す環境変数 MYREGISTRY を次のように定義する:

    export MYREGISTRY=us.icr.io
    
  3. レジストリー名前空間を既存のものから選択するか、新規作成します。 既存の名前空間をリストするには、以下を使用します。

    ibmcloud cr namespaces
    

    名前空間を新規作成するには、以下のようにします。

    ibmcloud cr namespace-add <REGISTRY_NAMESPACE>
    
  4. レジストリー名前空間を指定して MYNAMESPACE という環境変数を定義します。

    export MYNAMESPACE=<REGISTRY_NAMESPACE>
    
  5. IBM Cloud IAM API キーを指す環境変数名 API_KEY を定義する:

    export API_KEY=<YOUR_API_KEY>
    

    API キーを作成するには、このリンクを参照してください。

  6. レジストリー名前空間へのアクセスを自動化し、生成したビルダー・コンテナー・イメージを Container Registry にプッシュするために、シークレットを作成します。

    oc create secret docker-registry push-secret --docker-username=iamapikey --docker-password=$API_KEY --docker-server=$MYREGISTRY
    
  7. default プロジェクトの image-pull シークレットをコピーし、あなたのプロジェクトにパッチする:

    oc get secret all-icr-io -n default -o yaml | sed 's/default/'$MYPROJECT'/g' | oc -n $MYPROJECT create -f -
    
  8. 画像プルシークレットを有効にするには、 default サービスアカウントに追加する必要があります:

    oc secrets link serviceaccount/default secrets/all-icr-io --for=pull
    

サンプル・アプリケーションの複製

このセクションでは、 GitHub リポジトリーを複製します。このリポジトリーには、以前に作成した環境変数から yaml ファイルを生成するためのテンプレート・ファイルとシェル・スクリプトが付属しています。 生成されたファイルを使用してコンテナ・イメージを構築し、イメージをプライベート・コンテナ・レジストリにプッシュし、新しいアプリケーションをデプロイする。

  1. ターミナルで以下のコマンドを実行し、 GitHub リポジトリをあなたのマシンにクローンする:
    git clone https://github.com/IBM-Cloud/openshift-node-app
    
  2. アプリケーション・ディレクトリに移動する:
    cd openshift-node-app
    

BuildConfig を更新してビルダー・イメージを Container Registry にプッシュする

このステップでは、スクリプトを実行して openshift.template.yaml ファイルのセクションを更新し、 Container Registry 名前空間を指す新しい yaml ファイルを生成します。

  1. 以下の bash スクリプトを実行して、openshift.template.yaml ファイル内のプレースホルダーを更新し、openshift_private_registry.yaml ファイルを生成します。

    ./generate_yaml.sh use_private_registry
    
  2. 出力からのエクスポート・コマンドを実行して、既存の MYPROJECT 環境変数に新しいアプリケーション名を設定します。 新しいアプリケーション名を見るには echo $MYPROJECT を実行します。

  3. オプションで、生成された openshift_private_registry.yaml ファイルを調べて、すべてのプレースホルダーが、対応する環境変数に更新されているかどうかを確認します。 以下は、簡単なチェックを行うための3つの場所である。 次のセクションにスキップできます

  4. **オプション **ImageStreamname 属性がプロジェクトに設定されたオブジェクト ($MYPROJECT) を探し、 specdockerImageRepository 定義の下にあるプレースホルダ $MYREGISTRY$MYNAMESPACE$MYPROJECT が更新されているかどうかを確認する

    -
    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      annotations:
        openshift.io/generated-by: OpenShiftNewApp
      creationTimestamp: null
      labels:
        app: $MYPROJECT
        app.kubernetes.io/component: $MYPROJECT
        app.kubernetes.io/instance: $MYPROJECT
      name: $MYPROJECT
    spec:
      dockerImageRepository: $MYREGISTRY/$MYNAMESPACE/$MYPROJECT
      lookupPolicy:
        local: false
    status:
        dockerImageRepository: ""
    

    イメージ・ストリームとその関連付けられているタグによって、Red Hat OpenShift on IBM Cloud Container Platform 内からコンテナー・イメージを参照するための抽象化が行われます

  5. オプション spec セクション下の BuildConfig で、出力の種類が DockerImage に設定され、name 下の各プレースホルダーが更新されていることを確認します。

    spec:
      nodeSelector: null
      output:
        to:
          kind: DockerImage
          name: $MYREGISTRY/$MYNAMESPACE/$MYPROJECT:latest
        pushSecret:
          name: push-secret
    

    ビルドとは、入力パラメーターを最終的なオブジェクトに変換するプロセスのことです。 ほとんどの場合、このプロセスは入力パラメーターまたはソース・コードを実行可能イメージに変換するために使用されます。 BuildConfig オブジェクトは、ビルド・プロセス全体の定義です。

  6. オプション containers を検索し、image および name を確認します。

    containers:
    - image: $MYREGISTRY/$MYNAMESPACE/$MYPROJECT:latest
      name: $MYPROJECT
    
  7. 更新されていれば、YAML ファイルを 保存 します。

IBM Cloud Container Registry を使用したアプリケーションのデプロイ

このセクションでは、生成した openshift_private_registry.yaml ファイルを使用して、アプリケーションをクラスターにデプロイします。 デプロイしたら、ルートを作成してアプリケーションにアクセスします。

  1. 更新されたyamlを使って、buildconfig(bc)、deployconfig(dc)、service(svc)、imagestream(is)とともに、新しい OpenShift アプリケーションを作成する。

    oc apply -f openshift_private_registry.yaml
    
  2. ビルダー・コンテナ・イメージの作成と Container Registry へのプッシュを確認するには、以下のコマンドを実行する。

    oc logs -f bc/$PRIVREG
    

    コンテナ・イメージがプライベート・コンテナ・レジストリにプッシュされると、ログに以下のメッセージが表示される。

    Pushing image us.icr.io/mods15/vmac-openshift-app-registry:latest ...
    Getting image source signatures
    Copying blob sha256:9d038e1c7afbe92c29313557c02110e8fb796818ebb78441c68929381103a94b
    Copying blob sha256:61c671f49591a059c9b6728a9f84c16f5b00126470112ee9c9f9e01dbbfcc3ea
    Copying blob sha256:e2787650308235c87eff7d2b88c3ab217e84b74a3fa9696103bd46bb99068c7a
    Copying blob sha256:dcef409117430ed9906a59ad0a3ea0752061fbf8a9e544f4edd77667a25d85ae
    Copying blob sha256:a1f889dd610c6510c7fc091a51c247463f3cc9a7c67bdc397c9632168808f7d2
    Copying blob sha256:bd278801acd18ada10f43b732113a6fffc163011862ea6cde729f8dc59e64222
    Copying blob sha256:2d6c03ed5d15be86cdef7d9c0c9fea40a3f6b89662bca59680d037074f52bb38
    Copying blob sha256:fa2ef7f80d6fc9543f6eb472846931ed1cec2b5f776d1b67bcb1b9942e1a947e
    Copying blob sha256:ff5a4e4d3690ccc931900b63714d326cc53a58e644f8d0a4f06bf8c62f11c5c7
    Copying config sha256:01aa1ebb7be74529867106100c4e699ca2ae87f8242460771527f772e6a3d174
    Writing manifest to image destination
    Storing signatures
    Successfully pushed us.icr.io/mods15/vmac-openshift-app-registry@sha256:6847b889397704b9fb8c3122c84b505c3dc5f99a0669fb69f534d3504eec385d
    Push successful
    
  3. デプロイメントとサービスのステータスを確認できます。

    oc status
    
  4. 最新のイメージストリームを手動でインポートし、配備ができるだけ早く行われるようにします。

    oc import-image $PRIVREG
    

    デプロイメントに時間がかかる場合は、コマンドを使用することもできます。詳細については、この リンクを参照してください。

  5. 新しい経路を作成するためにサービスを公開します。

    oc expose service/$PRIVREG
    
  6. IBM、提供されたドメインからアプリケーションにアクセスできます。 以下のコマンドを実行して URL を取得します。

    oc get route/$PRIVREG
    
  7. HOST/PORT 値の下にあるホスト名の値をコピーし、 URL をブラウザに貼り付けて、 http://<hostname> でアプリケーションの動作を確認してください。 URLには必ず http を使用してください。

    同じアプリケーションが異なるルートに公開され、プライベート・コンテナー・レジストリーに格納されているコンテナー・イメージを使用してデプロイされているのを確認できます。

(オプション) プライベート IBM Cloud Git リポジトリーへのコードのプッシュ

このステップでは、 IBM Cloud Git のプライベート・リポジトリーを作成し、サンプル・アプリケーション・コードをプッシュします。 また、アプリケーションが更新されたときに自動的にビルドし、再デプロイする方法についても学びます。

プッシュを成功させるためには、SSHキーを設定する必要があります。 ドキュメントの Generate an SSH key pairAdd an SSH key to your GitLab account セクションの説明をご覧ください

  1. ブラウザーで、 IBM Cloud Git を開きます。

    上記のリンクは、us-south リージョン用です。 その他のリージョンの場合、ibmcloud regions を実行し、URL 内の us-south をリージョン名に置き換えます。

  2. 「New project」 をクリックし、「Create blank project」 をクリックして、プロジェクト名として openshiftapp を指定します。

  3. 「可視性レベル」「プライベート」 に設定します。

  4. 「プロジェクト構成 (Project Configuration)」 で、 「リポジトリーを README で初期化 (Initialize repository with a README)」 の横にあるチェック・マークを外します。

  5. Create projectをクリックする、

  6. Git のセットアップとサンプル・アプリケーション・コードのプッシュは、 「Git global setup 」と「 Push an existing Git repository 」のセクションの指示に従ってください。

  7. プライベート・リポジトリにコードをプッシュすると、プロジェクトにサンプル・コードが表示されるはずです。

Git デプロイ・トークンの作成

このセクションでは、リポジトリーへの 読み取り専用 アクセスを許可する Git デプロイ・トークンを作成します。

デプロイ・トークンを生成するには、以下のようにします。

  1. Git repoページのナビゲーション・パネルで、 Settings > Repositoryをクリックする。
  2. 「Deploy Tokens」 の横にある 「Expand」 をクリックします。
    1. 「名前」 フィールドに foropenshift と入力し、 「スコープ」 の下で read_repository を選択します。 最後に、 「デプロイ・トークンの作成」 をクリックします。
    2. 今後参照するために、生成された ユーザー名パスワード保存 します。
  3. ナビゲーション パネルで、 プロジェクトの概要をクリックし、次にクローンをクリックして、 HTTPS URL でクローンをコピーします。 今後参照するために、この URL を保存します。
  4. 後でこのチュートリアルの中で、YAML ファイルで使用するユーザー名、パスワード、およびプライベート Git リポジトリー URL の環境変数を定義します。
    export GIT_TOKEN_USERNAME=<PRIVATE_GIT_DEPLOY_TOKEN_USERNAME>
    export GIT_TOKEN_PASSWORD=<PRIVATE_GIT_DEPLOY_TOKEN_PASSWORD>
    export REPO_URL=<PRIVATE_GIT_REPO_URL>
    

専用レジストリーおよびプライベート・リポジトリーのコードを使用した、新しいアプリケーションのデプロイ

  1. 以下の bash スクリプトを実行して、openshift.template.yaml ファイル内のプレースホルダーを更新し、openshift_private_repository.yaml ファイルを生成します。

    ./generate_yaml.sh use_private_repository
    
  2. 出力からのエクスポート・コマンドを実行して、既存の MYPROJECT 環境変数に新しいプロジェクト名を設定します。

  3. スクリプトは、プライベート・コンテナー・レジストリーのプレースホルダーに加え、REPO_URL スペックの下の BuildConfig も上記のステップで設定した環境変数に置き換えます。

     source:
       git:
         uri: $REPO_URL
       type: Git
    
  4. 更新された yaml を使用して、buildconfig(bc)、deployconfig(dc)、service(svc)、imagestream(is) とともに新しい openshift アプリケーションを作成します

    oc apply -f openshift_private_repository.yaml
    
  5. ビルダー・ログを確認できます。

    oc logs -f bc/$PRIVREPO
    
  6. デプロイメントとサービスのステータスは、以下の方法で確認できる。

    oc status
    
  7. 最新のイメージストリームを手動でインポートし、配備ができるだけ早く行われるようにします。

    oc import-image $PRIVREPO
    
  8. 新しい経路を作成するためにサービスを公開します。

    oc expose service/$PRIVREPO
    
  9. IBM、提供されたドメインからアプリケーションにアクセスできます。 以下のコマンドを実行して URL を取得します。

    oc get route/$PRIVREPO
    
  10. HOST/PORT 値の下にあるホスト名の値をコピーし、 URL をブラウザに貼り付けて、 http://<hostname> でアプリケーションの動作を確認してください。 URLには必ず http を使用してください。

    プライベート Git リポジトリーからのコードと、専用レジストリー名前空間からのコンテナー・イメージを使用して、新しいアプリケーションがデプロイされました。

アプリケーションを更新し、再デプロイする

このステップでは、ビルドとデプロイのプロセスを自動化します。 アプリケーションを更新し、変更をプライベート・リポジトリーにプッシュするたびに、新しいビルドが実行され、新しいバージョンのコンテナー・イメージが生成されます。 その後、このイメージは自動的にデプロイされます。

  1. 新しい GitLab Webhook トリガーを作成します。 Webhook トリガーを使用すると、Red Hat OpenShift on IBM Cloud Container Platform API エンドポイントに要求を送信して新しいビルドをトリガーできます。GitHub、GitLab、Bitbucket、または Generic Webhook を使用して、これらのトリガーを定義できます。

    oc set triggers bc $PRIVREPO --from-gitlab
    
  2. GitLab リポジトリー上で Webhook を追加するには、URL とシークレットが必要です

    • Webhook GitLab URL の場合には以下のようにします。
      oc describe bc/$PRIVREPO | grep -A 1 "GitLab"
      
    • Webhook URL 内に渡す必要のあるシークレットの場合には以下のようにします。
      oc get bc/$PRIVREPO -o yaml | grep -A 3 "\- gitlab"
      
    • 上記のコマンド出力の gitlab の下にシークレット値を持つ、Webhook GitLab URL 内の <secret>置き換えます
  3. Git repo HTTPS リンクを使ってブラウザでプライベート git repo を開き、 Settings をクリックして Webhooks をクリックします。

  4. URL を貼り付け、 トリガーとして プッシュ通知を選択し 、「ウェブフックを追加」 をクリックします。 Webhook was created メッセージが表示されます。

  5. イメージ・ストリームの ImagePolicy を更新して、スケジュールされた間隔で Container Registry を照会し、タグとイメージのメタデータを同期します。 こうすると、tags 定義が更新されます

    oc tag $MYREGISTRY/$MYNAMESPACE/${PRIVREPO}:latest ${PRIVREPO}:latest --scheduled=true
    
  6. クローンしたリポジトリをIDEで開き、ローカルファイルの h1 タグを更新する。 public/index.html ファイルを更新し、 Congratulations! <insert your name> に変更してください。

  7. コードを保存し、リポジトリにプッシュする。

     git add public/index.html
    
     git commit -m "Updated with my name"
    
     git push -u origin master
    
  8. oc status コマンドを使用して、ビルドやデプロイの進行状況を確認できます。 デプロイメントが成功したら、ルート HOST アドレスを最新表示して、更新された Web アプリを参照します。

    デプロイメントでは、最新のイメージ・ストリームのインポートに最大で 15 分かかることがあります。 待つこともできるし、 oc import-image $PRIVREPO コマンドを使って手動でインポートすることもできる。 詳細はこちらの リンクを参照。

(オプション) 独自のカスタム・ドメインを使用する

このセクションでは、カスタム・ドメインを所有していることと、ドメインの DNS レコードを変更できることが必要です。 IBM 提供のドメインを指す CNAME レコードを作成する必要が生じます。

CNAME レコードのセットアップ手順は、使用している DNS プロバイダーによって異なります。 ドメインの DNS 管理/ゾーンで新しい CNAME レコードを追加し、「Host(name)」openshiftapp または任意のサブドメインに設定し、「Points to」 を IBM 提供ドメイン (HTTP や HTTPS は付けない) に設定します。

HTTP の使用

  1. 外部クライアントが名前でアクセスできるように、<HOSTNAME> をご使用のホスト名 (例: www.example.com または openshiftapp.example.com) に置き換えて、ホスト名でサービスを公開するルートを作成します。
    oc expose svc/$PRIVREPO --hostname=<HOSTNAME> --name=$PRIVREPO-domain --port=3000
    
  2. http://<HOSTNAME>/ でアプリケーションにアクセスします。

HTTPS の使用

  1. 保護された HTTPS ルートを作成するには、Let's Encrypt などの CA からの独自の証明書および鍵ファイルを使用することも、Secrets Manager から注文することもできます。 それらを create route コマンドで渡します
    oc create route edge $PRIVREPO-httpsca --service=$PRIVREPO --cert=example.pem --key=example.key --hostname=<www.HOSTNAME> --port=3000
    
    この例では、Edge 終端を使用しました。 パススルーや再暗号化など、他のセキュア・ルートや終端タイプについて確認するには、oc create route --help コマンドを実行します。

リソースを削除する

  • アプリケーションに固有のすべてのリソース・オブジェクトを削除します。

    oc delete all --selector app=$PRIVREPO
    oc delete all --selector app=$PRIVREG
    oc delete all --selector app=$MYPROJECT
    

    プロジェクト内のアプリケーション名をリストするには、以下を実行します。 oc get svc | awk '{print $1}'

  • プロジェクトを削除します。

    oc delete project $MYPROJECT
    
  • アプリケーション・リポジトリーを削除します。

    • Git リポジトリー・ページのナビゲーション・パネルで、 「設定」 > 「一般」 をクリックします。
    • 「拡張」 の横にある 「拡張」 をクリックします。
    • 「プロジェクトの削除」 をクリックし、プロジェクトの削除を確認します。
  • Container Registryからコンテナー・イメージを削除します。

    • ブラウザーを使用して、 Container Registry のリポジトリー・ページにナビゲートします。
    • このチュートリアルの一部として作成されたイメージを選択し、削除します。
  • 作成したクラスターを削除します。

関連コンテンツ