基本クラスタを作成する

このページは、Google Distributed Cloud ソフトウェア(旧称 Google Distributed Cloud Virtual)を使用して、ベアメタル ハードウェア上で GKE クラスタの小規模な概念実証インストールを作成する方法を説明するガイドのパート 2 です。パート 1 の最小限のインフラストラクチャを設定するでは、ハードウェアの設定方法と IP アドレスの計画方法と、必要な Google Cloud インフラストラクチャの設定方法について説明しています。このドキュメントは、前のパートの設定と計画に基づいて作成されており、管理クラスタとユーザー クラスタを作成する方法について説明します。その後、Service と Ingress を作成するに進みます。

このガイドは、最小限の Google Distributed Cloud インストールを作成する際に役立ちます。この最小限のインストールは、実際の本番環境のニーズとユースケースには適していない場合があります。本番環境へのインストールについては、インストール ガイドをご覧ください。

始める前に

  1. このガイドのパート 1 で説明した最小限のインフラストラクチャを設定するの説明に沿って、ハードウェアを設定し、IP アドレスを計画していることを確認します。または、Google Cloud コンソールで、ベアメタル管理クラスタを作成するフローの [前提条件] セクションにあるネットワーク要件プランナーを使用します。

  2. Terraform を使用してユーザー クラスタを作成する場合は、管理ワークステーションか別のパソコンに Terraform が必要です。

    1. 最新の Google Cloud CLI コンポーネントがインストールされていることを確認します。

      gcloud components update
      
  3. GKE On-Prem API を有効にして使用します。

    1. プロジェクトで API を有効にします。

      gcloud services enable \
          --project PROJECT_ID \
          gkeonprem.googleapis.com
      

      PROJECT_ID は、フリート ホスト プロジェクトのプロジェクト ID に置き換えます。

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

    2. プロジェクトで GKE On-Prem API を初めて有効にした場合は、API を初期化する必要があります。これを行うには、クラスタの作成に使用できるバージョンを表示する gcloud CLI コマンドを実行します。

      gcloud container bare-metal clusters query-version-config \
          --project=PROJECT_ID \
          --location="us-central1"
      

手順の概要

基本的なクラスタの作成は、次の主手順で構成されます。

  1. クラスタの構成を指定するために使用する情報を収集する。

  2. ユーザー クラスタを管理するための管理クラスタを作成する

  3. 実際のワークロードを実行できるユーザー クラスタを作成する

1. 情報を収集する

最小限のインフラストラクチャを設定するで準備した情報またはネットワーク プランナーから取得した情報を使用して、次の表の各プレースホルダに入力します。プレースホルダは、1 つの管理クラスタと 1 つのユーザー クラスタの最小限のインストールにおける、クラスタ構成ファイルのフィールド値に対応しています。一部のプレースホルダには、生成されたクラスタ構成ファイルに事前設定された値が設定されますが、すべてのプレースホルダが編集可能です。

