仮想プライベート・クラウド (VPC) での最初のクラスターのセットアップ

仮想プライベートクラウド

仮想プライベート・クラウド (VPC) に Red Hat® OpenShift® on IBM Cloud® クラスターを作成します。

対象読者

このチュートリアルは、VPC コンピュートのクラスターを Red Hat OpenShift on IBM Cloud 内に初めて作成する管理者を対象としています。

目標

このチュートリアルのレッスンでは、仮想プライベート・クラウド (VPC) に Red Hat OpenShift on IBM Cloud クラスターを作成します。 次に、 Red Hat OpenShift の組み込みコンポーネントを利用し、 Red Hat OpenShift プロジェクトにアプリをデプロイし、VPCロードバランサーを介してアプリを公開することで、外部ユーザーがサービスにアクセスできるようにします。

取得する内容

このチュートリアルでは、以下のリソースを作成します。 チュートリアルの完了後にこれらのリソースを保持しない場合は、これらのリソースを削除するオプションのステップがあります。

  • VPC クラスター
  • クラスターにデプロイされた単純な Hello World アプリ
  • アプリを公開するための VPC ロード・バランサー

前提条件

以下の前提条件ステップを実行して、権限およびコマンド・ライン環境をセットアップします。

許可
アカウント所有者である場合は、クラスタを作成するために必要な権限をすでに持っているため、次の手順に進むことができます。 その他の場合は、アカウント所有者に、API キーのセットアップと IBM Cloud IAM での最小限のユーザー権限の割り当てを依頼してください。
コマンド行ツール
コマンドラインからリソースに素早くアクセスするには、 IBM Cloud Shell を試してみてください。 そうしない場合は、以下のステップを実行してローカルのコマンド・ライン環境をセットアップしてください。
  1. IBM Cloud CLI (ibmcloud)、Kubernetes Service プラグイン (ibmcloud oc)、および IBM Cloud Container Registry プラグイン (ibmcloud cr) をインストールします
  2. Red Hat OpenShift (oc) CLI および Kubernetes (kubectl) CLI をインストールします
  3. VPC を操作するために、infrastructure-service プラグインをインストールします。 コマンドを実行するための接頭部は、ibmcloud is です。
    ibmcloud plugin install infrastructure-service
    ```
4. Kubernetes Service プラグインを最新バージョンに更新します。
```sh {: pre}
    ibmcloud plugin update kubernetes-service
    ```


VPC でのクラスターの作成

IBM Cloud の仮想プライベート・クラウド (VPC) 環境を作成します。 その後、その VPC インフラストラクチャーに Red Hat OpenShift on IBM Cloud クラスターを作成します。 VPC について詳しくは、Virtual Private Cloud の概説を参照してください。

  1. VPC 環境を作成するアカウント、リソース・グループ、および IBM Cloud リージョンにログインします。 VPCは、クラスターを作成する予定のマルチゾーン・メトロリージョン内に設定する必要があります。 このチュートリアルでは、us-south に VPC を作成します。 サポートされるその他のリージョンについては、VPC クラスターに対応しているマルチゾーンの大都市を参照してください。 フェデレーテッドIDをお持ちの場合は、 --sso オプションを指定してください。

    ibmcloud login -r us-south [-g <resource_group>] [--sso]
    
  2. クラスター用の VPC を作成します。 詳しくは、コンソールまたは CLI で VPC を作成する方法に関する資料を参照してください。

    1. myvpc という VPC を作成し、出力の ID をメモします。 VPC によって、パブリック・クラウド内にワークロードを実行するための分離された環境が提供されます。 複数のクラスターに同じ VPC を使用できます。例えば、相互に通信する必要がある別々のマイクロサービスを別々のクラスターでホストする場合などです。 例えば、部門別にクラスターを分ける場合は、クラスターごとに VPC を作成します。
        ibmcloud is vpc-create myvpc
        ```
    2. パブリック・ゲートウェイを作成し、出力中の **ID** をメモします。 次の手順で、そのパブリック・ゲートウェイを VPC サブネットに接続します。これにより、ワーカー・ノードがパブリック・ネットワークで通信できるようになります。 Red Hat OpenShift のデフォルトのコンポーネント (Web コンソールや OperatorHub など) を使用するには、パブリック・ネットワークへのアクセスが必要です。 この手順をスキップする場合は、代わりに VPN 接続などを使用して VPC のプライベート・ネットワークに接続してから、Red Hat OpenShift Web コンソールにアクセスしたり、`kubectl` コマンドを使用してクラスターにアクセスしたりする必要があります。
    ```sh {: pre}
        ibmcloud is public-gateway-create gateway-us-south-1 <vpc_ID> us-south-1
        ```
    3. VPC 用のサブネットを作成し、その **ID** をメモします。 VPC サブネットを作成する際は、以下の情報を考慮してください。
        *  **ゾーン**: クラスター内のゾーンごとに VPC サブネットを 1 つ用意する必要があります。 利用可能なゾーンは、VPCを作成したリージョンによって異なります。 リージョン内の使用可能なゾーンをリストするには、`ibmcloud is zones` を実行します。
        *  **IP アドレス**: クラスター内のワーカー・ノードとロード・バランサー・サービスのプライベート IP アドレスは VPC サブネットから取得されるので、必ず、[256 個などの十分な数の IP アドレスが含まれるサブネットを作成](/docs/openshift?topic=openshift-vpc-subnets#vpc_basics_subnets)してください。 後で VPC サブネットの IP アドレスの数を変更することはできません。
        *  **パブリック・ゲートウェイ**: 先ほど作成したパブリック・ゲートウェイを指定してください。 パブリック・ゲートウェイは、クラスター内のゾーンごとに 1 つ必要です。
    
            ```sh {: pre}
            ibmcloud is subnet-create mysubnet1 VPC_ID --zone us-south-1 --ipv4-address-count 256 --pgw GATEWAY_ID
            ```
    複数のゾーンがある場合は、各ゾーンに対してこれらの手順を繰り返します。
    {: tip}
    
    
  3. クラスターの内部レジストリーをバックアップするための標準 IBM Cloud Object Storage インスタンスを作成します。 出力中のインスタンス ID をメモします。

    ibmcloud resource service-instance-create myvpc-cos cloud-object-storage standard global
    
  4. VPC のサブネットと同じゾーンにクラスターを作成します。 次のコマンドを実行すると、ダラスにバージョン 4.21 のクラスターが作成されます。このクラスターは、デフォルトの Red Hat OpenShift コンポーネントをデプロイできるように、コア数が4以上、メモリが16 GB以上のワーカーノードを2台とする最小構成で構成されています。 コマンドのオプションについて詳しくは、cluster create vpc-gen2 CLI リファレンス資料を参照してください。

    ibmcloud oc cluster create vpc-gen2 --name myvpc-cluster --zone us-south-1 --version 4.21_openshift --flavor bx2.4x16 --workers 2 [--operating-system REDHAT_8_64] --vpc-id VPC_ID --subnet-id VPC_SUBNET_ID --cos-instance COS_CRN --disable-outbound-traffic-protection
    
  5. クラスターの詳細をリストします。 クラスターの状態を確認し、Ingress サブドメインを確認し、マスター URL をメモします。 クラスターの作成が完了するまで、しばらく時間がかかる可能性があります。 クラスターの状態が 通常と表示されてから、Red Hat OpenShift Web コンソールおよびその他の経路に使用するクラスター・ドメインをデプロイして更新するために、クラスター・ネットワークと Ingress コンポーネントにさらに約 10 分かかります。 続行する前に、Ingress サブドメイン<cluster_name>-<globally_unique_account_HASH>-0001.<region>.containers.appdomain.cloud のパターンに従っていることを確認して、クラスターが作動可能になるまで待ちます。

    ibmcloud oc cluster get --cluster myvpc-cluster
    
  6. クラスターのコンテキストを設定することで、自分自身をユーザーとして Red Hat OpenShift クラスターに追加します。

    ibmcloud oc cluster config --cluster myvpc-cluster --admin
    
  7. ブラウザーで、マスター URL のアドレスに /console を付加してナビゲートします。 例えば、https://c0.containers.cloud.ibm.com:23652/consoleなどです。 時間に余裕があれば、Red Hat OpenShift Web コンソールのさまざまな領域を探索してみてください。

  8. Red Hat OpenShift のWebコンソールのメニューバーから、自分のプロフィール( IAM#user.name@email.com > ログインコマンドをコピー )をクリックします。 oc login トークン・コマンドを表示してコマンド・ラインにコピーし、CLI を使用して認証を受けます。

    後で Red Hat OpenShift コンソールにアクセスするために、クラスターのマスター URL を保存します。 今後のセッションでは、cluster config のステップをスキップして、代わりにコンソールからログイン・コマンドをコピーすることができます。

  9. バージョンを調べて、ご使用のクラスターで oc コマンドが正常に実行されることを確認します。

    oc version
    

    出力例

    Client Version: v4.21.0
    Kubernetes Version: v1.35.7.2
    

    クラスター内のすべてのワーカー・ノードまたはポッドのリストなど、管理者権限を必要とする操作を実行できない場合は、ibmcloud oc cluster config --cluster myvpc-cluster --admin コマンドを実行して、クラスター管理者の TLS 証明書と許可ファイルをダウンロードします。

クラスターへのアプリのデプロイ

クラスター内部からの要求でのみ使用できる新しいサンプル・アプリを素早くデプロイします。

  1. 「Hello World」アプリ用の Red Hat OpenShift プロジェクトを作成します。

    oc new-project hello-world
    
  2. ソースコードからサンプルアプリをビルドしてください。 Red Hat OpenShift の new-app コマンドを使用すると、イメージをビルドするための Dockerfile とアプリのコードを含むリモート・リポジトリー内のディレクトリーを参照できます。 このコマンドは、イメージをビルドし、そのイメージをローカルの Docker レジストリに保存し、アプリのデプロイ構成(dc )およびサービス(svc )を作成します。新しいアプリの作成に関する詳細については、 Red Hat OpenShift のドキュメントを参照してください

    oc new-app --name hello-world https://github.com/IBM/container-service-getting-started-wt --context-dir="Lab 1"
    
  3. サンプルの Hello World アプリのコンポーネントが作成されたことを確認します。

    1. hello-world サービスをリストし、サービス名をメモします。 今のところ、アプリは、これらの内部クラスター IP アドレスのトラフィックだけを listen しています。 次のレッスンでは、サービスにロード・バランサーを作成して、外部トラフィック要求をロード・バランサーでアプリケーションに転送できるようにします。
        oc get svc -n hello-world
        ```
        出力例
        ```sh {: screen}
        NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
        hello-world   ClusterIP   172.21.xxx.xxx   <none>       8080/TCP   31m
        ```
    2. ポッドをリストします。 名前に `build` が含まれているポッドは、新規アプリのビルド・プロセスの一部として**完了した**ジョブです。 **hello-world** ポッドの状況が **Running** であることを確認します。
    ```sh {: pre}
        oc get pods -n hello-world
        ```
        出力例
        ```sh {: screen}
        NAME                  READY     STATUS             RESTARTS   AGE
        hello-world-1-9cv7d   1/1       Running            0          30m
        hello-world-1-build   0/1       Completed          0          31m
        hello-world-1-deploy  0/1       Completed          0          31m
        ```
    
    
    

アプリをパブリックに公開するための VPC ロード・バランサーのセットアップ

パブリック・ネットワークでアプリを外部要求に公開できるように、VPC ロード・バランサーをセットアップします。

クラスター内に Kubernetes LoadBalancer サービスを作成すると、VPC 内のクラスター外部に VPC ロード・バランサーが自動的に作成されます。 この VPC ロード・バランサーはマルチゾーン対応であり、ワーカー・ノードで自動的に開かれるプライベート NodePort を介してアプリに対する要求を転送します。 以下の図は、ワーカー・ノードがプライベート・サブネットにしか接続されていなくても、ユーザーが VPC ロード・バランサーを介してアプリのサービスにアクセスできる仕組みを示しています。

  1. クラスターに Kubernetes LoadBalancer サービスを作成して、hello world アプリをパブリックに公開します。

    oc expose deployment/hello-world --type=LoadBalancer --name=hw-lb-svc  --port=8080 --target-port=8080 -n hello-world
    

    出力例

    service "hw-lb-svc" exposed
    
    公開パラメーターに関する詳細
    パラメーター 説明
    expose デプロイメントなどの Kubernetes リソースをサービスとして公開します。これにより、ユーザーは VPC ロード・バランサーのホスト名を使用してリソースにアクセスできるようになります。
    dc/<hello-world-deployment> このサービスを使用して公開するリソース・タイプとリソースの名前。
    --name=<hello-world-service> サービスの名前。
    --type=LoadBalancer 作成するサービス・タイプ。 このレッスンでは、LoadBalancer サービスを作成します。
    --port=<8080> サービスが外部ネットワーク・トラフィックを listen するポート。
    --target-port=<8080> アプリが listen し、サービスが着信ネットワーク・トラフィックを送信するポート。 この例では target-portport と同じですが、作成する他のアプリでは別のポートを使用することもできます。
    -n <hello-world> デプロイメントが含まれている名前空間。
  2. クラスターに Kubernetes LoadBalancer サービスが正常に作成されたことを確認します。 Kubernetes LoadBalancer サービスを作成すると、VPC ロード・バランサーが自動的に作成されます。 VPC ロード・バランサーは Kubernetes LoadBalancer サービスにホスト名を割り当てます。これは CLI 出力の「LoadBalancer Ingress」フィールドで確認できます。 VPC では、クラスター内のサービスの外部 IP アドレスは固定アドレスでないため、サービスにホスト名が割り当てられます。 VPC ロード・バランサーが VPC にプロビジョンされるまで数分かかります。 VPC ロード・バランサーの準備ができるまで、そのホスト名を使用して Kubernetes LoadBalancer サービスにアクセスすることはできません。

    oc describe service hw-lb-svc -n hello-world
    

    CLI 出力例:

    NAME:                     hw-lb-svc
    Namespace:                default
    Labels:                   app=hello-world-deployment
    Annotations:              <none>
    Selector:                 app=hello-world-deployment
    Type:                     LoadBalancer
    IP:                       172.21.xxx.xxx
    LoadBalancer Ingress:     1234abcd-us-south.lb.appdomain.cloud
    Port:                     <unset> 8080/TCP
    TargetPort:               8080/TCP
    NodePort:                 <unset> 32040/TCP
    Endpoints:
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:
        Type    Reason                Age   From                Message
        ----    ------                ----  ----                -------
        Normal  EnsuringLoadBalancer  1m    service-controller  Ensuring load balancer
        Normal  EnsuredLoadBalancer   1m    service-controller  Ensured load balancer
    
  3. VPC ロード・バランサーが VPC に正常に作成されたことを確認します。 出力で、VPC ロード・バランサーの**「Provision status」active「Operating status」**が online であることを確認します。

    VPC ロード・バランサーの名前の形式は、kube-<cluster_ID>-<kubernetes_lb_service_UID> です。 クラスター ID を確認するには、ibmcloud oc cluster get --cluster CLUSTER_NAME を実行します。 Kubernetes LoadBalancer サービスの UID を調べるには、kubectl get svc hw-lb-svc -o yaml を実行して出力中の metadata.uid フィールドを確認します。

    ibmcloud is load-balancers
    

    以下の CLI 出力例では、kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 という名前の VPC ロード・バランサーが Kubernetes LoadBalancer サービス用に作成されています。

    ID                                          Name                                                         Family        Subnets               Is public   Provision status   Operating status   Resource group
    r006-d044af9b-92bf-4047-8f77-a7b86efcb923   kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306   Application   mysubnet-us-south-3   true        active             online             default
    
  4. 手順 2 で確認した、VPC ロード・バランサーから割り当てられた Kubernetes LoadBalancer サービスのホスト名とポートに対して curl を実行して、アプリに要求を送信します。 次に例を示します。

    curl 1234abcd-us-south.lb.appdomain.cloud:8080
    

    出力例

    Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster!
    
  5. オプション: このレッスンで作成したリソースをクリーンアップする場合は、各アプリに割り当てられたラベルを使用できます。

    1. hello-world プロジェクト内の各アプリのすべてのリソースをリストします。
        oc get all -l app=hello-world -o name -n hello-world
        ```
        出力例
        ```sh {: screen}
        pod/hello-world-1-dh2ff
        replicationcontroller/hello-world-1
        service/hello-world
        deploymentconfig.apps.openshift.io/hello-world
        buildconfig.build.openshift.io/hello-world
        build.build.openshift.io/hello-world-1
        imagestream.image.openshift.io/hello-world
        imagestream.image.openshift.io/node
        ```
    2. 作成したすべてのリソースを削除します。
    ```sh {: pre}
        oc delete all -l app=hello-world -n hello-world
        ```
    
    

次のステップ

VPC クラスターの作成が完了したので、実行できる内容について詳しく学習します。

VPC クラスターに関する支援を求めたり、質問をしたり、フィードバックを提供したりするには、 Slack チャネルに投稿してみてください。