QUICKGUARD ホームページ >

Terraform で GKE(GoogleContainerCluster) のコンテナクラスタを作成

2015.12.16

今回はTerraformを使用したコンテナ作成を紹介したいと思います。
インフラのコード化に力を入れている人は、すでに使われていると
思いますが、これからインフラ構成の簡素化に力を入れる人の参考
になればと思います。

■前提
・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 となります。

Kubernetes20151216

◇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” => “
endpoint: “***.***.***.***” => “
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

以上、入門的な内容かもしれないですが、皆さまの参考になればと思います。