クラスタの基本情報
作成する管理クラスタの名前。管理ワークステーション上のクラスタ アーティファクトのロケーションと名前の付け方は、クラスタ名に基づいています。クラスタの Namespace はクラスタ名から派生します。 ADMIN_CLUSTER_NAME
作成するユーザー クラスタの名前。管理ワークステーション上のクラスタ アーティファクトのロケーションと名前の付け方は、クラスタ名に基づいています。クラスタの Namespace はクラスタ名から派生します。 USER_CLUSTER_NAME
このガイドのパート 1 でダウンロードした bmctl のバージョン。 CLUSTER_VERSION
アカウント情報
管理ワークステーションにある SSH 秘密鍵ファイルのパス。デフォルトでは、パスは次のとおりです。
/home/USERNAME/.ssh/id_rsa
SSH_PRIVATE_KEY_PATH
クラスタを Google Cloud に接続し、ログや指標を表示するために使用する Google Cloud プロジェクトの ID。このプロジェクトは、フリート ホスト プロジェクトとも呼ばれます。 PROJECT_ID
Google Cloud アカウントに関連付けられているメールアドレス。例: alex@example.com GOOGLE_ACCOUNT_EMAIL
ノードマシンの IP アドレス
管理クラスタ コントロール プレーンノード用に 1 つの IP アドレス。 ADMIN_CP_NODE_IP
ユーザー クラスタ コントロール プレーンノード用に 1 つの IP アドレス。 USER_CP_NODE_IP
ユーザー クラスタ ワーカーノードの IP アドレス。 USER_WORKER_NODE_IP
VIP アドレス
管理クラスタの Kubernetes API サーバーの VIP ADMIN_CP_VIP
ユーザー クラスタの Kubernetes API サーバーの VIP USER_CP_VIP
Ingress プロキシの外部アドレスとして使用する VIP。 USER_INGRESS_VIP
LoadBalancer タイプの Service の外部 IP アドレスとして使用する 10 個の IP アドレスの範囲。この範囲には、MetalLB に必要な Ingress VIP が含まれることに注意してください。他の IP アドレスは、この範囲と重複できません。 START_IP-END_IP
Pod と Service の CIDR
管理クラスタの Pod が使用する IP アドレスの範囲(CIDR ブロック表記)。推奨の開始値は、生成されたクラスタ構成ファイルに事前入力されている 192.168.0.0/16 です。 192.168.0.0/16
管理クラスタの Service が使用する IP アドレスの範囲(CIDR ブロック表記)。推奨の開始値は、生成されたクラスタ構成ファイルに事前入力されている 10.96.0.0/20 です。 10.96.0.0/20
ユーザー クラスタの Pod が使用する IP アドレスの範囲(CIDR ブロック表記)。推奨の開始値は、生成されたクラスタ構成ファイルに事前入力されている 192.168.0.0/16 です。これは、コンソールのデフォルト値でもあります。 192.168.0.0/16
ユーザー クラスタの Service が使用する IP アドレスの範囲(CIDR ブロック表記)。推奨の開始値は、生成されたクラスタ構成ファイルに事前入力されている 10.96.0.0/20 です。これは、コンソールのデフォルト値でもあります。 10.96.0.0/20

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

以下の手順では、最小限の管理クラスタとユーザー クラスタのインストール用に管理クラスタを作成します。続行する前に、上記の情報を収集するセクションの表にある各プレースホルダの値が指定されていることを確認します。

プロジェクトで GKE On-Prem API(gkeonprem.googleapis.com)を有効にすると、新しく作成されたクラスタが自動的に API に登録されます。クラスタ構成ファイルで spec.gkeOnPremAPI が指定されていない場合でも、登録は行われます。Google Cloud でホストされる API に登録すると、Google Cloud コンソールまたは gcloud CLI を使用してクラスタのライフサイクルを管理できます。

自動登録を無効にするには、クラスタ構成ファイルの spec.gkeOnPremAPI セクションのコメント化を解除し、クラスタを作成する前に spec.gkeOnPremAPI.enabledfalse に設定します。spec.gkeOnPremAPI.enabled フィールドは変更可能であるため、作成後は、いつでもクラスタの登録を解除できます。

最小インストール用の管理クラスタを作成するには:

  1. 次のコマンドを使用して、Google Distributed Cloud でクラスタの作成に使用できるデフォルトの認証情報を設定します。

    gcloud auth application-default login
    
  2. クラスタ構成ファイルを生成するには、管理ワークステーションの /baremetal ディレクトリから次のコマンドを実行します。

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

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

    • 読みやすくするために、このサンプルではコメントを削除しています。
    • NodePool 仕様が削除されています。管理クラスタでワーカーノードは使用できません。
    gcrKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-gcr.json
    sshPrivateKeyPath: SSH_PRIVATE_KEY_PATH
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-cloud-ops.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: CLUSTER_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: ADMIN_CP_NODE_IP
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: ADMIN_CP_VIP
      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: 250
      # GKEOnPremAPI (Optional) Specify if you wish to explicitly enable/disable the cloud hosted gkeonprem
      # API to enable/disable cluster lifecycle management from gcloud UI and Terraform.
      # gkeOnPremAPI:
        # enabled: false
        # location is the Cloud location for the cluster resource metadata where the cluster will be enrolled.
        # location: us-central1
    
  4. 管理ワークステーションで生成された構成ファイルの内容を、上記サンプルの内容に置き換えます。

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

  5. 管理クラスタを作成するには、管理ワークステーションの /baremetal ディレクトリから次のコマンドを実行します。

    bmctl create cluster -c ADMIN_CLUSTER_NAME
    

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

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

  6. クラスタが作成され、動作していることを確認します。

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

    クラスタが動作している場合、レスポンスは次のようになります。

    NAME     STATUS  ROLES          AGE  VERSION
    node-01  Ready   control-plane  16h  v1.25.7-gke.1000
    
  7. ユーザー アカウントにクラスタの Kubernetes clusterrole/cluster-admin ロールを付与するには、次の gcloud コマンドを実行します。

    gcloud container fleet memberships generate-gateway-rbac \
        --membership=ADMIN_CLUSTER_NAME \
        --role=clusterrole/cluster-admin \
        --users=GOOGLE_ACCOUNT_EMAIL \
        --project=PROJECT_ID \
        --kubeconfig=bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig \
        --context=ADMIN_CLUSTER_NAME-admin@ADMIN_CLUSTER_NAME \
        --apply
    

    このコマンドの出力は次のようになります(読みやすくするために一部を省略しています)。

    Validating input arguments.
    Specified Cluster Role is: clusterrole/cluster-admin
    Generated RBAC policy is:
    --------------------------------------------
    ...
    
    Applying the generate RBAC policy to cluster with kubeconfig: /root/bmctl-workspace/<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>/<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>-kubeconfig, context: <var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>-admin@<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>
    Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
    Successfully applied the RBAC policy to cluster.
    

    RBAC ポリシーを使用すると、Google Cloud コンソールでクラスタにログインして、クラスタの詳細を確認できます。

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

