Compute Engine VM 上に Google Distributed Cloud のデモ用の管理クラスタとユーザー クラスタを作成する

Compute Engine 仮想マシン(VM)にデモクラスタを作成して、ベアメタル版 Google Distributed Cloud(ソフトウェアのみ)(旧称 Google Distributed Cloud Virtual、旧称 Anthos clusters on bare metal)について学習します。このガイドでは、管理クラスタとユーザー クラスタの作成に 40 分から 1 時間ほどかかります。このガイドで作成するデモクラスタは、Google Distributed Cloud クラスタのプロビジョニングと運用のプロセスを評価するうえで役立ちますが、本番環境での使用を目的としたものではありません。

このドキュメントでは、次のスクリプトを実行するプロセスについて説明します。

  • デモクラスタのインストール用に 5 台の Compute Engine VM をプロビジョニングする
  • クラスタ接続を提供する VPC ネットワークを設定する

スクリプトによって必要なリソースがプロビジョニングされたら、bmctl、Google Cloud コンソール、Google Cloud CLI、または Terraform のいずれかを使用して、管理クラスタと、ワークロードをホストできるユーザー クラスタを作成します。

手順の概要

このガイドでは、次の主なステップについて説明します。

  1. スクリプトに必要な環境変数があり、コマンドの実行に必要な基本情報を収集できるように、ローカル環境を準備します。

  2. ダウンロードしたスクリプトを使用して、VM とネットワークを作成します。

  3. サポートされているいずれかのクライアントを使用して管理クラスタを作成します。

  4. サポートされているいずれかのクライアントを使用してユーザー クラスタを作成します。

  5. クリーンアップして、このガイドで作成したクラスタと VM を削除します。

1. ローカルの環境を準備する

このガイドでは、ネットワークを設定するためのスクリプトを使用するため、多くの情報を収集したり、計画を立てる必要はありません。次の手順では、ローカル環境を設定し、ガイドの以降のセクションで必要となる基本情報を収集します。

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. このページのスクリプトとコマンドで使用される環境変数を設定する際に必要となるため、プロジェクト ID をメモしておきます。既存のプロジェクトを選択した場合は、ご自身がプロジェクト オーナーまたはプロジェクト編集者であることを確認します。
  7. このスクリプトは、Cloud Shell で実行できます。また、Linux あるいは macOS が実行されているローカルマシンで実行できます。Cloud Shell を使用しない場合:
    1. 最新の Google Cloud CLI(Google Cloud とやり取りするためのコマンドライン ツール)がインストールされていることを確認します。必要に応じて gcloud CLI コンポーネントを更新します。
      gcloud components update

      gcloud CLI のインストール方法によっては、次のメッセージが表示されることがあります。

      You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation. You can run the following command to achieve the same result for this installation:

      手順に沿ってコマンドをコピーして貼り付け、コンポーネントを更新します。

    2. kubectl がインストールされていることを確認します。kubectl をインストールする必要がある場合は、次のコマンドを実行します。
      gcloud components install kubectl
  8. 環境変数を設定します。
    export PROJECT_ID=PROJECT_ID
    export ADMIN_CLUSTER_NAME=ADMIN_CLUSTER_NAME
    export ON_PREM_API_REGION=ON_PREM_API_REGION
    export ZONE=ZONE
    • ADMIN_CLUSTER_NAME: 管理クラスタに付ける名前。
    • ON_PREM_API_REGION: GKE On-Prem API が稼働し、メタデータを保存する Google Cloud リージョン。us-central1 または別のサポートされているリージョンを指定します。
    • ZONE: Compute Engine VM が作成される Google Cloud ゾーン。us-central1-a または他の Compute Engine ゾーンを使用できます。
  9. デフォルトのプロジェクトとゾーンを設定するには、次のコマンドを実行します。
    gcloud config set project $PROJECT_ID
    gcloud config set compute/zone $ZONE

    PERMISSION_DENIED エラーが発生した場合は、入力したプロジェクト ID を再確認してください。プロジェクト ID が正しい場合は、gcloud auth login を実行して、プロジェクトにアクセスできるアカウントで gcloud CLI にログインします。

  10. インストールできるサポート対象バージョンのリストを取得します。
    gcloud container bare-metal admin-clusters query-version-config \
        --location=ON_PREM_API_REGION
  11. 前のコマンドの出力からバージョンを選択し、環境変数に設定します。
    export BMCTL_VERSION=BMCTL_VERSION

    Google Distributed Cloud の最新の機能と修正を取得するには、互換性が最も高いバージョンを選択することをおすすめします。

2. VM とネットワークを作成する

