基本クラスタを作成する

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

このガイドは、GKE on Bare Metal の最小限のインストールを行う際に役立ちます。この最小限のインストールは、実際の本番環境のニーズとユースケースには適していない場合があります。本番環境のインストールについては、インストール ガイドをご覧ください。

準備

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

  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 つのユーザー クラスタの最小限のインストールにおける、クラスタ構成ファイルのフィールド値に対応します。一部のプレースホルダには、生成されたクラスタ構成ファイルの事前設定された値が設定されますが、すべてのプレースホルダが編集可能です。

基本的なクラスタ情報
作成する管理クラスタの名前。管理ワークステーション上のクラスタ アーティファクトの場所と名前は、クラスタ名に基づきます。クラスタの名前空間は、クラスタ名から派生します。 ADMIN_CLUSTER_NAME
作成するユーザー クラスタの名前。管理ワークステーション上のクラスタ アーティファクトの場所と名前は、クラスタ名に基づきます。クラスタの名前空間は、クラスタ名から派生します。 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. 次のコマンドを使用して、GKE on Bare Metal でクラスタの作成に使用できるデフォルトの認証情報を設定します。

    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. コンソールで、[GKE on Bare Metal クラスタの作成] ページに移動します。

    [GKE on Bare Metal クラスタの作成] に移動

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

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

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

クラスタの基本

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

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

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

  4. [GDCV for Bare Metal バージョン] で、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. [Done] をクリックします。

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

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

    USER_INGRESS_VIP
    
  7. プランナーで Service と Pod CIDR を変更していない場合は、[Service と 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 コマンドを実行できるようになります。

接続ゲートウェイの kubeconfig を取得するには、ローカル PC から次のコマンドを実行します。

  1. Connect ゲートウェイを介して、クラスタにアクセスできる 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 ゲートウェイを介して 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 が必要です。それらのコマンドは、管理ワークステーションで実行する必要があります。

次のステップ