fix: restore tree dropped by 6d224861; land stem95su gdrive-sync (10m) [ci skip]
6d224861 came from a --no-checkout worktree whose empty index made the
commit drop every file except two. This restores 05b50d2b's full tree and
correctly adds stacks/stem95su/gdrive-sync.tf + the service-catalog stem95su
entry. Forward-only (parent=6d224861, no force-push); [ci skip] since the
live infra was never applied from the broken commit.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6d224861c4
commit
fd0f4a0365
1166 changed files with 358546 additions and 0 deletions
175
stacks/vpa/modules/vpa/main.tf
Normal file
175
stacks/vpa/modules/vpa/main.tf
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
variable "tls_secret_name" {
|
||||
type = string
|
||||
sensitive = true
|
||||
}
|
||||
variable "tier" { type = string }
|
||||
|
||||
resource "kubernetes_namespace" "vpa" {
|
||||
metadata {
|
||||
name = "vpa"
|
||||
labels = {
|
||||
tier = var.tier
|
||||
"keel.sh/enrolled" = "true"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module "tls_secret" {
|
||||
source = "../../../../modules/kubernetes/setup_tls_secret"
|
||||
namespace = kubernetes_namespace.vpa.metadata[0].name
|
||||
tls_secret_name = var.tls_secret_name
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# VPA — Vertical Pod Autoscaler (Fairwinds Helm chart)
|
||||
# -----------------------------------------------------------------------------
|
||||
resource "helm_release" "vpa" {
|
||||
namespace = kubernetes_namespace.vpa.metadata[0].name
|
||||
create_namespace = false
|
||||
name = "vpa"
|
||||
atomic = true
|
||||
|
||||
repository = "https://charts.fairwinds.com/stable"
|
||||
chart = "vpa"
|
||||
|
||||
values = [yamlencode({
|
||||
recommender = {
|
||||
enabled = true
|
||||
resources = {
|
||||
requests = {
|
||||
cpu = "50m"
|
||||
memory = "200Mi"
|
||||
}
|
||||
limits = {
|
||||
memory = "200Mi"
|
||||
}
|
||||
}
|
||||
}
|
||||
updater = {
|
||||
enabled = true
|
||||
resources = {
|
||||
requests = {
|
||||
cpu = "50m"
|
||||
memory = "200Mi"
|
||||
}
|
||||
limits = {
|
||||
memory = "200Mi"
|
||||
}
|
||||
}
|
||||
}
|
||||
admissionController = {
|
||||
enabled = true
|
||||
resources = {
|
||||
requests = {
|
||||
cpu = "50m"
|
||||
memory = "200Mi"
|
||||
}
|
||||
limits = {
|
||||
memory = "200Mi"
|
||||
}
|
||||
}
|
||||
}
|
||||
})]
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Goldilocks — VPA dashboard (Fairwinds Helm chart)
|
||||
# -----------------------------------------------------------------------------
|
||||
resource "helm_release" "goldilocks" {
|
||||
namespace = kubernetes_namespace.vpa.metadata[0].name
|
||||
create_namespace = false
|
||||
name = "goldilocks"
|
||||
atomic = true
|
||||
|
||||
repository = "https://charts.fairwinds.com/stable"
|
||||
chart = "goldilocks"
|
||||
|
||||
values = [yamlencode({
|
||||
controller = {
|
||||
flags = {
|
||||
on-by-default = "true"
|
||||
}
|
||||
}
|
||||
dashboard = {
|
||||
replicaCount = 1
|
||||
flags = {
|
||||
on-by-default = "true"
|
||||
}
|
||||
}
|
||||
})]
|
||||
|
||||
depends_on = [helm_release.vpa]
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Ingress — Goldilocks dashboard at goldilocks.viktorbarzin.me
|
||||
# -----------------------------------------------------------------------------
|
||||
module "ingress" {
|
||||
source = "../../../../modules/kubernetes/ingress_factory"
|
||||
dns_type = "proxied"
|
||||
namespace = kubernetes_namespace.vpa.metadata[0].name
|
||||
name = "goldilocks"
|
||||
service_name = "goldilocks-dashboard"
|
||||
port = 80
|
||||
tls_secret_name = var.tls_secret_name
|
||||
auth = "required"
|
||||
extra_annotations = {
|
||||
"gethomepage.dev/enabled" = "true"
|
||||
"gethomepage.dev/name" = "Goldilocks"
|
||||
"gethomepage.dev/description" = "Resource recommendations"
|
||||
"gethomepage.dev/icon" = "mdi-scale-balance"
|
||||
"gethomepage.dev/group" = "Core Platform"
|
||||
"gethomepage.dev/pod-selector" = ""
|
||||
}
|
||||
|
||||
depends_on = [helm_release.goldilocks]
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Kyverno policy — label namespaces for VPA observe-only mode
|
||||
# -----------------------------------------------------------------------------
|
||||
# Goldilocks reads the goldilocks.fairwinds.com/vpa-update-mode label on
|
||||
# namespaces to decide the updateMode for VPA objects it creates.
|
||||
# All namespaces get "off" — Terraform is the authoritative source of truth
|
||||
# for container resources. Goldilocks provides recommendations only.
|
||||
|
||||
resource "kubernetes_manifest" "vpa_auto_mode_label" {
|
||||
manifest = {
|
||||
apiVersion = "kyverno.io/v1"
|
||||
kind = "ClusterPolicy"
|
||||
metadata = {
|
||||
name = "goldilocks-vpa-auto-mode"
|
||||
annotations = {
|
||||
"policies.kyverno.io/title" = "Goldilocks VPA Observe-Only Mode"
|
||||
"policies.kyverno.io/description" = "Sets VPA update mode to off for all namespaces. Terraform owns container resources; Goldilocks provides recommendations only."
|
||||
}
|
||||
}
|
||||
spec = {
|
||||
rules = [
|
||||
{
|
||||
name = "label-vpa-off-all"
|
||||
match = {
|
||||
any = [
|
||||
{
|
||||
resources = {
|
||||
kinds = ["Namespace"]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
mutate = {
|
||||
patchStrategicMerge = {
|
||||
metadata = {
|
||||
labels = {
|
||||
"goldilocks.fairwinds.com/vpa-update-mode" = "off"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
depends_on = [helm_release.goldilocks]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue