mirror of
https://github.com/outbackdingo/homelab-v.git
synced 2026-08-25 14:53:19 +00:00
150 lines
3.0 KiB
Terraform
150 lines
3.0 KiB
Terraform
terraform {
|
|
required_providers {
|
|
kubernetes = {
|
|
source = "hashicorp/kubernetes"
|
|
version = ">= 2.0.0"
|
|
}
|
|
helm = {
|
|
source = "hashicorp/helm"
|
|
version = ">= 2.5.0"
|
|
}
|
|
}
|
|
}
|
|
|
|
provider "kubernetes" {
|
|
config_path = "~/.kube/config"
|
|
}
|
|
|
|
provider "helm" {
|
|
kubernetes {
|
|
config_path = "~/.kube/config"
|
|
}
|
|
}
|
|
|
|
#resource "helm_release" "cilium" {
|
|
# name = "cilium"
|
|
#
|
|
# repository = "https://helm.cilium.io"
|
|
# chart = "cilium"
|
|
# namespace = "kube-system"
|
|
# version = "1.11.5"
|
|
#}
|
|
|
|
## Create namespace for Traefik
|
|
resource "kubernetes_namespace" "traefik" {
|
|
metadata {
|
|
name = "traefik-system"
|
|
}
|
|
}
|
|
|
|
## Create StorageClass for local volumes
|
|
resource "kubernetes_storage_class" "cert-storage" {
|
|
metadata {
|
|
name = "cert-storage"
|
|
}
|
|
storage_provisioner = "kubernetes.io/no-provisioner"
|
|
volume_binding_mode = "WaitForFirstCustomer"
|
|
}
|
|
|
|
## Create PersistentVolume for Traefik certs
|
|
resource "kubernetes_persistent_volume" "traefik-cert-pv" {
|
|
metadata {
|
|
name = "traefik-cert-pv"
|
|
}
|
|
spec {
|
|
capacity = {
|
|
storage = "128Mi"
|
|
}
|
|
volume_mode = "Filesystem"
|
|
access_modes = ["ReadWriteOnce"]
|
|
persistent_volume_reclaim_policy = "Retain"
|
|
storage_class_name = "cert-storage"
|
|
persistent_volume_source {
|
|
local {
|
|
path = "/mnt/sdb1/terrakube/certs"
|
|
}
|
|
}
|
|
node_affinity {
|
|
required {
|
|
node_selector_term {
|
|
match_expressions {
|
|
key = "kubernetes.io/hostname"
|
|
operator = "In"
|
|
values = ["ratatoskr"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
## Install Traefik
|
|
resource "helm_release" "traefik" {
|
|
name = "traefik"
|
|
|
|
repository = "https://helm.traefik.io/traefik"
|
|
chart = "traefik"
|
|
namespace = kubernetes_namespace.traefik.metadata.0.name
|
|
#version = "10.30.1"
|
|
|
|
values = [file("traefik2/custom-values.yaml")]
|
|
}
|
|
|
|
|
|
//resource "kubernetes_namespace" "test" {
|
|
// metadata {
|
|
// name = "nginx"
|
|
// }
|
|
//}
|
|
//
|
|
//resource "kubernetes_service" "test" {
|
|
// metadata {
|
|
// name = "nginx"
|
|
// namespace = kubernetes_namespace.test.metadata.0.name
|
|
// }
|
|
// spec {
|
|
// selector = {
|
|
// app = kubernetes_deployment.test.spec.0.template.0.metadata.0.labels.app
|
|
// }
|
|
//
|
|
// type = "LoadBalancer"
|
|
// port {
|
|
// protocol = "TCP"
|
|
// port = 80
|
|
// target_port = 80
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//resource "kubernetes_deployment" "test" {
|
|
// metadata {
|
|
// name = "nginx"
|
|
// namespace = kubernetes_namespace.test.metadata.0.name
|
|
// }
|
|
// spec {
|
|
// replicas = 2
|
|
// selector {
|
|
// match_labels = {
|
|
// app = "MyTestApp"
|
|
// }
|
|
// }
|
|
// template {
|
|
// metadata {
|
|
// labels = {
|
|
// app = "MyTestApp"
|
|
// }
|
|
// }
|
|
// spec {
|
|
// container {
|
|
// image = "nginx"
|
|
// name = "nginx-container"
|
|
// port {
|
|
// container_port = 80
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
|