arrow_back

Terraform を使用した Kubernetes ロードバランサ Service のデプロイ

参加 ログイン
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Terraform を使用した Kubernetes ロードバランサ Service のデプロイ

Lab 35分 universal_currency_alt クレジット: 5 show_chart 中級
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP233

Google Cloud セルフペース ラボ

概要

Terraform のプロバイダは、上流の API を論理的に抽象化したものです。このラボでは、Kubernetes クラスタを設定して LoadBalancer タイプの Nginx Service をデプロイする方法について説明します。

目標

このラボでは、次の方法について学びます。

  • Terraform を使用して Kubernetes クラスタと Service をデプロイする

前提条件

このラボでは、以下の経験があることを前提としています。

  • Kubernetes Service に関する基本的な知識
  • kubectl CLI に関する基本的な知識

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

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

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

Kubernetes Service

Service とは、クラスタで実行される Pod のグループです。Service は「安価」であるため、クラスタ内で多くの Service を使用できます。Kubernetes Service を使用すると、マイクロサービス アーキテクチャを効率的に実現できます。

Service は、ロード バランシング、アプリケーション間のサービス ディスカバリ、アプリケーションをダウンタイムなしでデプロイするための機能など、クラスタ全体で標準化される重要な機能を提供します。

各 Service には、その Service のデータを処理する Pod を定義するラベルクエリが含まれています。このラベルクエリは、1 つ以上のレプリケーション コントローラによって作成される Pod に頻繁に一致します。デプロイ ソフトウェアで Kubernetes API を使用して Service のラベルクエリを更新することにより、強力なルーティング シナリオを実現できます。

Terraform を使用する理由

YAML ファイルに記述される Kubernetes リソースはすべて、API 呼び出しにマッピングされた kubectl などの CLI ベースのツールを使用して管理できますが、Terraform によるオーケストレーションにはいくつかのメリットがあります。

  • 1 つの言語 - Kubernetes インフラストラクチャのプロビジョニングとアプリケーションのデプロイに同じ構成言語を使用できます。
  • ずれの検出 - terraform plan を使用すると、適用しようとしている構成と現状との相違をいつでも確認できます。
  • ライフサイクル全体の管理 - Terraform では、最初にリソースを作成するだけでなく、追跡しているリソースを 1 つのコマンドで作成、更新、削除できます。それらのリソースを特定する API を調べる必要はありません。
  • 同期フィードバック - 非同期動作は便利ですが、オペレーション結果(エラー、作成されたリソースの詳細など)の確認がユーザーに委ねられるため、非生産的な場合もあります。たとえば、ロードバランサの IP やホスト名はプロビジョニングが完了するまでわからないため、ロードバランサを参照する DNS レコードを作成できません。
  • 関係のグラフ - Terraform ではリソース間の関係が認識されるため、スケジューリングに役立ちます。たとえば、Kubernetes クラスタの Service の作成は、そのクラスタが作成されるまで行われません。

タスク 1. サンプルコードのクローンを作成する

  1. まず、Cloud Shell で、サンプルコードのクローンを作成します。
gsutil -m cp -r gs://spls/gsp233/* .
  1. tf-gke-k8s-service-lb ディレクトリに移動します。
cd tf-gke-k8s-service-lb

タスク 2. コードを理解する

  1. main.tf ファイルの内容を確認します。
cat main.tf

出力例:

... variable "region" { type = string description = "Region for the resource." } variable "location" { type = string description = "Location represents region/zone for the resource." } variable "network_name" { default = "tf-gke-k8s" } provider "google" { region = var.region } resource "google_compute_network" "default" { name = var.network_name auto_create_subnetworks = false } resource "google_compute_subnetwork" "default" { name = var.network_name ip_cidr_range = "10.127.0.0/20" network = google_compute_network.default.self_link region = var.region private_ip_google_access = true } ...
  • regionzonenetwork_name の変数が定義されています。これらは Kubernetes クラスタの作成に使用されます。
  • Google Cloud プロバイダにより、このプロジェクトのリソースを作成できます。
  • 適切なネットワークとクラスタを作成するためのリソースがいくつか定義されています。
  • 最後に、terraform apply の実行後に表示される出力があります。
  1. k8s.tf ファイルの内容を確認します。
cat k8s.tf

出力例:

