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 は、使用するクラスタの名前に置き換えます。クラスタ名は、var.sh Terraform 出力ファイルで確認できます。

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

クラスタと 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 スクリプトの詳細については、以下をご覧ください。