From 3f558bd4da01ca7ec1e46127fcd7e27ab010bb9b Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Sat, 28 Feb 2026 17:22:53 +0000 Subject: [PATCH] [ci skip] install CloudNativePG operator as platform module - CNPG v0.27.1 operator in cnpg-system namespace - CRDs installed: clusters, backups, poolers, databases, etc. - local-path StorageClass already exists (from cloud-init template) - Prerequisite for PostgreSQL migration off NFS --- stacks/platform/main.tf | 8 +++++ stacks/platform/modules/cnpg/main.tf | 54 ++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 stacks/platform/modules/cnpg/main.tf diff --git a/stacks/platform/main.tf b/stacks/platform/main.tf index 2f149b30..8ee0305b 100644 --- a/stacks/platform/main.tf +++ b/stacks/platform/main.tf @@ -301,6 +301,14 @@ module "vpa" { tier = local.tiers.cluster } +# ----------------------------------------------------------------------------- +# CNPG — CloudNativePG Operator + local-path-provisioner for database storage +# ----------------------------------------------------------------------------- +module "cnpg" { + source = "./modules/cnpg" + tier = local.tiers.cluster +} + # ----------------------------------------------------------------------------- # NVIDIA — GPU device plugin # ----------------------------------------------------------------------------- diff --git a/stacks/platform/modules/cnpg/main.tf b/stacks/platform/modules/cnpg/main.tf new file mode 100644 index 00000000..72e84aea --- /dev/null +++ b/stacks/platform/modules/cnpg/main.tf @@ -0,0 +1,54 @@ +variable "tier" { type = string } + +# ----------------------------------------------------------------------------- +# Namespace +# ----------------------------------------------------------------------------- +resource "kubernetes_namespace" "cnpg_system" { + metadata { + name = "cnpg-system" + labels = { + tier = var.tier + } + } +} + +# ----------------------------------------------------------------------------- +# CloudNativePG Operator — manages PostgreSQL clusters via CRDs +# https://cloudnative-pg.io/ +# ----------------------------------------------------------------------------- +resource "helm_release" "cnpg" { + namespace = kubernetes_namespace.cnpg_system.metadata[0].name + create_namespace = false + name = "cnpg" + atomic = true + timeout = 300 + + repository = "https://cloudnative-pg.github.io/charts" + chart = "cloudnative-pg" + version = "0.27.1" + + values = [yamlencode({ + crds = { + create = true + } + + replicaCount = 1 + + resources = { + requests = { + cpu = "100m" + memory = "128Mi" + } + limits = { + cpu = "500m" + memory = "256Mi" + } + } + })] +} + +# NOTE: local-path-provisioner is already installed in the cluster +# (via cloud-init template) with StorageClass "local-path" (default). +# ReclaimPolicy is "Delete" — for CNPG clusters, set +# .spec.storage.pvcTemplate.storageClassName = "local-path" in the +# Cluster CR. CNPG handles PVC lifecycle independently.