その辺にいるITインフラ屋さん

気が向いた時に適当な記事を書いたりする個人の備忘録です。個人で開発しているアプリの事やインフラについてなどの記事を書いたりすると思います。更新頻度は少なめ

GKEをTerraformでコード化してみる

AWSを触ってる人がGKEを試してみるの続編

お試しにKubenetesクラスタを立てて置くのはGKEといえどそれなりにお金がかかります。マシンタイプをsmallIngressを立ててhttps通信を出来るようにしてみると、200円/day くらいでしたので6000円,month/くらいはかかりそうでした。せっかくのサービスクレジットがあっという間になくなるのは勿体ないので、気軽にリソースを削除出来るようにTerraformでコード化します。



GKEのクラスタとノードの設定

前回書いた記事で作成したリソースからVPCの設定を除いた感じにします。

  • リージョン : asia-northeast1(tokyo)
  • マシンタイプ : small (ノード数1)
  • プリエンプティブ ノードの有効化

TerraformでGCPを利用する

Terraformは Infrastructure as Codeを実現するツールです。リソースの変更する時に差分がわかりやすく表示されるのと、既存のリソースをインポートする事が出来るのが気に入ってます。

TerraformのドキュメントにGetting Started with the Google Providerがあるのでこちらを参考にしてます。実施することは主に 下記の二つ

  • GCPの認証情報を作成する
  • TerraformでProvider設定をする

GCPの認証情報を作成する

Googleのドキュメントの認証の開始の通りに進めます。

TerraformでProvider設定をする

コード化すると下記のようになります。下記のコードで上記の環境変数(GOOGLE_CLOUD_KEYFILE_JSON)を指定しておけば利用できるようになります。

# main.tf
provider "google" {
  project = " ***** "
  region  = "asia-northeast1"
}

TerraformでKubenetesのコード化をする

次にKubenetesのコード化したものを追記すると下記のような感じになりました。

provider "google" {
  project = " ***** "
  region  = "asia-northeast1"
}

locals {
  region_location = "asia-northeast1"
}

resource "google_container_cluster" " <任意の名前>" {
  name     = "<任意のクラスタ名>"
  location = "${local.region_location}"

  remove_default_node_pool = true
  initial_node_count       = 1
}

resource "google_container_node_pool" " <任意の名前>" {
  name       = "<任意のノード名>"
  location   = "${local.region_location}"
  cluster    = "${google_container_cluster.<任意のリソース名>.name}"
  node_count = 1

  node_config {
    preemptible  = true
    machine_type = "g1-small"
  }
}

個人的にはとてもシンプルなイメージです。利用しないときは google_container_clustergoogle_container_node_poolを一旦コード上で削除してから terraform applyをすればお金がかからなくなります。

remove_default_node_poolはデフォルトでノードプールが削除されるので、削除するようにして g1-smallインスタンスのノードプールを追加するようになってます。