Skip to content

MongoCluster ​

Ambito: namespaced · Backend: MongoDB Controllers for Kubernetes / MCK (type: mck)

MongoDB condiviso con database per consumer — la stessa struttura type × mode di PostgresCluster. Incapsula l'operatore MCK, emettendo un replica set MongoDBCommunity con un unico utente admin SCRAM condiviso tra tutti i database logici. MongoDB è lo store obbligatorio per LibreChat (ChatUI).

Spec ​

CampoTipoDescrizione
typeenum mck (predefinito)Emette MongoDBCommunity
modeenum managed | adopt | external (obbligatorio)Modalità di provenienza
managedobjectImpostazioni quando mode: managed
adoptobjectRiferimento a un MongoDBCommunity esistente
externalobjectSecret di connessione con il MONGO_URI di base

adopt ​

CampoDescrizione
instanceRefIl MongoDBCommunity esistente. namespace è facoltativo e può indicare un altro namespace — l'host del servizio viene costruito a partire da esso
connectionSecretRefSecret con la stringa di connessione (chiave connectionString.standard); per default è il <instance>-admin-<user> di MCK. namespace assume per default il namespace dell'istanza; un Secret al di fuori del namespace di questa CR viene replicato qui come <name>-adopted-credentials
databases[]list

managed ​

CampoPredefinitoDescrizione
members1Dimensione del replica set
version8.0.4Versione del server MongoDB
storageSize—Dimensione del PVC
storageClassdefault del clusterStorageClass
resources—CPU/memoria
credentialsSecretNamegeneratoSostituisce il Secret della password SCRAM
rotation—Ruota la password SCRAM (con licenza)

databases[] ​

CampoDescrizione
nameNome del database logico
credentialsSecretNameSecret MONGO_URI materializzato; per default <cluster>-<name>-credentials

Una ChatUI che fa riferimento a questo cluster ottiene il proprio database anche quando non è dichiarato qui, con la licenza auto-wiring (cluster esterni inclusi — serve solo il Secret di connessione); status.databases[].claimedBy mostra chi usa ciascuno. Vedi Database per i workload che fanno riferimento a un datastore.

Comportamento per modalità ​

  • managed (type: mck) — garantisce l'operatore MCK (mongodb-kubernetes), predispone SA/Role/RoleBinding mongodb-kubernetes-appdb nel namespace (i pod mongod di MCK ne hanno bisogno), genera il Secret della password SCRAM ed emette un replica set MongoDBCommunity. Per ogni voce di databases[] materializza un Secret MONGO_URI (utente SCRAM condiviso, authSource=admin, percorso del database riscritto). MongoDB crea i database in modo lazy alla prima scrittura — non viene eseguito alcun DDL.
  • adopt — fa riferimento a un MongoDBCommunity esistente — eventualmente in un altro namespace (adozione tra namespace) — legge il suo Secret con la stringa di connessione (per default secondo la convenzione <instance>-admin-<user> di MCK, accanto all'istanza), ne deriva i Secret MONGO_URI per database e non tocca mai il suo ciclo di vita.
  • external — deriva gli URI per database da un MONGO_URI di base fornito; nessun operatore viene installato.

Esempio — managed ​

yaml
apiVersion: core.navique.com/v1alpha1
kind: MongoCluster
metadata:
  name: forge-mongo
  namespace: forge-data
spec:
  type: mck
  mode: managed
  managed: { members: 1, version: "8.0.4", storageSize: 10Gi }
  databases:
    - { name: LibreChat, credentialsSecretName: librechat-mongo-credentials }

Backup e ripristino ​

Imposta managed.backup (solo in modalità managed) per pianificare backup su object storage — lo stesso blocco indipendente dal provider di Postgres/ClickHouse (provider: s3 | azure | gcs, destinazione, credenziali, schedule, retentionPolicy).

L'operatore emette un CronJob <name>-backup di sua proprietà che esegue mongodump (init container) e carica l'archivio gzip con rclone — l'uploader universale per S3/GCS/Azure. Gli archivi vecchi vengono eliminati in base all'età (retentionPolicy). Impostare backup.enabled: false elimina il CronJob.

yaml
spec:
  type: mck
  mode: managed
  managed:
    storageSize: 10Gi
    backup:
      enabled: true
      provider: gcs
      gcs:
        destinationPath: gs://my-bucket/mongo
        credentialsSecretRef: { name: mongo-backup-gcs }   # key: credentials (SA JSON)
      schedule: "0 0 2 * * *"
      retentionPolicy: "30d"

Il ripristino è una procedura manuale — reimporta un archivio in streaming con mongorestore:

bash
rclone copyto DEST:my-bucket/mongo/mongo-<ts>.archive.gz /tmp/dump.archive.gz
mongorestore --uri="$MONGO_URI" --gzip --archive=/tmp/dump.archive.gz --drop

Status ​

{ phase, host, port (27017), credentialsSecret, databases[]{name, ready, credentialsSecret}, conditions, observedGeneration }. Nome breve mongo.

Nucleo open source sotto AGPL-3.0. I componenti Enterprise sono proprietari e soggetti a licenza.