provider "kubernetes" { version = "~> 1.10.0" host = google_container_cluster.default.endpoint token = data.google_client_config.current.access_token client_certificate = base64decode( google_container_cluster.default.master_auth[0].client_certificate, ) client_key = base64decode(google_container_cluster.default.master_auth[0].client_key) cluster_ca_certificate = base64decode( google_container_cluster.default.master_auth[0].cluster_ca_certificate, ) } resource "kubernetes_namespace" "staging" { metadata { name = "staging" } } resource "google_compute_address" "default" { name = var.network_name region = var.region } resource "kubernetes_service" "nginx" { metadata { namespace = kubernetes_namespace.staging.metadata[0].name name = "nginx" } spec { selector = { run = "nginx" } session_affinity = "ClientIP" port { protocol = "TCP" port = 80 target_port = 80 } type = "LoadBalancer" load_balancer_ip = google_compute_address.default.address } } resource "kubernetes_replication_controller" "nginx" { metadata { name = "nginx" namespace = kubernetes_namespace.staging.metadata[0].name labels = { run = "nginx" } } spec { selector = { run = "nginx" } template { container { image = "nginx:latest" name = "nginx" resources { limits { cpu = "0.5" memory = "512Mi" } requests { cpu = "250m" memory = "50Mi" } } } } } } output "load-balancer-ip" { value = google_compute_address.default.address }
  • このスクリプトは、Terraform を使用して Kubernetes プロバイダを構成し、Service、Namespace、replication_controller リソースを作成します。
  • このスクリプトは nginx サービス IP を出力として返します。

タスク 3. 依存関係を初期化、インストールする

terraform init コマンドを使用して、Terraform 構成ファイルを含む作業ディレクトリを初期化します。

このコマンドは、いくつかの初期化ステップを実行して、作業ディレクトリを使用できるように準備します。このコマンドは、いつでも何度でも安全に実行できます。実行すると、作業ディレクトリに構成の変更が反映されます。

  1. terraform init を実行します。
terraform init

出力例:

... * provider.google: version = "~> 3.8.0" * provider.kubernetes: version = "~> 1.10.0" Terraform has been successfully initialized! You may now begin working with Terraform. Try running `terraform plan` to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.
  1. terraform apply コマンドを実行します。このコマンドを使用して、構成を望ましい状態するために必要な変更を適用します。
terraform apply -var="region={{{ project_0.default_region | "Region to be allocated" }}}" -var="location={{{ project_0.default_zone | "Zone to be allocated" }}}"
  1. Terraform のアクションを確認し、作成されるリソースを調べます。

  2. 準備ができたら、「yes」と入力し、Terraform アクションを開始します。

完了すると、以下のような出力が表示されるはずです。

出力例:

Apply complete! Resources: 7 added, 0 changed, 0 destroyed. Outputs: cluster_name = tf-gke-k8s cluster_region = "{{{project_0.default_region|REGION}}}" cluster_zone = "{{{project_0.default_region|ZONE}}}" load-balancer-ip = 35.233.177.223 network = https://www.googleapis.com/compute/beta/projects/qwiklabs-gcp-5438ad3a5e852e4a/global/networks/tf-gke-k8s subnetwork_name = tf-gke-k8s

Terraform によって作成されたリソースを確認する

  1. コンソールで、ナビゲーション メニュー > [Kubernetes Engine] に移動します。
  2. tf-gke-k8s クラスタをクリックして構成を確認します。
  3. 左側のパネルで [Gateway、Service、Ingress] をクリックして、nginx Service のステータスを確認します。
  4. [エンドポイント] の IP アドレスをクリックして、新しいブラウザタブで「Welcome to nginx!」ページを開きます。

「Welcome to nginx!」ページ

[進行状況を確認] をクリックして、実行したタスクを確認します。Terraform を使用してインフラストラクチャが正常にデプロイされた場合は、評価スコアが表示されます。

Terraform を使用してインフラストラクチャをデプロイする

お疲れさまでした

このラボでは、Terraform を使用して Kubernetes クラスタと Service を初期化、計画、デプロイしました。

クエストを完了する

このセルフペース ラボは、「Managing Cloud Infrastructure with Terraform」と「DevOps Essentials」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、このラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。

次のラボを受講する

Terraform を使用した HTTPS コンテンツ ベース ロードバランサ」に進んでクエストを続けるか、以下のおすすめのラボをご確認ください。

次のステップと詳細情報

他のユーザーが Terraform をどのように使用しているのかコミュニティでご確認ください。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2023 年 9 月 28 日

ラボの最終テスト日: 2023 年 9 月 28 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。