はじめに
最近はローカル開発環境の管理を terraform + kubernetes に移行しました。この記事で環境検証のための一番簡単な作成例です。
準備
- Docker For Mac with Kubernetes
- Terraform
tf ファイルを書く
この設定には、Alpineイメージの中のnc
コマンドを使って、echo サーバーを起動する。そして Service 利用して外部に公開します。
test.tf
provider "kubernetes" {
version = "~> 1.10"
host = "https://localhost:6443"
config_context_auth_info = "docker-desktop"
config_context_cluster = "docker-desktop"
}
resource "kubernetes_pod" "echo" {
metadata {
name = "echo"
labels = {
app = "echo"
}
}
spec {
container {
image = "alpine:latest"
name = "echo"
command = ["nc"]
args = ["-vlkp", "2000", "-e", "/bin/cat"]
}
}
}
resource "kubernetes_service" "echo" {
metadata {
name = "echo"
}
spec {
selector = {
app = "${kubernetes_pod.echo.metadata.0.labels.app}"
}
session_affinity = "ClientIP"
port {
port = 2000
target_port = 2000
}
type = "LoadBalancer"
}
}
実行と検証
設定ファイルを terraform に応用しましょう。
$ terraform init
$ terraform plan
$ terraform apply
成功した後、kubernetes の方には pod と service は起動したことを確認しましょう。
$ kubectl get po
NAME READY STATUS RESTARTS AGE
echo 1/1 Running 0 17s
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
echo LoadBalancer 10.98.63.163 localhost 2000:30091/TCP 12s
サービスに接続みる。
$ nc -v localhost 2000
リソースの削除
$ terraform destroy -auto-approve
kubernetes_pod.echo: Refreshing state... [id=default/echo]
kubernetes_service.echo: Refreshing state... [id=default/echo]
kubernetes_service.echo: Destroying... [id=default/echo]
kubernetes_service.echo: Destruction complete after 0s
kubernetes_pod.echo: Destroying... [id=default/echo]
kubernetes_pod.echo: Destruction complete after 3s
Destroy complete! Resources: 2 destroyed.