このセクションでは、install_admin_cluster.sh スクリプトをダウンロードして実行します。

  1. anthos-samples リポジトリのクローンを作成し、スクリプトを配置するディレクトリに移動します。

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/anthos-bm-gcp-bash
    
  2. スクリプトを実行します。

    bash install_admin_cluster.sh
    
  3. プロンプトで「2」と入力して Compute Engine インフラストラクチャのみを設定します。プロンプトが表示されたら、選択内容を確認します。

    このスクリプトにより、Compute Engine VM と VXLAN ネットワークが作成され、管理ワークステーションとクラスタノードが設定されます。この設定は 5 分ほどで完了します。

    スクリプトについて詳しくは、次のリンクをクリックしてください。

    スクリプトについて

    スクリプトは、anthos-samples GitHub リポジトリの anthos-bm-gcp-bash フォルダにあります。このスクリプトは、次の手動手順を自動化します。

    1. 次の Google Cloud APIs を有効にします。
      anthos.googleapis.com
      anthosaudit.googleapis.com
      anthosgke.googleapis.com
      cloudresourcemanager.googleapis.com
      connectgateway.googleapis.com
      container.googleapis.com
      compute.googleapis.com
      gkeconnect.googleapis.com
      gkehub.googleapis.com
      gkeonprem.googleapis.com
      serviceusage.googleapis.com
      stackdriver.googleapis.com
      monitoring.googleapis.com
      logging.googleapis.com
      kubernetesmetadata.googleapis.com
      iam.googleapis.com
      opsconfigmonitoring.googleapis.com
    2. このスクリプトは、さまざまな API とサービスに対して複数のサービス アカウントを作成する代わりに、baremetal-gcr という単一のサービス アカウントを作成し、それに次の IAM ロールを付与します。
      • roles/gkehub.admin
      • roles/gkehub.connect
      • roles/logging.logWriter
      • roles/monitoring.dashboardEditor
      • roles/monitoring.metricWriter
      • roles/monitoring.viewer
      • roles/opsconfigmonitoring.resourceMetadata.writer
      • roles/serviceusage.serviceUsageViewer
      • roles/stackdriver.resourceMetadata.writer
    3. 次の VM を作成します。
      • 管理ワークステーション用の 1 つの VM。
      • 1 台の VM(管理クラスタのコントロール プレーン ノード用)。
      • 2 台の VM(ユーザー クラスタのワーカーノード用)。
      • 1 台の VM(ユーザー クラスタのコントロール プレーン ノード用)。
    4. すべての VM で SSH が有効になっていることと、管理ワークステーションに、クラスタノード用に作成された他のすべての VM への SSH アクセス権があることを確認します。
    5. VM 間のレイヤ 2 接続用に Virtual Extensible LAN(VXLAN)オーバーレイ ネットワークを作成します。VXLAN は永続的ではないため、VM インスタンスを再起動するとネットワークは破棄されます。ネットワークは、10.200.0.0/24 サブネット上に設定されます。レイヤ 2 接続は、バンドルされたロードバランサの要件です。
    6. 管理ワークステーションに次のツールをインストールします。
      • bmctl
      • kubectl
      • Docker

      また、このスクリプトは、baremetal-gcr サービス アカウントのサービス アカウント キーも管理ワークステーションにダウンロードします。

    7. 次のタスクを行い、管理ワークステーションからの root@10.200.0.x が機能するようにします。
      1. 管理ワークステーションで新しい SSH 認証鍵を生成します。
      2. その公開鍵を、デプロイメント内の他のすべての VM に追加します。

    このスクリプトは、実行された各コマンドとステータスを出力します。完了すると、スクリプトから次が出力されます。

    ✅ Successfully set up SSH access from admin workstation to cluster node VMs.
    
    ✅ GCE Infrastructure setup complete. Please check the logs for any errors!!!
    
    ✅ If you do not see any errors in the output log, then you now have the following setup:
    
    |---------------------------------------------------------------------------------------------------------|
    | VM Name               | L2 Network IP (VxLAN) | INFO                                                    |
    |---------------------------------------------------------------------------------------------------------|
    | abm-admin-cluster-cp  | 10.200.0.3            | 🌟 Ready for use as control plane for the admin cluster |
    | abm-user-cluster-cp   | 10.200.0.4            | 🌟 Ready for use as control plane for the user cluster  |
    | abm-user-cluster-w1   | 10.200.0.5            | 🌟 Ready for use as worker for the user cluster         |
    | abm-user-cluster-w2   | 10.200.0.6            | 🌟 Ready for use as worker for the user cluster         |
    |---------------------------------------------------------------------------------------------------------|
    

3. 管理クラスタを作成する

bmctl

bmctl を使用して管理クラスタを作成するには、ターミナル ウィンドウで管理ワークステーション VM にアクセスし、そこからコマンドを実行します。

  1. SSH を使用して、root として管理ワークステーション VM(abm-ws)にアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. ユーザー認証情報をアプリケーションのデフォルト認証情報(ADC)として設定します。

    gcloud auth application-default login
    

    画面の指示に沿って、ADC 用の Google アカウントを選択します。

  3. クラスタ構成ファイルを生成します。

    bmctl create config -c ADMIN_CLUSTER_NAME --project-id=PROJECT_ID
    
  4. 管理クラスタの構成ファイルを確認します。

    次のクラスタ構成ファイルには、前述の値が入力されています。入力した値に加え、生成された構成ファイルとは次の違いがあります。

    • 読みやすくするために、このサンプルではコメントを削除しています。
    • このスクリプトは、必要な権限をすべて備えた単一のサービス アカウントを作成し、構成ファイルで参照されている bm-gcr.json キーをダウンロードします。
    gcrKeyPath: /root/bm-gcr.json
    sshPrivateKeyPath: /root/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath: /root/bm-gcr.json
    gkeConnectRegisterServiceAccountKeyPath: /root/bm-gcr.json
    cloudOperationsServiceAccountKeyPath: /root/bm-gcr.json
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: BMCTL_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 10.200.0.3
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.48
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 110
    
  5. 管理ワークステーションで生成された構成ファイルの内容を、上記サンプルの内容に置き換えます。

    生成された bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME.yaml ファイルを開き、その内容を前の手順で確認したサンプルの内容に置き換えます。

  6. 管理クラスタを作成します。

    bmctl create cluster -c ADMIN_CLUSTER_NAME

    bmctl コマンドは、プリフライト チェックを実行し、クラスタを作成するときに出力を画面に表示します。詳細情報は、管理ワークステーションの baremetal/bmctl-workspace/abm-user-cluster-metallb/log フォルダのログに書き込まれます。

    クラスタの作成が完了するまでに数分かかる場合があります。

  7. コンソールで [GKE クラスタ] ページに移動します。

    GKE クラスタに移動

    ユーザー クラスタを作成したプロジェクトが選択されていることを確認します。管理クラスタがリストに表示されます。

  8. 管理クラスタにログインします。

    1. クラスタ名のリンクをクリックして、サイドパネルで [ログイン] をクリックします。

    2. [Google ID を使用してログインします] を選択します。

    3. [ログイン] をクリックします。

管理クラスタを確認する

管理ワークステーションにある管理クラスタの kubeconfig ファイルは、root アカウントの bmctl-workspace ディレクトリにあります。デプロイを確認するには、次の操作を行います。

  1. SSH を使用して、root として管理ワークステーションにアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 管理クラスタが作成され、動作していることを確認します。

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

    出力は次のようになります。

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane   94m   v1.27.4-gke.1600
    
  3. 確認が完了したら、「exit」と入力して管理ワークステーションから切断します。