以下の手順では、最小限の管理クラスタとユーザー クラスタのインストール用にユーザー クラスタを作成します。続行する前に、上記の情報を収集するセクションの表にある各プレースホルダの値が指定されていることを確認します。

最小限のインストール用のユーザー クラスタを作成するには:

bmctl

プロジェクトで GKE On-Prem API(gkeonprem.googleapis.com)を有効にすると、新しく作成されたクラスタが自動的に API に登録されます。クラスタ構成ファイルで spec.gkeOnPremAPI が指定されていない場合でも、登録は行われます。Google Cloud でホストされている API にクラスタを登録すると、Google Cloud コンソールまたは gcloud CLI を使用してクラスタのライフサイクルを管理できます。

自動登録を無効にするには、クラスタ構成ファイルの spec.gkeOnPremAPI セクションのコメント化を解除し、クラスタを作成する前に spec.gkeOnPremAPI.enabledfalse に設定します。spec.gkeOnPremAPI.enabled フィールドは変更可能であるため、作成後は、いつでもクラスタの登録を解除できます。

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

    bmctl create config -c USER_CLUSTER_NAME \
      --project-id=PROJECT_ID
    
  2. ユーザー クラスタ構成ファイルを確認します。

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

    • 読みやすくするために、このサンプルではコメントを削除しています。
    • クラスタタイプ spec.typeuser に設定されています。
    • clusterrole/cluster-admin がアカウントに付与されるように、spec.clusterSecurity.authorization.clusterAdmin.gcpAccounts フィールドが追加されています。このフィールドを使用すると、Google Cloud コンソールでクラスタにログインして、クラスタの詳細を表示できます。
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: CLUSTER_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: USER_CP_NODE_IP
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: USER_CP_VIP
          ingressVIP: USER_INGRESS_VIP
        addressPools:
        - name: pool1
          addresses:
          - START_IP-END_IP
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      clusterSecurity:
        authorization:
          clusterAdmin:
            gcpAccounts:
            - GOOGLE_ACCOUNT_EMAIL
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
      # GKEOnPremAPI (Optional) Specify if you wish to explicitly enable/disable the cloud hosted gkeonprem
      # API to enable/disable cluster lifecycle management from gcloud UI and Terraform.
      # gkeOnPremAPI:
        # enabled: false
        # location is the Cloud location for the cluster resource metadata where the cluster will be enrolled.
        # location: us-central1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-USER_CLUSTER_NAME
    spec:
      clusterName: USER_CLUSTER_NAME
      nodes:
      - address: USER_WORKER_NODE_IP
    
  3. 管理ワークステーションで生成された構成ファイルの内容を、上記サンプルの内容に置き換えます。

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

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

    bmctl create cluster -c USER_CLUSTER_NAME \
    --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    

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

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

  5. クラスタが作成され、動作していることを確認します。

    kubectl --kubeconfig bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-kubeconfig \
      get nodes
    

    クラスタが動作している場合、レスポンスは次のようになります。

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001
    

