Terraform を使用して VPC とクラスタを作成する

概要

Terraform は、AWS などのクラウド環境を構成し、クラウド環境に Kubernetes などのソフトウェアをインストールするためのオープンソース ツールです。Terraform または GKE on AWS のインストール手順のいずれかを使用して、AWS 環境を構成し、構成した環境にクラスタを作成できます。

このページでは、Terraform を使用して AWS 環境を構成し、GitHub に保存されているサンプル構成を使用してクラスタをインストールする方法について説明します。これらのスクリプトを使用するには、Terraform の基本的な知識が必要です。特に、Terraform 構成ファイルを編集して、独自のユーザーとプロジェクトの情報を追加し、デフォルトのクラスタ構成に必要な変更を行う必要があります。

AWS 環境を構成して、Terraform を使用せずにクラスタを作成するには、AWS の前提条件の概要クラスタを作成する手順をご覧ください。

スクリプトの動作

このスクリプトでは Terraform を構成して、AWS VPC を作成し、そこにクラスタをデプロイします。作成された VPC は、すべての GKE on AWS の前提条件を満たし、Google の手動 VPC 作成手順によって作成された VPC と同じネットワーク トポロジを有します。

スクリプト セットで作成するクラスタには、次の特徴があります。

  • 3 つのコントロール プレーン ノード(3 つの構成されたアベイラビリティ ゾーンのそれぞれに 1 つずつ)。これらのノードはタイプ t3.large です。
  • 種類が t3.large のノードを 2 つ含む 1 つのノードプール。 このノードプールは AWS us-east-1 リージョンにデプロイされ、5 つのノードに自動スケーリングできます。

デフォルトの VPC とクラスタを変更する方法

適切な Terraform ファイルを編集することで、Terraform スクリプトによって作成された VPC とクラスタの特性を変更できます。

  • variables.tf ファイルを編集して、リージョンとアベイラビリティ ゾーンを調整します。
  • AWS インスタンス タイプを変更します。
  • サブネット、アベイラビリティ ゾーン、ロードバランサなど、VPC の特性を modules/vpc サブフォルダ内のファイルを編集して変更します。

特定の Google Cloud リージョンと関連する Kubernetes バージョンから制御される AWS リージョンのリストについては、次のコマンドを実行します。

gcloud container aws get-server-config --location `GOOGLE_CLOUD_REGION`

GOOGLE_CLOUD_REGION は、GKE on AWS がクラスタを制御する Google Cloud リージョンの名前に置き換えます。

前提条件

  1. Google Cloud CLI のインストール手順に沿って Google Cloud CLI をインストールします。 すでにインストールされている場合は、こちらの手順に沿ってバージョン 412.0.0 以降が実行されていることを確認してください。

  2. AWS CLI のインストール手順に沿って AWS CLI をインストールします。

  3. AWS アクセスキーを作成します。

  4. 次のコマンドを使用して、ローカル AWS 環境を構成します。

    aws configure
    

Terraform を作成する

  1. 次のコマンドを実行して、Google Cloud CLI 認証を構成します。

    gcloud config set project GOOGLE_PROJECT_ID
    gcloud auth application-default login --no-launch-browser
    
  2. Google Cloud プロジェクトで必要なサービスを有効にします。

    gcloud --project="GOOGLE_PROJECT_ID" services enable \
      gkemulticloud.googleapis.com \
      gkeconnect.googleapis.com \
      connectgateway.googleapis.com \
      cloudresourcemanager.googleapis.com \
      anthos.googleapis.com \
      logging.googleapis.com \
      monitoring.googleapis.com \
      opsconfigmonitoring.googleapis.com
    

    GOOGLE_PROJECT_ID は、実際の Google プロジェクト ID に置き換えます。

  3. リポジトリのローカルコピーを作成し、AWS フォルダに変えます。

    git clone https://github.com/GoogleCloudPlatform/anthos-samples.git
    cd anthos-samples/anthos-multi-cloud/AWS
    

GKE on AWS をデプロイする

  1. terraform.tfvars ファイルで次の行を編集して、デフォルト値を置き換えます。

    gcp_project_id = GOOGLE_PROJECT_ID
    admin_users = ["GCP_ACCOUNT_EMAIL"]
    

    次のように置き換えます。

    • GOOGLE_PROJECT_ID: Google プロジェクト ID。これは、Google Cloud コンソールのダッシュボード ページの左側にあります。

    • ACCOUNT_EMAILS: 作成後にクラスタにログインできるメールアドレスのカンマ区切りリスト(例: "admin@example.com","operator@example.com")。少なくとも 1 つのアドレスに 1 つの Google Cloud アカウントが必要です。クラスタに追加の ID プロバイダを追加するには、GKE Identity Service を使用して ID を管理するをご覧ください。

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

    terraform init
    

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

  3. Terraform プランを適用して、AWS Virtual Private Cloud とクラスタを作成します。

    terraform apply
    

    手順に沿ってクラスタの作成を開始します。

インストールには 12 分ほどかかります。Terraform が AWS Virtual Private Cloud とクラスタの作成を完了すると、クラスタに関する情報が出力され、var.sh という名前のファイルが作成されます。追加のノードプールを作成する場合は、このファイルの値を使用できます。

クラスタが正常に作成されたことを確認するには、Google Cloud プロジェクトの Google Cloud コンソールの Kubernetes Engine ページに表示されることを確認します。

クラスタに接続する

クラスタへの接続を確認して詳細を取得するには、次のコマンドを実行します。

   gcloud container fleet memberships get-credentials CLUSTER_NAME
   kubectl get nodes

CLUSTER_NAME は、使用するクラスタの名前に置き換えます。クラスタ名は、Terraform 出力ファイルの var.sh で確認できます。

出力には、クラスタ内のノードのリストとステータスが含まれます。

クラスタと AWS Virtual Private Cloud を削除する

クラスタと AWS Virtual Private Cloud を削除する前に、次のものをすべて削除する必要があります。

  • AWS Virtual Private Cloud 内のアクティブな AWS ロードバランサ
  • Terraform で作成されていないクラスタ内の追加のノードプール
  • Terraform で作成されていない AWS Virtual Private Cloud の追加クラスタ

Terraform で作成したクラスタと AWS Virtual Private Cloud を削除するには、次のコマンドを実行します。

terraform destroy

Terraform はノードからワークロードをドレインし、プライマリ ノードプールとクラスタを削除して、AWS Virtual Private Cloud を削除します。

Cloud Logging と Cloud Monitoring を承認する

Cloud Logging と Cloud Monitoring を有効にする場合、クラスタを作成した後に、Google Cloud プロジェクトに許可ポリシーを追加する必要があります。

Google Cloud CLI を使用して許可ポリシーを追加します。

gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
--role=roles/gkemulticloud.telemetryWriter

PROJECT_ID は、実際のプロジェクト ID に置き換えます。

次のステップ

Terraform GKE on AWS スクリプトの詳細については、以下をご覧ください。