その辺にいる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インスタンスのノードプールを追加するようになってます。