コンソール

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

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

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

  2. Google Cloud プロジェクトのリストで PROJECT_ID が選択されていることを確認します。

  3. [クラスタを作成] をクリックします。

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

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

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

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

クラスタの基本

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

  2. 新しく作成した管理クラスタが選択されていることを確認します。

  3. [GCP API ロケーション] で、[us-central1] を選択します。

  4. [Google Distributed Cloud version] で、CLUSTER_VERSION を選択するか、デフォルトを使用します。このページの残りの設定には、デフォルト値を使用できます。

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

ネットワーキング

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

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

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

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

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

    USER_CP_VIP
    
  6. Ingress VIP の IP アドレスを入力します。

    USER_INGRESS_VIP
    
  7. プランナーで Service と Pod CIDR を変更していない場合は、[Service CIDR と Pod CIDR] セクションでデフォルト値を使用できます。

    CIDR を変更した場合は、使用する CIDR を入力します。

    • Service CIDR:
    10.96.0.0/20
    
    • Pod CIDR:
    192.168.0.0/16
    
  8. 左側のナビゲーション バーで [デフォルト プール] をクリックします。

ノードプールを作成する

クラスタには、ワーカーノード用のノードプールが少なくとも 1 つ必要です。ノードプールは、このクラスタで作成されるワーカーノードのグループのテンプレートです。

[ノードアドレス 1] フィールドに、ユーザー クラスタ ワーカーノードの IP アドレスを入力します。

USER_WORKER_NODE_IP

クラスタを作成する

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

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

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

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

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

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

gcloud CLI

このセクションでは、gcloud CLI を使用してユーザー クラスタとノードプールを作成する方法について説明します。

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

    gcloud container bare-metal clusters create USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=us-central1 \
      --admin-cluster-membership=ADMIN_CLUSTER_NAME \
      --admin-cluster-membership-project=PROJECT_ID \
      --admin-cluster-membership-location=global \
      --version=CLUSTER_VERSION \
      --admin-users=GOOGLE_ACCOUNT_EMAIL \
      --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
      --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
      --metal-lb-address-pools='pool=lb-pool-1,manual-assign=True,addresses=START_IP-END_IP' \
      --control-plane-node-configs='node-ip=USER_CP_NODE_IP' \
      --control-plane-vip=USER_CP_VIP \
      --control-plane-load-balancer-port=443 \
      --ingress-vip=USER_INGRESS_VIP \
      --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/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=us-central1
    

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

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

    Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/bareMetalClusters/USER_CLUSTER_NAME].
    
  2. クラスタを作成した後は、次のコマンドを実行して、新しく作成したクラスタにノードプールを作成します。

    gcloud container bare-metal node-pools create node-pool-1 \
      --cluster=USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=us-central1 \
      --node-configs node-ip=USER_WORKER_NODE_IP

詳細と他の例については、以下をご覧ください。

Terraform

