前提

  • 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