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
| Campo | Tipo | Descrizione |
|---|---|---|
type | enum mck (predefinito) | Emette MongoDBCommunity |
mode | enum managed | adopt | external (obbligatorio) | Modalità di provenienza |
managed | object | Impostazioni quando mode: managed |
adopt | object | Riferimento a un MongoDBCommunity esistente |
external | object | Secret di connessione con il MONGO_URI di base |
adopt
| Campo | Descrizione |
|---|---|
instanceRef | Il MongoDBCommunity esistente. namespace è facoltativo e può indicare un altro namespace — l'host del servizio viene costruito a partire da esso |
connectionSecretRef | Secret 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
| Campo | Predefinito | Descrizione |
|---|---|---|
members | 1 | Dimensione del replica set |
version | 8.0.4 | Versione del server MongoDB |
storageSize | — | Dimensione del PVC |
storageClass | default del cluster | StorageClass |
resources | — | CPU/memoria |
credentialsSecretName | generato | Sostituisce il Secret della password SCRAM |
rotation | — | Ruota la password SCRAM (con licenza) |
databases[]
| Campo | Descrizione |
|---|---|
name | Nome del database logico |
credentialsSecretName | Secret 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/RoleBindingmongodb-kubernetes-appdbnel namespace (i pod mongod di MCK ne hanno bisogno), genera il Secret della password SCRAM ed emette un replica setMongoDBCommunity. Per ogni voce didatabases[]materializza un SecretMONGO_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 unMongoDBCommunityesistente — 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 SecretMONGO_URIper database e non tocca mai il suo ciclo di vita.external— deriva gli URI per database da unMONGO_URIdi base fornito; nessun operatore viene installato.
Esempio — managed
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.
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:
rclone copyto DEST:my-bucket/mongo/mongo-<ts>.archive.gz /tmp/dump.archive.gz
mongorestore --uri="$MONGO_URI" --gzip --archive=/tmp/dump.archive.gz --dropStatus
{ phase, host, port (27017), credentialsSecret, databases[]{name, ready, credentialsSecret}, conditions, observedGeneration }. Nome breve mongo.