このセクションでは、Terraform を使用してユーザー クラスタとノードプールを作成する方法を説明します。

  1. ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイル名の拡張子は .tf にする必要があります。このガイドでは、このファイルは main.tf と呼ばれます。

    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    
  2. ユーザー クラスタの Terraform リソースを確認します。

    次の Terraform リソースの例には、前のセクションで計画テーブルに入力した値が入力されています。

    resource "google_gkeonprem_bare_metal_cluster"  "cluster-basic" {
      provider = google-beta
      name = "USER_CLUSTER_NAME"
      project = "PROJECT_ID"
      location = "us-central1"
      admin_cluster_membership = "projects/PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME"
      bare_metal_version = "CLUSTER_VERSION"
      network_config {
        island_mode_cidr {
          service_address_cidr_blocks = ["10.96.0.0/20"]
          pod_address_cidr_blocks = ["192.168.0.0/16"]
        }
      }
      control_plane {
        control_plane_node_pool_config {
          node_pool_config {
            labels = {}
            operating_system = "LINUX"
            node_configs {
              labels = {}
              node_ip = "USER_CP_NODE_IP"
            }
          }
        }
      }
      load_balancer {
        port_config {
          control_plane_load_balancer_port = 443
        }
        vip_config {
          control_plane_vip = "USER_CP_VIP"
          ingress_vip = "USER_INGRESS_VIP"
        }
        metal_lb_config {
          address_pools {
            pool = "pool1"
            addresses = [
              "START_IP-END_IP"
            ]
            avoid_buggy_ips = true
            manual_assign = true
          }
        }
      }
      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"
        }
      }
      security_config {
        authorization {
          admin_users {
            username = "GOOGLE_ACCOUNT_EMAIL"
          }
        }
      }
    }
    
    resource "google_gkeonprem_bare_metal_node_pool" "node-pool-default" {
      provider = google-beta
      name =  "node-pool-1"
      bare_metal_cluster = google_gkeonprem_bare_metal_cluster.cluster-basic.name
      project = "PROJECT_ID"
      location = "us-central1"
      node_pool_config {
        operating_system = "LINUX"
        node_configs {
          node_ip = "USER_WORKER_NODE_IP"
        }
      }
    }
    
  3. Terraform リソースを main.tf にコピーしてファイルを保存します。

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

    terraform init
    

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

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

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

    terraform apply
    

    プロンプトが表示されたら、「yes」と入力します。

    基本的なユーザー クラスタとノードプールを作成するには、約 15 分(ネットワークによってはそれ以上)かかります。

  7. ユーザー クラスタの kubeconfig ファイルを作成するには、管理ワークステーションで次のコマンドを実行します。

    bmctl get credentials --cluster USER_CLUSTER_NAME \
    --admin-kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    

    コマンドの出力には、ユーザー クラスタの kubeconfig ファイルの名前が表示されます。たとえば、次のとおりです。

    bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-TIMESTAMP-kubeconfig
    

    ファイル名の TIMESTAMP は、ファイルが作成された日時を示します。

    このファイルにはクラスタの認証情報が含まれているため、アクセスが制限された安全なロケーションに保存する必要があります。

  8. クラスタが作成され、動作していることを確認します。

    kubectl --kubeconfig bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-TIMESTAMP-kubeconfig \
        get nodes
    

    クラスタが動作している場合、レスポンスは次のようになります。

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001
    

詳細と他の例については、以下をご覧ください。

ユーザー クラスタに接続する

ユーザー クラスタの作成に使用したツールがどれかにかかわらず、メールアドレスには、完全な管理者権限でクラスタに接続できるロールベース アクセス制御(RBAC)ポリシーが付与されています。メールアドレスの指定場所はツールによって異なります。

  • bmctl: メールアドレスは、サンプルのユーザー構成ファイルの clusterSecurity セクションに含まれています。

  • Terraform: メールアドレスは、サンプルの google_gkeonprem_bare_metal_cluster リソースの security_config セクションに含まれています。

  • コンソール: クラスタの作成者の場合は、[承認] セクションの [クラスタの基本] ページにメールアドレスが自動的に含まれています。

自分のメールアドレスのみを指定できますが、他のメールアドレスを含めて、そのユーザーにクラスタへの管理者権限を付与することもできます。

メールアドレスに付与された RBAC ポリシーは、次のことを行います。

  • クラスタに Kubernetes clusterrole/cluster-admin ロールを付与します。

  • Google ID を使用して、Google Cloud コンソールでクラスタにログインできるようになります。クラスタは、コンソールの [GKE クラスタ] ページで確認できます。

  • Connect Gateway の kubeconfig を使用して、ローカル PC で kubectl コマンドを実行できます。

Connect Gateway の kubeconfig を取得するには、ローカル PC から次のコマンドを実行します。

  1. Connect Gateway を介して、クラスタにアクセスできる kubeconfig エントリを取得します。

    gcloud container fleet memberships get-credentials USER_CLUSTER_NAME  \
    --project=PROJECT_ID
    

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

    Starting to build Gateway kubeconfig...
    Current project_id: PROJECT_ID
    A new kubeconfig entry "connectgateway_PROJECT_ID_global_USER_CLUSTER_NAME" has been generated and set as the current context.
    
  2. これで、Connect Gateway を介して kubectl コマンドを実行できるようになりました。

    kubectl get nodes
    

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

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001
    

    多くの kubectl コマンドでは、管理クラスタの kubeconfig が必要です。これらのコマンドは、管理ワークステーションで実行する必要があります。

次のステップ