From 79e4a0265797ea8caa8f4811a3c5c9da879912bc Mon Sep 17 00:00:00 2001 From: Taqi Tahmid Date: Tue, 1 Jul 2025 09:50:55 +0300 Subject: [PATCH] infra: deploy kube-vip with terraform --- infra/terraform/README.md | 12 ++++++------ infra/terraform/kubernetes/kube-vip.tf | 16 ++++++++++++++++ infra/terraform/kubernetes/main.tf | 2 +- infra/terraform/kubernetes/variables.tf | 11 +++++++++++ kubernetes/kube-vip/values.yaml | 2 +- 5 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 infra/terraform/kubernetes/kube-vip.tf diff --git a/infra/terraform/README.md b/infra/terraform/README.md index c11501a..cfa176a 100644 --- a/infra/terraform/README.md +++ b/infra/terraform/README.md @@ -7,12 +7,12 @@ This directory contains Terraform configurations for managing infrastructure resources. It includes configurations for Proxmox. -The plan is to eventually migrate all infrastructure management to Terraform, -including Kubernetes clusters and other resources. Currently, the Proxmox -configuration is fully managed by Terraform, while Kubernetes resources are -managed using Helm charts and kubectl commands. Previously, the Proxmox -configuration was managed using Ansible, but it has been migrated to Terraform -for better consistency and state management. +Currently, only the Proxmox virtual machines are managed using Terraform. +Kubernetes clusters are still created with Ansible, and Kubernetes resources are +managed using Helm charts and kubectl. Previously, Proxmox was also managed with +Ansible, but it has been moved to Terraform for improved consistency and state +management. The goal is to eventually manage all infrastructure—including +Kubernetes clusters—using Terraform. The terraform state files are stored in a remote backend, which allows for collaboration and state management across different environments. The backend diff --git a/infra/terraform/kubernetes/kube-vip.tf b/infra/terraform/kubernetes/kube-vip.tf new file mode 100644 index 0000000..3c18b71 --- /dev/null +++ b/infra/terraform/kubernetes/kube-vip.tf @@ -0,0 +1,16 @@ +# No new namespace is required since it is being deployed in kube-system namespace. +resource "helm_release" "kube_vip" { + name = "kube-vip" + repository = "https://kube-vip.github.io/helm-charts" + chart = "kube-vip" + version = "0.6.6" + atomic = true + + namespace = "kube-system" + + values = [ + templatefile("${var.kubernetes_project_path}/kube-vip/values.yaml", { + VIP_ADDRESS = var.vip_address + }) + ] +} \ No newline at end of file diff --git a/infra/terraform/kubernetes/main.tf b/infra/terraform/kubernetes/main.tf index 6e889a2..9d6bc5e 100644 --- a/infra/terraform/kubernetes/main.tf +++ b/infra/terraform/kubernetes/main.tf @@ -16,7 +16,7 @@ provider "kubernetes" { } provider "helm" { - kubernetes { + kubernetes = { config_path = "~/.kube/config" } } \ No newline at end of file diff --git a/infra/terraform/kubernetes/variables.tf b/infra/terraform/kubernetes/variables.tf index d1b65ec..7f9a510 100644 --- a/infra/terraform/kubernetes/variables.tf +++ b/infra/terraform/kubernetes/variables.tf @@ -32,4 +32,15 @@ variable "docker_username" { variable "docker_password" { description = "Docker registry password" type = string +} + +variable "kubernetes_project_path" { + description = "Path to the Kubernetes configuration files" + type = string + default = "../../../kubernetes" +} + +variable "vip_address" { + description = "VIP address for kube-vip" + type = string } \ No newline at end of file diff --git a/kubernetes/kube-vip/values.yaml b/kubernetes/kube-vip/values.yaml index d5d6b16..43a7b49 100644 --- a/kubernetes/kube-vip/values.yaml +++ b/kubernetes/kube-vip/values.yaml @@ -1,6 +1,6 @@ # custom-values.yaml config: - address: $VIP_ADDRESS + address: "${VIP_ADDRESS}" env: # Ensure the interface name is correct for the Nodes # Can be found using `ip a` command