このページは、Google Distributed Cloud ソフトウェア(旧称 Google Distributed Cloud Virtual)を使用して、ベアメタル ハードウェア上で GKE クラスタの小規模な概念実証インストールを作成する方法を説明するガイドのパート 2 です。パート 1 の最小限のインフラストラクチャを設定するでは、ハードウェアの設定方法と IP アドレスの計画方法と、必要な Google Cloud インフラストラクチャの設定方法について説明しています。このドキュメントは、前のパートの設定と計画に基づいて作成されており、管理クラスタとユーザー クラスタを作成する方法について説明します。その後、Service と Ingress を作成するに進みます。
このガイドは、最小限の Google Distributed Cloud インストールを作成する際に役立ちます。この最小限のインストールは、実際の本番環境のニーズとユースケースには適していない場合があります。本番環境へのインストールについては、インストール ガイドをご覧ください。
始める前に
このガイドのパート 1 で説明した最小限のインフラストラクチャを設定するの説明に沿って、ハードウェアを設定し、IP アドレスを計画していることを確認します。または、Google Cloud コンソールで、ベアメタル管理クラスタを作成するフローの [前提条件] セクションにあるネットワーク要件プランナーを使用します。
Terraform を使用してユーザー クラスタを作成する場合は、管理ワークステーションか別のパソコンに Terraform が必要です。
最新の Google Cloud CLI コンポーネントがインストールされていることを確認します。
gcloud components update
GKE On-Prem API を有効にして使用します。
プロジェクトで API を有効にします。
gcloud services enable \ --project PROJECT_ID \ gkeonprem.googleapis.com
PROJECT_ID
は、フリート ホスト プロジェクトのプロジェクト ID に置き換えます。PERMISSION_DENIED
エラーが発生した場合は、入力したプロジェクト ID を再確認してください。プロジェクト ID が正しい場合は、gcloud auth login
を実行して、プロジェクトにアクセスできるアカウントで Google Cloud CLI にログインします。プロジェクトで GKE On-Prem API を初めて有効にした場合は、API を初期化する必要があります。これを行うには、クラスタの作成に使用できるバージョンを表示する gcloud CLI コマンドを実行します。
gcloud container bare-metal clusters query-version-config \ --project=PROJECT_ID \ --location="us-central1"
手順の概要
基本的なクラスタの作成は、次の主手順で構成されます。
クラスタの構成を指定するために使用する情報を収集する。
ユーザー クラスタを管理するための管理クラスタを作成する。
実際のワークロードを実行できるユーザー クラスタを作成する。
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.enabled
を false
に設定します。spec.gkeOnPremAPI.enabled
フィールドは変更可能であるため、作成後は、いつでもクラスタの登録を解除できます。
最小インストール用の管理クラスタを作成するには:
次のコマンドを使用して、Google Distributed Cloud でクラスタの作成に使用できるデフォルトの認証情報を設定します。
gcloud auth application-default login
クラスタ構成ファイルを生成するには、管理ワークステーションの
/baremetal
ディレクトリから次のコマンドを実行します。bmctl create config -c ADMIN_CLUSTER_NAME \ --enable-apis --create-service-accounts --project-id=PROJECT_ID
管理クラスタの構成ファイルを確認します。
次のクラスタ構成ファイルには、前のセクションの計画テーブルに入力した値が入力されています。入力した値に加え、生成された構成ファイルとは次の違いがあります。
- 読みやすくするために、このサンプルではコメントを削除しています。
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
管理ワークステーションで生成された構成ファイルの内容を、上記サンプルの内容に置き換えます。
生成された
bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME.yaml
ファイルを開き、その内容を前の手順で確認したサンプルの内容に置き換えます。管理クラスタを作成するには、管理ワークステーションの
/baremetal
ディレクトリから次のコマンドを実行します。bmctl create cluster -c ADMIN_CLUSTER_NAME
bmctl
コマンドは、プリフライト チェックを実行し、クラスタを作成するときに出力を画面に表示します。詳細情報は、管理ワークステーションのbaremetal/bmctl-workspace/ADMIN_CLUSTER_NAME/log
フォルダのログに書き込まれます。クラスタの作成が完了するまでに数分かかる場合があります。
クラスタが作成され、動作していることを確認します。
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
ユーザー アカウントにクラスタの 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.enabled
を false
に設定します。spec.gkeOnPremAPI.enabled
フィールドは変更可能であるため、作成後は、いつでもクラスタの登録を解除できます。
クラスタ構成ファイルを生成します。
bmctl create config -c USER_CLUSTER_NAME \ --project-id=PROJECT_ID
ユーザー クラスタ構成ファイルを確認します。
次のクラスタ構成ファイルには、前述の計画テーブルに入力した値が入力されています。入力した値に加え、生成された構成ファイルとは次の違いがあります。
- 読みやすくするために、このサンプルではコメントを削除しています。
- クラスタタイプ
spec.type
がuser
に設定されています。 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
管理ワークステーションで生成された構成ファイルの内容を、上記サンプルの内容に置き換えます。
生成された
bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME.yaml
ファイルを開き、その内容を前の手順で確認したサンプルの内容に置き換えます。ユーザー クラスタを作成します。
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
フォルダのログに書き込まれます。クラスタの作成が完了するまでに数分かかる場合があります。
クラスタが作成され、動作していることを確認します。
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
コンソール
次の手順に沿って、コンソールでユーザー クラスタを作成します。
コンソールで、ベアメタル クラスタの作成ページに移動します。
Google Cloud プロジェクトのリストで
PROJECT_ID
が選択されていることを確認します。[クラスタを作成] をクリックします。
ダイアログで [オンプレミス] をクリックします。
[ベアメタル] の横にある [構成] をクリックします。[前提条件] ページが表示されます。
[クラスタタイプの選択] で、[既存の管理クラスタ用のユーザー クラスタを作成する] を選択します。
[次へ] をクリックします。
クラスタの基本
ユーザー クラスタの名前として「
USER_CLUSTER_NAME
」を入力するか、デフォルト値を使用します。新しく作成した管理クラスタが選択されていることを確認します。
[GCP API ロケーション] で、[us-central1] を選択します。
[Google Distributed Cloud version] で、
CLUSTER_VERSION
を選択するか、デフォルトを使用します。このページの残りの設定には、デフォルト値を使用できます。左側のナビゲーション バーで [ネットワーキング] をクリックします。
ネットワーキング
[コントロール プレーン] セクションで、[コントロール プレーン ノード IP 1] フィールドに次のように入力します。
USER_CP_NODE_IP
[ロードバランサ] セクションで、デフォルトのロードバランサ [MetalLB にバンドル済み] を使用します。
[新しいアドレスプール] セクションに移動します。[IP アドレス範囲 1] フィールドに IP アドレス範囲を入力します。
10.200.0.51-10.200.0.70
[完了] をクリックします。
[仮想 IP] セクションで、コントロール プレーン VIP の IP アドレスを入力します。
USER_CP_VIP
Ingress VIP の IP アドレスを入力します。
USER_INGRESS_VIP
プランナーで Service と Pod CIDR を変更していない場合は、[Service CIDR と Pod CIDR] セクションでデフォルト値を使用できます。
CIDR を変更した場合は、使用する CIDR を入力します。
- Service CIDR:
10.96.0.0/20
- Pod CIDR:
192.168.0.0/16
左側のナビゲーション バーで [デフォルト プール] をクリックします。
ノードプールを作成する
クラスタには、ワーカーノード用のノードプールが少なくとも 1 つ必要です。ノードプールは、このクラスタで作成されるワーカーノードのグループのテンプレートです。
[ノードアドレス 1] フィールドに、ユーザー クラスタ ワーカーノードの IP アドレスを入力します。
USER_WORKER_NODE_IP
クラスタを作成する
[確認して作成] をクリックしてユーザー クラスタを作成します。
ユーザー クラスタの作成には 15 分以上かかります。コンソールには、設定を確認しクラスタを作成するときにステータス メッセージが表示されます。
構成に問題がある場合は、構成の問題を修正してクラスタの作成を再試行できる十分な量のエラー メッセージがコンソールに表示されます。
作成プロセスに関する追加情報を表示するには、[詳細を表示] をクリックしてサイドパネルを表示します。[
] をクリックすると、詳細パネルが閉じます。クラスタが作成されると、「クラスタ ステータス: 実行中」と表示されます。
クラスタが作成されたら、
[クラスタ] をクリックして [クラスタ] ページに戻ります。
gcloud CLI
このセクションでは、gcloud CLI を使用してユーザー クラスタとノードプールを作成する方法について説明します。
次のコマンドを実行して、ユーザー クラスタを作成します。
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].
クラスタを作成した後は、次のコマンドを実行して、新しく作成したクラスタにノードプールを作成します。
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 を使用してユーザー クラスタとノードプールを作成する方法を説明します。
ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイル名の拡張子は
.tf
にする必要があります。このガイドでは、このファイルはmain.tf
と呼ばれます。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
ユーザー クラスタの 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" } } }
Terraform リソースを
main.tf
にコピーしてファイルを保存します。Terraform プランを初期化して作成します。
terraform init
Terraform によって、Google Cloud プロバイダなどの必要なライブラリがインストールされます。
構成を確認し、必要に応じて変更を加えます。
terraform plan
Terraform プランを適用して、ユーザー クラスタを作成します。
terraform apply
プロンプトが表示されたら、「
yes
」と入力します。基本的なユーザー クラスタとノードプールを作成するには、約 15 分(ネットワークによってはそれ以上)かかります。
ユーザー クラスタの 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
は、ファイルが作成された日時を示します。このファイルにはクラスタの認証情報が含まれているため、アクセスが制限された安全なロケーションに保存する必要があります。
クラスタが作成され、動作していることを確認します。
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 から次のコマンドを実行します。
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.
これで、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 が必要です。これらのコマンドは、管理ワークステーションで実行する必要があります。
次のステップ
- Service と Ingress を作成する
以下の詳細を確認する