Terraform で GKE(GoogleContainerCluster) のコンテナクラスタを作成
前提
- GoogleCloudPlatform のアカウントは取得済み
- Google Cloud SDK インストールおよび認証済み
- terraformはインストール済み(今回の環境では0.6.8)
事前作業
GoogleDevelopersConsole にて以下の作業を行っておく
- プロジェクトの作成
- OAuth の同意設定
- サービスアカウントキーの取得(JSON形式)
手順
tfファイルと同じ場所に事前に取得したサービスアカウントキーのJSONを置く
■tfファイルを作成
variable "project" {}
variable "region" {
default = "asia-east1"
}
variable "cluster_name" {}
variable "zone" {}
variable "network" {}
variable "initial_node_count" {}
variable "machine_type" {}
variable "disk_size" {}
variable "master_auth_username" {}
variable "master_auth_password" {}
provider "google" {
credentials = "${file("account.json")}"
project = "${var.project}"
region = "${var.region}"
}
resource "google_container_cluster" "default" {
name = "${var.cluster_name}"
zone = "${var.zone}"
network = "${var.network}"
initial_node_count = "${var.initial_node_count}"
node_config {
machine_type = "${var.machine_type}"
disk_size_gb = "${var.disk_size}"
}
master_auth {
username = "${var.master_auth_username}"
password = "${var.master_auth_password}"
}
}
■terraform.tfvarsの中身
project = "************"
cluster_name = "cluster-1"
zone = "asia-east1-b"
network = "default"
initial_node_count = "3"
machine_type = "f1-micro"
disk_size = "10"
master_auth_username = "***********"
master_auth_password = "***********"
※f1-micro の場合は、initial_node_count の値は3以上を指定
terraform apply 実行するとコンテナクラスタが作成される
Kubernetes の Web UI へのログイン
作成したコンテナクラスタの MASTER IP を確認
$ gcloud container clusters list
NAME ZONE MASTER_VERSION MASTER_IP MACHINE_TYPE NUM_NODES STATUS
cluster-1 asia-east1-b 1.1.3 ***.***.***.*** f1-micro 3 RUNNING
https://{上記 MASTER_IP に表示されているIPアドレス}/ui/ にアクセス
※Basic認証のID・パスワードは terraform の .tfvars に設定した master_auth_username / master_auth_password となります
kubectl の認証情報を取得
$ gcloud container clusters get-credentials cluster-1
ノードの確認
$ kubectl get node
NAME LABELS STATUS AGE
gke-cluster-1-e6ff40f6-node-oxvo kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-oxvo Ready 1m
gke-cluster-1-e6ff40f6-node-v2rg kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v2rg Ready 1m
gke-cluster-1-e6ff40f6-node-v8mt kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v8mt Ready 1m
※TIPS
cluster内のノード追加・削除に関しては、terraformからは変更できない
initial_node_count = “4” に変更して terraform plan 実行すると cluster が再作成されることが分かる
-/+ google_container_cluster.default
cluster_ipv4_cidr: "10.52.0.0/14" => "<computed>"
endpoint: "***.***.***.***" => "<computed>"
initial_node_count: "3" => "4" (forces new resource)
ノードの追加方法
まずはインスタンスグループを確認する
$ gcloud compute instance-groups managed list
NAME ZONE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED
gke-cluster-1-e6ff40f6-group asia-east1-b gke-cluster-1-e6ff40f6-node 3 3 gke-cluster-1-e6ff40f6-1-1-3 no
gcloud コマンドにて確認したインスタンスグループに対して、サイズ変更(ノード数を3→4に変更)
$ gcloud compute instance-groups managed resize gke-cluster-1-e6ff40f6-group --size 4
...snip...
currentActions:
abandoning: 0
creating: 1
deleting: 0
none: 3
recreating: 0
refreshing: 0
restarting: 0
...snip...
targetSize: 4
zone: asia-east1-b
ノードの確認
$ kubectl get node
NAME LABELS STATUS AGE
gke-cluster-1-e6ff40f6-node-c723 kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-c723 Ready 1m
gke-cluster-1-e6ff40f6-node-oxvo kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-oxvo Ready 23m
gke-cluster-1-e6ff40f6-node-v2rg kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v2rg Ready 23m
gke-cluster-1-e6ff40f6-node-v8mt kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v8mt Ready 23m
ノードの削除
ノード数を4→3に変更
$ gcloud compute instance-groups managed resize gke-cluster-1-e6ff40f6-group --size 3
ノードの確認
$ kubectl get node
NAME LABELS STATUS AGE
gke-cluster-1-e6ff40f6-node-oxvo kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-oxvo Ready 34m
gke-cluster-1-e6ff40f6-node-v2rg kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v2rg Ready 34m
gke-cluster-1-e6ff40f6-node-v8mt kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v8mt Ready 34m