コンソール

コンソールで管理クラスタを作成するには、管理ワークステーション VM から bmctl register bootstrap を実行してブートストラップ クラスタを作成する必要があります。bmctl register bootstrap コマンドが実行されている間に、コンソールで管理クラスタを作成します。

ブートストラップ環境の基本情報を入力する

  1. Google Cloud コンソールで、[GKE クラスタ] ページに移動します。

    GKE クラスタに移動

  2. [作成] をクリックします。

  3. [クラスタを作成] ダイアログで [オンプレミス] を選択し、ベアメタルの [構成] をクリックします。

  4. プロジェクト リストから PROJECT_ID を選択してください。

  5. 左側のナビゲーション バーで、[ブートストラップ環境のインストール] をクリックします。

  6. 管理クラスタ名として「ADMIN_CLUSTER_NAME」と入力します。

  7. 管理クラスタのバージョンとして BMCTL_VERSION を選択します。スクリプトにより、このバージョンの bmctl コマンドライン ツールが管理ワークステーションにダウンロードされます。インストールする Google Distributed Cloud のバージョンは、bmctl バージョンと一致する必要があります。

  8. [Google Cloud API のロケーション] フィールドで、リストから ON_PREM_API_REGION を選択します。この設定では、GKE On-Prem API が実行されるリージョンと、以下のデータが保存されるリージョンを指定します。

    • クラスタのライフサイクルを管理する際に GKE On-Prem API が必要とするクラスタ メタデータ
    • システム コンポーネントの Cloud Logging データと Cloud Monitoring データ
    • Cloud Audit Logs によって作成された管理監査ログ

    クラスタ名、プロジェクト、ロケーションにより、Google Cloud でクラスタが一意に識別されます。

コンソールに表示される手順ではなく、次のセクションの手順を使用して、ブートストラップ クラスタを作成します。管理クラスタを作成するときに戻るため、コンソール ページを表示したままにします。

ブートストラップ クラスタを作成する

コンソールなどの GKE On-Prem API クライアントを使用して管理クラスタを作成する場合は、管理ワークステーションにブートストラップ クラスタを作成する必要があります。このブートストラップ クラスタは、管理クラスタの作成に必要な Kubernetes コントローラをホストします。

  1. コマンドラインから SSH を使用して、root として管理ワークステーション VM にアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    

    VM の更新に関するメッセージを無視して、このチュートリアルを完了して問題ありません。VM をテスト環境として維持する場合は、Ubuntu のドキュメントに記載されているように、OS を更新するか次のリリースにアップグレードすることをおすすめします。

  2. ユーザー認証情報をアプリケーションのデフォルト認証情報(ADC)として設定します。

    gcloud auth application-default login
    

    画面の指示に沿って、ADC 用の Google アカウントを選択します。

  3. baremetal/ ディレクトリに移動し、次のコマンドを実行してブートストラップ クラスタを作成します。

    ブートストラップ クラスタ名は、管理クラスタ名の前に bootstrap- を付けて生成されます。

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl がブートストラップ クラスタの作成に成功すると、次のような出力が表示されます。

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

管理クラスタを作成する

  1. [管理ワークステーションからの環境のブートストラップ] セクションの [ブートストラップ環境のインストール] ページで、[接続を確認] をクリックします。

    成功すると、コンソールに [ 接続が確立されました] と表示されます。

    続行する前に、ブートストラップ クラスタへの接続が確立されている必要があります。接続が確立されていない場合は、bmctl register bootstrap コマンドに指定した引数を確認します。

    • --name の値が、[ブートストラップ環境の基本] セクションに表示された生成されたブートストラップ名と一致していることを確認します。

    • --project-id の値がコンソールで選択したプロジェクトの ID と一致していることを確認します。

    ブートストラップ クラスタ名またはプロジェクト ID を変更する必要がある場合は、「Ctrl-C」と入力して bmctl register bootstrap を終了し、コマンドを再実行します。

ネットワーキング

  1. 左側のナビゲーション バーで [ネットワーキング] をクリックします。

  2. [コントロール プレーン] セクションで、[コントロール プレーン ノード IP 1] フィールドに次のように入力します。

    10.200.0.3
    

    これは、スクリプトによって作成された VXLAN にある abm-admin-cluster-cp VM の IP アドレスです。

  3. [ロードバランサ] セクションで、[バンドル] が選択されていることを確認します。

  4. [仮想 IP(VIP)] セクションで、[コントロール プレーン VIP] フィールドに次のように入力します。

    10.200.0.48
    

    次のステップは、ブートストラップ クラスタの可用性に依存します。ブートストラップ クラスタが登録済みメンバーとして表示されるまで、ターミナル ウィンドウで bmctl register bootstrap コマンドを数分間実行する必要があります。数分経っても使用できない場合は、使用したブートストラップ クラスタ名とプロジェクト ID を確認します。ブートストラップ クラスタ名またはプロジェクト ID を変更する必要がある場合は、別のターミナル ウィンドウで「Ctrl-C」と入力して bmctl register bootstrap を終了し、コマンドを再実行します。

  5. [確認して作成] をクリックします。

    コンソールには、設定を確認しクラスタを作成するときにステータス メッセージが表示されます。

    管理クラスタが作成されると、管理ワークステーションのブートストラップ クラスタは削除されます。別のターミナル ウィンドウで bmctl register bootstrap コマンドを実行すると、出力は次のようになります。

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

管理クラスタを確認する

管理ワークステーションにある管理クラスタの kubeconfig ファイルは、root アカウントの bmctl-workspace ディレクトリにあります。デプロイを確認するには、次の操作を行います。

  1. SSH を使用して、root として管理ワークステーションにアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 管理クラスタが作成され、動作していることを確認します。

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

    出力は次のようになります。

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane   94m   v1.27.4-gke.1600
    
  3. 確認が完了したら、「exit」と入力して管理ワークステーションから切断します。

gcloud CLI

