はじめに
Kubernetes(K8s)を複数台のクラスタ構成で運用する際、インフラのコード化は欠かせません。本記事では、Terraform を使用して Kubernetes クラスタを構築する方法を紹介します。
Terraform は、クラウドプロバイダ(AWS, GCP, Azure など)を問わず、一貫した IaC(Infrastructure as Code)管理を可能にします。これにより、Kubernetes のマスターとワーカーノードを含むクラスタを簡単に作成し、運用することができます。
1. クラウド環境の選定
Terraform では、クラウドごとに異なる Provider を利用できます。以下に代表的なクラウドプロバイダを示します。
- AWS(Amazon Web Services):EKS(Elastic Kubernetes Service)
- GCP(Google Cloud Platform):GKE(Google Kubernetes Engine)
- Azure(Microsoft Azure):AKS(Azure Kubernetes Service)
本記事では、AWS を例に Kubernetes クラスタを構築する Terraform の設定を紹介します。
2. AWS 上で Kubernetes クラスタを構築する Terraform コード
2.1 事前準備
Terraform の実行には以下のものが必要です。
- AWS CLI(認証情報の設定)
- Terraform CLI
- IAM ロール & ポリシー(EKS の操作に必要)
まず、Terraform のプロバイダ設定を行います。
provider "aws" {
region = "us-west-2"
}
2.2 VPC の作成
Kubernetes クラスタをデプロイするための VPC とサブネットを定義します。
resource "aws_vpc" "k8s_vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = { Name = "k8s-vpc" }
}
resource "aws_subnet" "k8s_subnet" {
vpc_id = aws_vpc.k8s_vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-west-2a"
}
2.3 EKS クラスタの作成
EKS クラスタのリソースを作成します。
resource "aws_eks_cluster" "k8s_cluster" {
name = "k8s-cluster"
role_arn = aws_iam_role.eks_role.arn
vpc_config {
subnet_ids = [aws_subnet.k8s_subnet.id]
}
}
2.4 ワーカーノードの作成
EKS クラスタにワーカーノードを追加するためのノードグループを作成します。
resource "aws_eks_node_group" "worker_nodes" {
cluster_name = aws_eks_cluster.k8s_cluster.name
node_group_name = "k8s-workers"
node_role_arn = aws_iam_role.worker_role.arn
subnet_ids = [aws_subnet.k8s_subnet.id]
scaling_config {
desired_size = 2
min_size = 1
max_size = 3
}
}
3. Terraform の適用
設定が完了したら、以下の手順で Terraform を適用します。
terraform init
terraform plan
terraform apply -auto-approve
Terraform が完了すると、EKS クラスタとワーカーノードが作成されます。
4. Kubernetes クラスタの確認
作成した Kubernetes クラスタに接続するには、aws eks
コマンドを使用して kubeconfig を更新します。
aws eks update-kubeconfig --name k8s-cluster --region us-west-2
kubectl get nodes
このコマンドでノードが表示されれば、EKS クラスタのデプロイが成功しています。
5. 運用のポイント
- Terraform の状態管理:リモートバックエンド(S3 + DynamoDB)を利用する
-
ノードのスケーリング:
aws_eks_node_group
のscaling_config
を適切に設定 - セキュリティ:IAM ロールを適切に管理し、必要なポリシーを付与
- 監視:CloudWatch や Prometheus でメトリクスを監視
6. まとめ
本記事では、Terraform を使用して AWS 上に Kubernetes クラスタを構築する方法を紹介しました。
- Terraform を使えば Kubernetes クラスタをコード化して管理できる
- VPC、EKS クラスタ、ワーカーノードを Terraform で定義
-
terraform apply
でクラスタをデプロイし、kubectl
で管理可能
マルチクラウド環境やオンプレミスでの Kubernetes 運用も、Terraform を使えばスムーズに管理できます。ぜひ試してみてください!