mirror of
https://github.com/optim-enterprises-bv/homelab.git
synced 2025-10-29 17:12:34 +00:00
216 lines
4.2 KiB
HCL
216 lines
4.2 KiB
HCL
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 = "WaitForFirstConsumer"
|
|
}
|
|
|
|
## 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("helm/traefik-values.yaml")]
|
|
}
|
|
|
|
# --- whoami
|
|
resource "kubernetes_namespace" "whoami" {
|
|
metadata {
|
|
name = "whoami"
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_service" "whoami" {
|
|
metadata {
|
|
name = "whoami"
|
|
namespace = kubernetes_namespace.whoami.metadata.0.name
|
|
}
|
|
spec {
|
|
selector = {
|
|
app = kubernetes_deployment.whoami.spec.0.template.0.metadata.0.labels.app
|
|
}
|
|
|
|
type = "LoadBalancer"
|
|
port {
|
|
protocol = "TCP"
|
|
name = "web"
|
|
port = 80
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_deployment" "whoami" {
|
|
metadata {
|
|
name = "whoami"
|
|
namespace = kubernetes_namespace.whoami.metadata.0.name
|
|
}
|
|
spec {
|
|
replicas = "2"
|
|
selector {
|
|
match_labels = {
|
|
app = "whoami"
|
|
}
|
|
}
|
|
template {
|
|
metadata {
|
|
labels = {
|
|
app = "whoami"
|
|
}
|
|
}
|
|
spec {
|
|
container {
|
|
name = "whoami"
|
|
image = "traefik/whoami"
|
|
port {
|
|
name = "web"
|
|
container_port = 80
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "helm_release" "whoami" {
|
|
name = "whoami"
|
|
repository = "https://charts.itscontained.io"
|
|
chart = "raw"
|
|
version = "0.2.5"
|
|
|
|
values = [file("helm/whoami-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
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
|