Service とは、クラスタで実行される Pod のグループです。Service は「安価」であるため、クラスタ内で多くの Service を使用できます。Kubernetes Service を使用すると、マイクロサービス アーキテクチャを効率的に実現できます。
Service は、ロード バランシング、アプリケーション間のサービス ディスカバリ、アプリケーションをダウンタイムなしでデプロイするための機能など、クラスタ全体で標準化される重要な機能を提供します。
各 Service には、その Service のデータを処理する Pod を定義するラベルクエリが含まれています。このラベルクエリは、1 つ以上のレプリケーション コントローラによって作成される Pod に頻繁に一致します。デプロイ ソフトウェアで Kubernetes API を使用して Service のラベルクエリを更新することにより、強力なルーティング シナリオを実現できます。
ずれの検出 - terraform plan を使用すると、適用しようとしている構成と現状との相違をいつでも確認できます。
ライフサイクル全体の管理 - Terraform では、最初にリソースを作成するだけでなく、追跡しているリソースを 1 つのコマンドで作成、更新、削除できます。それらのリソースを特定する API を調べる必要はありません。
同期フィードバック - 非同期動作は便利ですが、オペレーション結果(エラー、作成されたリソースの詳細など)の確認がユーザーに委ねられるため、非生産的な場合もあります。たとえば、ロードバランサの IP やホスト名はプロビジョニングが完了するまでわからないため、ロードバランサを参照する DNS レコードを作成できません。
関係のグラフ - Terraform ではリソース間の関係が認識されるため、スケジューリングに役立ちます。たとえば、Kubernetes クラスタの Service の作成は、そのクラスタが作成されるまで行われません。
タスク 1. サンプルコードのクローンを作成する
まず、Cloud Shell で、サンプルコードのクローンを作成します。
gsutil -m cp -r gs://spls/gsp233/* .
tf-gke-k8s-service-lb ディレクトリに移動します。
cd tf-gke-k8s-service-lb
タスク 2. コードを理解する
main.tf ファイルの内容を確認します。
cat main.tf
出力例:
...
variable "region" {
type = string
description = "Region for the resource."
}
variable "location" {
type = string
description = "Location represents region/zone for the resource."
}
variable "network_name" {
default = "tf-gke-k8s"
}
provider "google" {
region = var.region
}
resource "google_compute_network" "default" {
name = var.network_name
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "default" {
name = var.network_name
ip_cidr_range = "10.127.0.0/20"
network = google_compute_network.default.self_link
region = var.region
private_ip_google_access = true
}
...
...
* provider.google: version = "~> 3.8.0"
* provider.kubernetes: version = "~> 1.10.0"
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running `terraform plan` to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
terraform apply -var="region={{{ project_0.default_region | "Region to be allocated" }}}" -var="location={{{ project_0.default_zone | "Zone to be allocated" }}}"