TerraformでSpotVMが作成できるようになっていたので試してみる
はじめに
株式会社イエソドでインフラ管理を担当しています@Omasumasuです。
2021 年の 10 月ごろに発表された GCP のSpot VMですが、v4.3.0 の terraform-provider-google で対応しました!
弊社では GKE 環境にてアプリケーションを動作しているのですが、検証環境や開発環境用のクラスターではコストの関係上 preemptible ノードにアプリケーションのワークロードは優先的に配置するように設定をしていました。Spot VM がリリースされた後に preemptible ノードをすぐに Spot VM に置き換えたかったのですが、Terraform で GCP 上のリソースを管理しているため導入は見送っていました。
今回のリリースによって Spot VM を Terraform 上で組み込めるようになったので早速開発環境の GKE クラスターに Spot VM を組み込んでみました。
設定方法
Spot VM はまだ Beta 機能のためgoogle-beta providerが必要になるのでそちらの準備は事前に行ってください
まずは、provider.tf
のrequired_providers
配下の google のバージョンを 4.13.0(執筆時最新)に書き換えてください
...
terraform {
...
required_providers {
google = {
version = "~> 4.13.0"
}
}
}
そしてterraform init -upgrade
を実行して最新版に更新をします
バージョン更新によって GCP の各サービスの設定値や設定方法が若干変わっているところがあるので、まずはterraform plan
を実行して差分が出なくなるまで各ファイルや変数ファイルの設定をしてください
あとはgoogle_container_cluster
やgoogle_container_node_pool
リソースのnode_config
を書き換えてあげることで Spot VM の作成ができます。
例
resource "google_container_node_pool" "sample" {
provider = "google-beta"
project = var.project
...
node_config {
preemptible = false
spot = true
...
}
設定は簡単でこれだけです。
設定ができれば通常通りterraform apply
を実行すれば spot インスタンスが生成されます。
GKE 上で Spot VM が正常に作成されたかどうかを確認するにはkubectl describe nodes
で Node の Label にcloud.google.com/gke-spot=true
があるかどうかを見てあげることで確認できます。
$ kubectl describe nodes XXXX
Name: XXXX
Roles: XXXX
Labels: ...
cloud.google.com/gke-spot=true
...
思ったよりも簡単に作成することができました。
Spot VM は現状 Beta ですが、弊社環境では現状問題なく動作しています。
株式会社イエソドはエンジニアを募集しています
Discussion