仮想プライベート・クラウド (VPC) での最初のクラスターのセットアップ
仮想プライベートクラウド
仮想プライベート・クラウド (VPC) に Red Hat® OpenShift® on IBM Cloud® クラスターを作成します。
- Red Hat OpenShift on IBM Cloud クラスターインフラストラクチャ環境に必要なすべての マネージドサービスのメリット を提供すると同時に、アプリケーションのデプロイには Red Hat Enterprise Linux 上で動作する Red Hat OpenShift 工具およびカタログ を利用します。
- VPC は、プライベート・クラウド環境のセキュリティーとパブリック・クラウドの動的なスケーラビリティーを兼ね備えています。 VPC では、v2 API、CLI、コンソールの一部の機能を介して、この次世代の Red Hat OpenShift on IBM Cloud インフラストラクチャー・プロバイダーを使用します。
- このチュートリアルでは、ibmcloud CLIコマンドを使用してVPC内にクラスタを作成します。 あるいは、 OpenShift クラスタを VPC インフラストラクチャにデプロイするための、オープンソースでエンタープライズ対応の Terraform モジュールを使うこともできる。 Terraform IBM Modules registryでさらに多くのモジュールを調べることができる。
対象読者
このチュートリアルは、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 を試してみてください。 そうしない場合は、以下のステップを実行してローカルのコマンド・ライン環境をセットアップしてください。
- IBM Cloud CLI (
ibmcloud)、Kubernetes Service プラグイン (ibmcloud oc)、および IBM Cloud Container Registry プラグイン (ibmcloud cr) をインストールします。 - Red Hat OpenShift (
oc) CLI および Kubernetes (kubectl) CLI をインストールします。 - VPC を操作するために、
infrastructure-serviceプラグインをインストールします。 コマンドを実行するための接頭部は、ibmcloud isです。
ibmcloud plugin install infrastructure-service ``` 4. Kubernetes Service プラグインを最新バージョンに更新します。 ```sh {: pre} ibmcloud plugin update kubernetes-service ``` - IBM Cloud CLI (
VPC でのクラスターの作成
IBM Cloud の仮想プライベート・クラウド (VPC) 環境を作成します。 その後、その VPC インフラストラクチャーに Red Hat OpenShift on IBM Cloud クラスターを作成します。 VPC について詳しくは、Virtual Private Cloud の概説を参照してください。
-
VPC 環境を作成するアカウント、リソース・グループ、および IBM Cloud リージョンにログインします。 VPCは、クラスターを作成する予定のマルチゾーン・メトロリージョン内に設定する必要があります。 このチュートリアルでは、
us-southに VPC を作成します。 サポートされるその他のリージョンについては、VPC クラスターに対応しているマルチゾーンの大都市を参照してください。 フェデレーテッドIDをお持ちの場合は、--ssoオプションを指定してください。ibmcloud login -r us-south [-g <resource_group>] [--sso] -
クラスター用の VPC を作成します。 詳しくは、コンソールまたは CLI で VPC を作成する方法に関する資料を参照してください。
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} -
クラスターの内部レジストリーをバックアップするための標準 IBM Cloud Object Storage インスタンスを作成します。 出力中のインスタンス ID をメモします。
ibmcloud resource service-instance-create myvpc-cos cloud-object-storage standard global -
VPC のサブネットと同じゾーンにクラスターを作成します。 次のコマンドを実行すると、ダラスにバージョン 4.21 のクラスターが作成されます。このクラスターは、デフォルトの Red Hat OpenShift コンポーネントをデプロイできるように、コア数が4以上、メモリが16 GB以上のワーカーノードを2台とする最小構成で構成されています。 コマンドのオプションについて詳しくは、
cluster create vpc-gen2CLI リファレンス資料を参照してください。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 -
クラスターの詳細をリストします。 クラスターの状態を確認し、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 -
クラスターのコンテキストを設定することで、自分自身をユーザーとして Red Hat OpenShift クラスターに追加します。
ibmcloud oc cluster config --cluster myvpc-cluster --admin -
ブラウザーで、マスター URL のアドレスに
/consoleを付加してナビゲートします。 例えば、https://c0.containers.cloud.ibm.com:23652/consoleなどです。 時間に余裕があれば、Red Hat OpenShift Web コンソールのさまざまな領域を探索してみてください。 -
Red Hat OpenShift のWebコンソールのメニューバーから、自分のプロフィール( IAM#user.name@email.com > ログインコマンドをコピー )をクリックします。
oc loginトークン・コマンドを表示してコマンド・ラインにコピーし、CLI を使用して認証を受けます。後で Red Hat OpenShift コンソールにアクセスするために、クラスターのマスター URL を保存します。 今後のセッションでは、
cluster configのステップをスキップして、代わりにコンソールからログイン・コマンドをコピーすることができます。 -
バージョンを調べて、ご使用のクラスターで
ocコマンドが正常に実行されることを確認します。oc version出力例
Client Version: v4.21.0 Kubernetes Version: v1.35.7.2クラスター内のすべてのワーカー・ノードまたはポッドのリストなど、管理者権限を必要とする操作を実行できない場合は、
ibmcloud oc cluster config --cluster myvpc-cluster --adminコマンドを実行して、クラスター管理者の TLS 証明書と許可ファイルをダウンロードします。
クラスターへのアプリのデプロイ
クラスター内部からの要求でのみ使用できる新しいサンプル・アプリを素早くデプロイします。
-
「Hello World」アプリ用の Red Hat OpenShift プロジェクトを作成します。
oc new-project hello-world -
ソースコードからサンプルアプリをビルドしてください。 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" -
サンプルの Hello World アプリのコンポーネントが作成されたことを確認します。
- 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 ロード・バランサーを介してアプリのサービスにアクセスできる仕組みを示しています。
-
クラスターに 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-portがportと同じですが、作成する他のアプリでは別のポートを使用することもできます。-n <hello-world>デプロイメントが含まれている名前空間。 -
クラスターに Kubernetes
LoadBalancerサービスが正常に作成されたことを確認します。 KubernetesLoadBalancerサービスを作成すると、VPC ロード・バランサーが自動的に作成されます。 VPC ロード・バランサーは KubernetesLoadBalancerサービスにホスト名を割り当てます。これは CLI 出力の「LoadBalancer Ingress」フィールドで確認できます。 VPC では、クラスター内のサービスの外部 IP アドレスは固定アドレスでないため、サービスにホスト名が割り当てられます。 VPC ロード・バランサーが VPC にプロビジョンされるまで数分かかります。 VPC ロード・バランサーの準備ができるまで、そのホスト名を使用して KubernetesLoadBalancerサービスにアクセスすることはできません。oc describe service hw-lb-svc -n hello-worldCLI 出力例:
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 -
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を実行します。 KubernetesLoadBalancerサービスの UID を調べるには、kubectl get svc hw-lb-svc -o yamlを実行して出力中の metadata.uid フィールドを確認します。ibmcloud is load-balancers以下の CLI 出力例では、
kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306という名前の VPC ロード・バランサーが KubernetesLoadBalancerサービス用に作成されています。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 -
手順 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! -
オプション: このレッスンで作成したリソースをクリーンアップする場合は、各アプリに割り当てられたラベルを使用できます。
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 チャネルに投稿してみてください。