以下の手順では、2 つのターミナル ウィンドウが必要です。1 つのターミナル ウィンドウで bmctl register bootstrap を実行して、ブートストラップ クラスタを作成します。bmctl register bootstrap コマンドが実行されている間に、別のターミナル ウィンドウで gcloud container bare-metal admin-clusters create を実行して、管理クラスタを作成します。

ブートストラップ クラスタを作成する

gcloud CLI などの GKE On-Prem API クライアントを使用して管理クラスタを作成する場合は、管理ワークステーションにブートストラップ クラスタを作成する必要があります。このブートストラップ クラスタは、管理クラスタの作成に必要な Kubernetes コントローラをホストします。

  1. コマンドラインから SSH を使用して、root として管理ワークステーション VM にアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    

    VM の更新に関するメッセージを無視して、このチュートリアルを完了して問題ありません。VM をテスト環境として維持する場合は、Ubuntu のドキュメントに記載されているように、OS を更新するか次のリリースにアップグレードすることをおすすめします。

  2. ユーザー認証情報をアプリケーションのデフォルト認証情報(ADC)として設定します。

    gcloud auth application-default login
    

    画面の指示に沿って、ADC 用の Google アカウントを選択します。

  3. baremetal/ ディレクトリに移動し、次のコマンドを実行してブートストラップ クラスタを作成します。

    ブートストラップ クラスタ名は、管理クラスタ名の前に bootstrap- を付けて生成されます。

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl がブートストラップ クラスタの作成に成功すると、次のような出力が表示されます。

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

