Terraform for Kubernetes on Minikube

Use the Kubernetes provider to create a namespace, deployment, and service against a local Minikube cluster.

TrackTerraform Learning Journey
Current SectionKubernetes and Platforms
Progress11 of 12

To use Terraform with Kubernetes on Minikube, you need:

  • A running Minikube cluster
  • Terraform with the Kubernetes provider
  • Proper kubeconfig access

Step-by-Step Terraform Setup for Kubernetes on Minikube


1. Start Minikube

If not running already:

minikube start

2. Check the kubeconfig

Terraform will use your default kubeconfig (~/.kube/config) to connect to the Kubernetes cluster. You can verify:

kubectl config current-context

3. Create Terraform Config

main.tf

provider "kubernetes" {
  config_path = "~/.kube/config"
}

resource "kubernetes_namespace" "example" {
  metadata {
    name = "example-ns"
  }
}

resource "kubernetes_deployment" "nginx" {
  metadata {
    name      = "nginx-deployment"
    namespace = kubernetes_namespace.example.metadata[0].name
  }

  spec {
    replicas = 2

    selector {
      match_labels = {
        app = "nginx"
      }
    }

    template {
      metadata {
        labels = {
          app = "nginx"
        }
      }

      spec {
        container {
          name  = "nginx"
          image = "nginx:latest"

          port {
            container_port = 80
          }
        }
      }
    }
  }
}

resource "kubernetes_service" "nginx" {
  metadata {
    name      = "nginx-service"
    namespace = kubernetes_namespace.example.metadata[0].name
  }

  spec {
    selector = {
      app = "nginx"
    }

    port {
      port        = 80
      target_port = 80
    }

    type = "NodePort"
  }
}

4. Initialize Terraform

terraform init

5. Plan and Apply

terraform plan
terraform apply

6. Verify Resources

kubectl get all -n example-ns

Accessing the Service

To get the service URL:

minikube service nginx-service -n example-ns