管理クラスタを作成する

  1. 新しいターミナル ウィンドウで、ブートストラップ クラスタがフリートのメンバーとして登録されていることを確認します。

    gcloud container fleet memberships list \
        --project=PROJECT_ID
    

    次のステップの gcloud container bare-metal admin-clusters create コマンドは、ブートストラップ クラスタの可用性によって異なります。ブートストラップ クラスタが登録メンバーとして表示されるまで、もう一方のターミナル ウィンドウで bmctl register bootstrap コマンドを数分間実行する必要があります。数分経ってもリストに表示されない場合は、使用したブートストラップ クラスタ名とプロジェクト ID を確認してください。ブートストラップ クラスタ名またはプロジェクト ID を変更する必要がある場合は、別のターミナル ウィンドウで「Ctrl-C」と入力して bmctl register bootstrap を終了し、コマンドを再実行します。

  2. バンドルされたロードバランサを使用して管理クラスタを作成します。

    指定する値が、スクリプト用に指定した環境変数と一致していることを確認します。

    gcloud container bare-metal admin-clusters create ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --version=BMCTL_VERSION \
        --max-pods-per-node=110 \
        --control-plane-vip=10.200.0.48 \
        --control-plane-load-balancer-port=443 \
        --control-plane-node-configs node-ip=10.200.0.3 \
        --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
        --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
        --lvp-share-path=/mnt/localpv-share \
        --lvp-share-storage-class=local-shared \
        --lvp-node-mounts-config-path=/mnt/localpv-disk \
        --lvp-node-mounts-config-storage-class=local-disks
    

    コマンドの内容:

    • --control-plane-vip10.200.0.48 に設定されています。これは、クラスタの Kubernetes API サーバー用のロードバランサの仮想 IP(VIP)です。

    • --control-plane-node-configs: node-ip10.200.0.3 に設定されています。これは、スクリプトによって作成された VXLAN にある abm-admin-cluster-cp VM の IP アドレスです。

    フラグとそれらの説明の全一覧については、gcloud CLI リファレンスをご覧ください。

    このコマンドからの出力は、次のようになります。

    Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.

    この出力例では、operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 という文字列は長時間実行オペレーションの OPERATION_ID です。 オペレーションのステータスを確認するには、別のターミナル ウィンドウで次のコマンドを実行します。

    gcloud container bare-metal operations describe OPERATION_ID \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    

    gcloud container bare-metal admin-clusters create が正常に完了すると、出力は次のようになります。

    Created Anthos on bare metal Admin Cluster
    [https://gkeonprem.googleapis.com/v1/projects/anonuser-anonproject/locations/us-central1/bareMetalAdminClusters/gce-admin-gcloud-001].
    NAME           LOCATION     VERSION           MEMBERSHIP     STATE
    abm-cluster-1  us-central1  1.28.300-gke.131  abm-cluster-1  RUNNING
    

    管理クラスタが作成されると、管理ワークステーションのブートストラップ クラスタは削除されます。別のターミナル ウィンドウで bmctl register bootstrap コマンドを実行すると、出力は次のようになります。

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

管理クラスタを確認する

管理ワークステーションにある管理クラスタの kubeconfig ファイルは、root アカウントの bmctl-workspace ディレクトリにあります。デプロイを確認するには、次の操作を行います。

  1. SSH を使用して、root として管理ワークステーションにアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 管理クラスタが作成され、動作していることを確認します。

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

    出力は次のようになります。

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane   94m   v1.27.4-gke.1600
    
  3. 確認が完了したら、「exit」と入力して管理ワークステーションから切断します。

Terraform

以下の手順では、2 つのターミナル ウィンドウが必要です。1 つのターミナル ウィンドウで bmctl register bootstrap を実行して、ブートストラップ クラスタを作成します。bmctl register bootstrap コマンドが実行されている間に、別のターミナル ウィンドウで Terraform コマンドを実行して、管理クラスタを作成します。

管理クラスタで機能するようにユーザー クラスタのサンプル ファイルを変更する

anthos-samples リポジトリには、Google Distributed Cloud 管理クラスタの作成専用のサンプルは含まれていません。次の手順では、既存のユーザー クラスタの Terraform サンプルを変更して、管理クラスタの作成方法を示します。

  1. anthos-samples のクローンを作成したディレクトリで、次のコマンドを実行して、MetalLB ユーザー クラスタのサンプル ファイルを管理クラスタの新しいフォルダにコピーします。

    cp -r anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb \
        anthos-samples/anthos-onprem-terraform/abm_admin_cluster_basic
    
  2. abm_admin_cluster_basic ディレクトリに移動します。

    cd anthos-samples/anthos-onprem-terraform/abm_admin_cluster_basic
    
  3. Terraform ファイルを編集します。

    • variables.tf:

      • コントロール プレーン ノードの IP アドレスの変数を定義します(このデモでは 1 つだけ使用します)。この変数は variable "control_plane_ips" { ... } エントリに似ています。

      • コントロール プレーンの VIP アドレスの変数を定義します。この変数は variable "control_plane_vip" { ... } エントリに似ています。

    • terraform.tfvars:

      • 次の管理クラスタの設定に変数値を割り当てます。

        • コントロール プレーン ノードの IP アドレス: 10.200.0.3

        • コントロール プレーン VIP アドレス: 10.200.0.48

    • main.tf:

      • google_gkeonprem_bare_metal_cluster リソースを google_gkeonprem_bare_metal_admin_cluster リソースに置き換えます。

      • google_gkeonprem_bare_metal_node_pool リソースと関連する lifecycle セクションを削除します。

      • 新しく定義した変数を使用するようにリソースを更新します。

    以下に、管理クラスタを作成するように編集された main.tf ファイルの例を示します。

    /**
    * Copyright 2023 Google LLC
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    
    #[START anthos_onprem_terraform_bare_metal_admin_cluster_basic_main]
    
    module "enable_google_apis_primary" {
      source     = "terraform-google-modules/project-factory/google//modules/project_services"
      version    = "~> 14.0"
      project_id = var.project_id
      activate_apis = [
        "anthos.googleapis.com",
        "anthosaudit.googleapis.com",
        "anthosgke.googleapis.com",
        "cloudresourcemanager.googleapis.com",
        "compute.googleapis.com",
        "connectgateway.googleapis.com",
        "container.googleapis.com",
        "file.googleapis.com",
        "gkehub.googleapis.com",
        "iam.googleapis.com",
        "kubernetesmetadata.googleapis.com",
        "logging.googleapis.com",
        "monitoring.googleapis.com",
        "opsconfigmonitoring.googleapis.com",
        "serviceusage.googleapis.com",
        "stackdriver.googleapis.com"
      ]
      disable_services_on_destroy = false
    }
    
    # Enable GKE OnPrem API
    resource "google_project_service" "default" {
      project            = var.project_id
      service            = "gkeonprem.googleapis.com"
      disable_on_destroy = false
    }
    
    # Create a baremetal admin cluster and enroll it with the gkeonprem API
    resource "google_gkeonprem_bare_metal_admin_cluster" "admin-cluster-basic" {
      name                     = var.admin_cluster_name
      description              = "Bare metal admin cluster"
      provider                 = google
      depends_on               = [google_project_service.default]
      location                 = var.region
      bare_metal_version       = var.bare_metal_version
      network_config {
        island_mode_cidr {
          service_address_cidr_blocks = ["0.96.0.0/20"]
          pod_address_cidr_blocks     = ["192.168.0.0/16"]
        }
      }
      node_config {
        max_pods_per_node = 250
      }
      control_plane {
        control_plane_node_pool_config {
          node_pool_config {
            operating_system = "LINUX"
            dynamic "node_configs" {
              for_each = var.admin_cp_ips
              content {
                node_ip = node_configs.value
              }
            }
          }
        }
      }
      load_balancer {
        port_config {
          control_plane_load_balancer_port = 443
        }
        vip_config {
          control_plane_vip = var.admin_cp_vip
        }
      }
      storage {
        lvp_share_config {
          lvp_config {
            path = "/mnt/localpv-share"
            storage_class = "local-shared"
          }
          shared_path_pv_count = 5
        }
        lvp_node_mounts_config {
          path = "/mnt/localpv-disk"
          storage_class = "local-disks"
        }
      }
    
      dynamic "security_config" {
        for_each = length(var.admin_user_emails) == 0 ? [] : [1]
        content {
          authorization {
            dynamic "admin_users" {
              for_each = var.admin_user_emails
              content {
                username = admin_users.value
              }
            }
          }
        }
      }
    
      lifecycle {
        ignore_changes = [
          annotations["onprem.cluster.gke.io/user-cluster-resource-link"],
          annotations["alpha.baremetal.cluster.gke.io/cluster-metrics-webhook"],
          annotations["baremetal.cluster.gke.io/operation"],
          annotations["baremetal.cluster.gke.io/operation-id"],
          annotations["baremetal.cluster.gke.io/start-time"],
          annotations["baremetal.cluster.gke.io/upgrade-from-version"]
        ]
      }
    }
    
    #[END anthos_onprem_terraform_bare_metal_admin_cluster_basic_main]
    

    管理クラスタの Terraform リソースの詳細については、Terraform レジストリの google_gkeonprem_bare_metal_admin_cluster をご覧ください。

ブートストラップ クラスタを作成する

Terraform などの GKE On-Prem API クライアントを使用して管理クラスタを作成する場合は、管理ワークステーションにブートストラップ クラスタを作成する必要があります。このブートストラップ クラスタは、管理クラスタの作成に必要な Kubernetes コントローラをホストします。

  1. コマンドラインから SSH を使用して、root として管理ワークステーション VM にアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    

    VM の更新に関するメッセージを無視して、このチュートリアルを完了して問題ありません。VM をテスト環境として維持する場合は、Ubuntu のドキュメントに記載されているように、OS を更新するか次のリリースにアップグレードすることをおすすめします。

  2. ユーザー認証情報をアプリケーションのデフォルト認証情報(ADC)として設定します。

    gcloud auth application-default login
    

    画面の指示に沿って、ADC 用の Google アカウントを選択します。

  3. baremetal/ ディレクトリに移動し、次のコマンドを実行してブートストラップ クラスタを作成します。

    ブートストラップ クラスタ名は、管理クラスタ名の前に bootstrap- を付けて生成されます。

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl がブートストラップ クラスタの作成に成功すると、次のような出力が表示されます。

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

管理クラスタを作成する

  1. Terraform プランを初期化して作成します。

    terraform init
    

    Terraform によって、Google Cloud プロバイダなどの必要なライブラリがインストールされます。

  2. 構成を確認し、必要に応じて変更を加えます。

    terraform plan
    
  3. Terraform プランを適用して、管理クラスタを作成します。

    terraform apply
    

    管理クラスタの作成には 15 分以上かかります。クラスタの作成が完了すると、次のようなメッセージが表示されます。

    ...
    google_gkeonprem_bare_metal_admin_cluster.admin-cluster-basic: Still creating... [20m10s elapsed]
    google_gkeonprem_bare_metal_admin_cluster.admin-cluster-basic: Creation complete after 20m11s
    [id=projects/anonuser-anonproject/locations/us-central1/bareMetalAdminClusters/gce-admin-terra002]
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
    

    管理クラスタが作成されると、管理ワークステーションのブートストラップ クラスタは削除されます。別のターミナル ウィンドウで bmctl register bootstrap コマンドを実行すると、出力は次のようになります。

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

  4. コンソールで [GKE クラスタ] ページに移動します。

    GKE クラスタに移動

    ユーザー クラスタを作成したプロジェクトが選択されていることを確認します。管理クラスタがリストに表示されます。

  5. 管理クラスタにログインします。

    1. クラスタ名のリンクをクリックして、サイドパネルで [ログイン] をクリックします。

    2. [Google ID を使用してログインします] を選択します。

    3. [ログイン] をクリックします。

管理クラスタを確認する

管理ワークステーションにある管理クラスタの kubeconfig ファイルは、root アカウントの bmctl-workspace ディレクトリにあります。デプロイを確認するには、次の操作を行います。

  1. SSH を使用して、root として管理ワークステーションにアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 管理クラスタが作成され、動作していることを確認します。

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

    出力は次のようになります。

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane   94m   v1.27.4-gke.1600
    
  3. 確認が完了したら、「exit」と入力して管理ワークステーションから切断します。

4. ユーザー クラスタを作成する

Google Cloud コンソール、Google Cloud CLI、または Terraform を使用してユーザー クラスタを作成できます。わかりやすくするため、Terraform スクリプトにハードコードされた名前と一致するように、ユーザー クラスタ名に abm-user-cluster-metallb を使用します。

bmctl

  1. SSH を使用して、root として管理ワークステーション VM(abm-ws)にアクセスします。

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. クラスタ構成ファイルを生成します。

    bmctl create config -c abm-user-cluster-metallb \
        --project-id=PROJECT_ID
  3. 次のユーザー クラスタの構成ファイルで、clusterSecurity セクションにメールアドレスを設定し、残りの設定を確認します。

    次のクラスタ構成ファイルには、前述の計画テーブルに入力した値が入力されています。入力した値に加え、生成された構成ファイルとは次の違いがあります。

    • 読みやすくするために、このサンプルではコメントを削除しています。
    • ユーザー クラスタの場合と同様に、[認証情報] セクションを削除しています。
    • クラスタタイプ spec.typeuser に設定されています。
    • clusterrole/cluster-admin がアカウントに付与されるように、spec.clusterSecurity.authorization.clusterAdmin.gcpAccounts フィールドが追加されています。とりわけ、このフィールドによって Google Cloud コンソールでクラスタにログインして、クラスタの詳細を表示できます。
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-abm-user-cluster-metallb
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: abm-user-cluster-metallb
      namespace: cluster-abm-user-cluster-metallb
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: BMCTL_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 10.200.0.4
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.50
          ingressVIP: 10.200.0.51
        addressPools:
        - name: pool1
          addresses:
          - 10.200.0.51-10.200.0.70
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      clusterSecurity:
        authorization:
          clusterAdmin:
            gcpAccounts:
            - YOUR_EMAIL_ADDRESS
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-abm-user-cluster-metallb
    spec:
      clusterName: abm-user-cluster-metallb
      nodes:
      - address: 10.200.0.5
    
  4. 管理ワークステーションで生成された構成ファイルの内容を、上記サンプルの内容に置き換えます。

    生成された bmctl-workspace/abm-user-cluster-metallb/abm-user-cluster-metallb.yaml ファイルを開き、その内容を前の手順で確認したサンプルの内容に置き換えます。

  5. ユーザー クラスタを作成します。

    bmctl create cluster -c abm-user-cluster-metallb \
      --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

    bmctl コマンドは、プリフライト チェックを実行し、クラスタを作成するときに出力を画面に表示します。詳細情報は、管理ワークステーションの baremetal/bmctl-workspace/abm-user-cluster-metallb/log フォルダのログに書き込まれます。

    クラスタの作成が完了するまでに数分かかる場合があります。

  6. Google Cloud コンソールで、[GKE クラスタ] ページに移動します。

    GKE クラスタに移動

    ユーザー クラスタを作成したプロジェクトが選択されていることを確認します。管理クラスタとユーザー クラスタの両方がリストに表示されます。

  7. ユーザー クラスタにログインします。

    1. クラスタ名のリンクをクリックして、サイドパネルで [ログイン] をクリックします。

    2. [Google ID を使用してログインします] を選択します。

    3. [ログイン] をクリックします。

    同じ手順を繰り返して、管理クラスタにログインします。

コンソール

次の手順に沿って、コンソールでユーザー クラスタを作成します。

  1. コンソールで、ベアメタル クラスタの作成ページに移動します。

    ベアメタル クラスタの作成ページに移動

  2. 管理クラスタを作成した Google Cloud プロジェクトが選択されていることを確認します。

  3. [CREATE CLUSTER] をクリックします。

  4. ダイアログで [オンプレミス] をクリックします。

  5. [ベアメタル] の横にある [構成] をクリックします。[前提条件] ページが表示されます。

  6. [クラスタタイプの選択] で、[既存の管理クラスタ用のユーザー クラスタを作成する] を選択します。

  7. [次へ] をクリックします。

クラスタの基本

  1. ユーザー クラスタの名前を入力するか、デフォルトを使用します。

  2. 新しく作成した管理クラスタが選択されていることを確認します。このページの残りの設定には、デフォルト値を使用できます。

  3. 左側のナビゲーション バーで [ネットワーキング] をクリックします。

ネットワーキング

VM と管理クラスタの作成に使用したスクリプトによって、10.200.0.0/24 サブネットに IP アドレスを持つレイヤ 2 VXLAN が作成されています。

  1. [コントロール プレーン] セクションで、[コントロール プレーン ノード IP 1] フィールドに次のように入力します。

    10.200.0.4
    

    これは、スクリプトによって作成された VXLAN にある abm-user-cluster-cp1 VM の IP アドレスです。

  2. [ロードバランサ] セクションで、デフォルトのロードバランサ [バンドルされた MetalLB] を使用します。

  3. [新しいアドレスプール] セクションで、[IP アドレス範囲 1] フィールドに次の IP アドレス範囲を入力します。

    10.200.0.51-10.200.0.70
    
  4. [完了] をクリックします。

  5. [仮想 IP] セクションで、[コントロール プレーン VIP] フィールドに次の IP アドレスを入力します。

    10.200.0.50
    
  6. [Ingress VIP] に、次の IP アドレスを入力します。

    10.200.0.51
    
  7. [サービスと Pod の CIDR] セクションで、デフォルトの IP アドレスを使用します。

  8. 左側のナビゲーション バーで [デフォルト プール] をクリックします。

ノードプールを作成する

ユーザー クラスタには、ワーカーノード用のノードプールが少なくとも 1 つ必要です。

  1. [ノードアドレス 1] フィールドに、次の IP アドレスを入力します。

    10.200.0.5
    

    これは、スクリプトによって作成された VXLAN にある abm-user-cluster-w1 VM の IP アドレスです。

クラスタを作成する

  1. [確認して作成] をクリックしてユーザー クラスタを作成します。

    ユーザー クラスタの作成には 15 分以上かかります。コンソールには、設定の確認とクラスタの作成中にステータス メッセージが表示されます。

    構成に問題がある場合は、構成の問題を修正してクラスタの作成を再試行できる十分な量のエラー メッセージがコンソールに表示されます。

    作成プロセスに関する追加情報を表示するには、[詳細を表示] をクリックしてサイドパネルを表示します。[] をクリックすると、詳細パネルが閉じます。

    クラスタが作成されると、「クラスタ ステータス: 実行中」と表示されます。

  2. クラスタが作成されたら、 [クラスタ] をクリックして [クラスタ] ページに戻ります。

  3. ユーザー クラスタにログインします。

    1. クラスタ名のリンクをクリックして、サイドパネルで [ログイン] をクリックします。

    2. [Google ID を使用してログインします] を選択します。

    3. [ログイン] をクリックします。

    同じ手順を繰り返して、管理クラスタにログインします。

gcloud CLI

ユーザー クラスタを作成するには:

  1. 次のコマンドを実行して、ユーザー クラスタを作成します。

    gcloud container bare-metal clusters create abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --admin-cluster-membership=projects/PROJECT_ID/locations/ON_PREM_API_REGION/memberships/ADMIN_CLUSTER_NAME \
        --location=ON_PREM_API_REGION \
        --version=BMCTL_VERSION \
        --admin-users=YOUR_EMAIL_ADDRESS \
        --metal-lb-address-pools='pool=lb-pool-1,manual-assign=True,addresses=10.200.0.51-10.200.0.70' \
        --control-plane-node-configs='node-ip=10.200.0.4' \
        --control-plane-vip=10.200.0.50 \
        --control-plane-load-balancer-port=443 \
        --ingress-vip=10.200.0.51 \
        --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
        --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
        --lvp-share-path=/mnt/localpv-share \
        --lvp-share-storage-class=local-shared \
        --lvp-node-mounts-config-path=/mnt/localpv-disk \
        --lvp-node-mounts-config-storage-class=local-disks
    

    コマンドを実行すると、次のような出力が表示されます。

    Waiting for operation [projects/PROJECT_ID/locations/ON_PREM_API_REGION/operations/operation-1678304606537-5f668bde5c57e-341effde-b612ff8a] to complete...
    

    この出力例では、operation-1678304606537-5f668bde5c57e-341effde-b612ff8a という文字列は長時間実行オペレーションの OPERATION_ID です。

  2. オペレーションのステータスを確認するには、別のターミナル ウィンドウを開いてコマンドを実行します。

    gcloud container bare-metal operations describe OPERATION_ID \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    

    OPERATION_ID は、前の手順の出力で対応する文字列に置き換えます。

    クラスタの作成には 15 分以上かかります。クラスタが作成されている間、上記のコマンドを繰り返し実行することで現在のステータスを取得できます。

    クラスタが作成されると、次のような出力が表示されます。

    Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/abm-user-cluster-metallb].

    gcloud container bare-metal clusters create コマンドの詳細(各フラグの説明など)については、gcloud CLI リファレンスのクラスタ リソースの container bare-metal clusters create ページをご覧ください。

ノードプールを作成する

クラスタが正常に作成されたら、クラスタのノードプールを作成できます。

ノードプールを作成するには:

  1. 次のコマンドを実行してノードプールを作成します。

    gcloud container bare-metal node-pools create NODE_POOL_NAME \
        --cluster=abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --node-configs='node-ip=10.200.0.5'
    

    NODE_POOL_NAME は、ノードプールの名前に置き換えます。

    コマンドを実行すると、次のような出力が表示されます。

    Waiting for operation [projects/PROJECT_ID/locations/ON_PREM_API_REGION/operations/operation-1678308682052-5f669b0d132cb-6ebd1c2c-816287a7] to complete...
    

    ノードプールは、およそ 5 分以内で作成されます。ノードプールが作成されると、次のような出力が表示されます。

    Created node pool in Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/abm-user-cluster-metallb/bareMetalNodePools/NODE_POOL_NAME].
    
  2. コンソールの [Kubernetes クラスタ] ページに移動します。

    [Create a bare metal cluster] ページに移動

    ユーザー クラスタを作成したプロジェクトが選択されていることを確認します。管理クラスタとユーザー クラスタの両方がリストに表示されます。

  3. ユーザー クラスタにログインします。

    1. クラスタ名のリンクをクリックして、サイドパネルで [ログイン] をクリックします。

    2. [Google ID を使用してログインします] を選択します。

    3. [ログイン] をクリックします。

    同じ手順を繰り返して、管理クラスタにログインします。

Terraform

バンドルされた MetalLB ロードバランサを使用してユーザー クラスタを作成するには、次の基本的な構成サンプルを使用できます。詳細については、google_gkeonprem_bare_metal_cluster リファレンス ドキュメントをご覧ください。

  1. anthos-samples のクローンを作成したディレクトリで、Terraform のサンプルがあるディレクトリに移動します。

    cd anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb
    

    このサンプルには、main.tf に渡すサンプル変数が用意されています。

  2. terraform.tfvars.sample ファイルのコピーを作成します。

    cp terraform.tfvars.sample terraform.tfvars
    
  3. 次のサンプルの値を確認します。

    次の Terraform 変数ファイル(terraform.tfvars.sample)には、このガイドの前のセクションで入力した IP アドレスと値が事前に入力されています。

    
    project_id          = "PROJECT_ID"
    region              = "ON_PREM_API_REGION"
    admin_cluster_name  = "ADMIN_CLUSTER_NAME"
    bare_metal_version  = "VERSION"
    admin_user_emails   = ["YOUR_EMAIL_ADDRESS", "ADMIN_2_EMAIL_ADDRESS"]
    cluster_name        = "abm-user-cluster-metallb"
    control_plane_ips   = ["10.200.0.4"]
    worker_node_ips     = ["10.200.0.5", "10.200.0.6"]
    control_plane_vip   = "10.200.0.50"
    ingress_vip         = "10.200.0.51"
    lb_address_pools    = [
        { name = "lbpool_1", addresses = ["10.200.0.51-10.200.0.70"] }
    ]
    

    ADMIN_2_EMAIL_ADDRESS は、Google Cloud アカウントに関連付けられているメールアドレスに置き換えるか、変数ファイルを編集するときに削除します。

    このサンプルで変数を設定する引数の詳細については、Terraform ドキュメントの引数リファレンスでベアメタル ユーザー クラスタの説明をご覧ください。

  4. 変数ファイルのコピーの内容を、上記のサンプルの内容に置き換えます。

  5. Terraform プランを初期化して作成します。

    terraform init
    

    Terraform によって、Google Cloud プロバイダなどの必要なライブラリがインストールされます。

  6. 構成を確認し、必要に応じて変更を加えます。

    terraform plan
    
  7. Terraform プランを適用して、ユーザー クラスタを作成します。

    terraform apply
    

    ユーザー クラスタの作成には 15 分以上かかります。Google Cloud コンソールの [GKE クラスタ] ページでクラスタを表示できます。

  8. Google Cloud コンソールで、[GKE クラスタ] ページに移動します。

    GKE クラスタに移動

    ユーザー クラスタを作成したプロジェクトが選択されていることを確認します。管理クラスタとユーザー クラスタの両方がリストに表示されます。

  9. ユーザー クラスタにログインします。

    1. クラスタ名のリンクをクリックして、サイドパネルで [ログイン] をクリックします。

    2. [Google ID を使用してログインします] を選択します。

    3. [ログイン] をクリックします。

    同じ手順を繰り返して、管理クラスタにログインします。

5. クリーンアップ

このガイドで作成したクラスタと VM を削除するには、次の操作を行います。

ユーザー クラスタを削除する

bmctl

  • bmctl でユーザー クラスタを削除するには、管理ワークステーション VM の abm-ws から次のコマンドを実行します。

    bmctl reset \
        --cluster abm-user-cluster-metallb \
        --admin-kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    

コンソール

  1. コンソールで [GKE クラスタ] ページに移動します。

    [GKE クラスタ] に移動

  2. クラスタのリストで、ユーザー クラスタをクリックします。

  3. [詳細] パネルで、[詳細を表示] をクリックします。

  4. ウィンドウの上部にある 削除)をクリックします。

  5. 確認の入力を求められたら、クラスタ名を入力して [削除] をクリックします。

  6. 右上隅にある をクリックして、削除のステータスを表示します。クラスタリストを更新するには、ページの更新が必要になる場合があります。

gcloud CLI

  • 次のコマンドを実行してクラスタを削除します。

    gcloud container bare-metal clusters delete abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --force
    

    --force フラグを使用すると、ノードプールを持つクラスタを削除できます。--force フラグを使用せずに、まず ノードプールを削除 してから、クラスタを削除する必要があります。

その他のフラグの詳細については、gcloud container bare-metal clusters delete をご覧ください。

Terraform

terraform destroy コマンドは、terraform apply を実行してユーザー クラスタを作成したときに作成されたリソースを終了します。

  • Terraform ユーザー クラスタのサンプル ファイル(main.tf など)が配置されているディレクトリから次のコマンドを実行します。

    terraform destroy
    

ユーザー クラスタが削除されるのを待ってから、管理クラスタと VM を削除します。

管理クラスタと VM を削除する

  1. GKE On-Prem API から管理クラスタの登録を解除します。

    gcloud container bare-metal admin-clusters unenroll ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    
  2. 管理ワークステーションに接続します。

    gcloud compute ssh root@abm-ws --zone ZONE
    
  3. 管理クラスタを削除します。

    bmctl reset -c ADMIN_CLUSTER_NAME
    

    bmctl は、フリートからクラスタの登録を解除し、クラスタを削除します。クラスタが削除されるのを待ってから、VM を削除します。

  4. 管理ワークステーションを終了します。

    exit
    
  5. 名前に abm を含むすべての VM を一覧取得します。

    gcloud compute instances list | grep 'abm'
    
  6. 名前に abm を含むすべての VM を削除しても問題がないことを確認します。

    確認後、次のコマンドを実行して abm VM を削除できます。

    gcloud compute instances list --format="value(name)" | \
        grep 'abm' | \
        xargs gcloud compute instances delete --quiet --zone ZONE
    
  7. 次のコマンドを実行してサービス アカウントを削除し、プロンプトが表示されたら「y」を入力します。

    gcloud iam service-accounts delete baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com
    

    次のステップ