Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026
DBA Platform · Kubernetes Native · GitOps · PRA

Guide complet — Exploitation et administration DBA Kubernetes Native

Guide opérationnel pour préparer une mission DBA moderne : PostgreSQL avec CloudNativePG, Elasticsearch avec ECK, OpenSearch, MariaDB/Galera, MongoDB, GitOps, stockage persistant, sécurité, sauvegarde, restauration, observabilité, upgrades et préparation entretien.

1. Vision gĂ©nĂ©rale — ce qu’est vraiment un DBA Kubernetes Native

Objectif du guide

PrĂ©parer une infrastructure de dĂ©monstration et une culture opĂ©rationnelle crĂ©dible pour une mission DBA oĂč les bases de donnĂ©es sont dĂ©ployĂ©es, sĂ©curisĂ©es, surveillĂ©es et restaurĂ©es dans Kubernetes via opĂ©rateurs, GitOps et stockage persistant.

Dans cette fiche, le DBA n’est pas seulement responsable du moteur SQL ou NoSQL. Il devient responsable du cycle de vie complet de la donnĂ©e dans Kubernetes : manifeste dĂ©claratif, opĂ©rateur, StatefulSet, PVC, snapshot, backup, restauration, failover, secret, certificats, RBAC, quotas, observabilitĂ© et montĂ©e de version.

Git
Source de vérité
→
ArgoCD / Flux
Réconciliation GitOps
→
Operators
CNPG, ECK, MariaDB, MongoDB
→
Stateful workloads
Pods, Services, PVC
→
Data protection
Backup, snapshot, restore, PITR
DBA
SQL, HA, backup, restauration, performance, volumétrie.
K8s
Namespaces, RBAC, PVC, StorageClass, StatefulSet, quotas.
GitOps
Manifests versionnés, ArgoCD/Flux, drift control, rollback.
SRE
Runbooks, alerting, incident response, RPO/RTO, postmortem.

Carte des responsabilités

DomaineResponsabilité attenduePreuve à préparer
ProvisioningDécrire les clusters DB via CRD, Helm, Kustomize et GitOps.Repo Git structuré avec manifests par environnement.
Haute disponibilitéComprendre failover, quorum, replicas, anti-affinity et PDB.Démo suppression pod primary + validation service.
SauvegardeChoisir entre backup logique, physique, WAL, snapshot et object storage.Backup automatique + restore testé.
SécuritéGérer secrets, TLS, RBAC, chiffrement volumes et accÚs moindre privilÚge.Manifests RBAC, ExternalSecret, NetworkPolicy et TLS.
ExploitationSurveiller métriques, logs, alertes, saturation PVC, erreurs backup.Dashboards Prometheus/Grafana + rÚgles Alertmanager.

Sommaire opérationnel

  • PrĂ©parer un lab local, VM ou cloud.
  • Installer un socle Kubernetes stateful.
  • Mettre en place GitOps avec ArgoCD ou Flux.
  • DĂ©ployer PostgreSQL avec CloudNativePG.
  • DĂ©ployer Elasticsearch avec ECK et OpenSearch avec son opĂ©rateur.
  • DĂ©ployer MariaDB/Galera et comprendre le quorum.
  • DĂ©ployer MongoDB replica set et comprendre le sharding.
  • SĂ©curiser secrets, TLS, RBAC, volumes et flux rĂ©seau.
  • Surveiller avec Prometheus, Grafana, Alertmanager et logs.
  • Écrire des runbooks de failover, restore, PITR, upgrade.
  • PrĂ©parer les questions client et les rĂ©ponses entretien.
Phrase Ă  retenir : “Je ne vois pas ce poste comme un DBA classique, mais comme un rĂŽle DBA Platform : garantir le cycle de vie complet des moteurs de donnĂ©es dans Kubernetes, depuis Git jusqu’au restore testĂ©.”

2. Infrastructure de lab à préparer

Il faut prĂ©parer une infrastructure qui permet de dĂ©montrer la maĂźtrise des sujets rĂ©els : pods stateful, volumes persistants, backups sur object storage, failover, restore et GitOps. Le lab doit ĂȘtre simple Ă  expliquer, mais assez sĂ©rieux pour montrer une vraie dĂ©marche de production.

Les 3 niveaux de lab

NiveauObjectifStack recommandéeLimite
LocalApprendre les manifests et opĂ©rateurs.kind ou k3d, MinIO, ArgoCD, CNPG, ECK, External Secrets.Storage non reprĂ©sentatif d’une production.
VM sĂ©rieuxTester failover, PVC, snapshots, quotas, anti-affinity.1 control-plane, 3 workers, Longhorn/OpenEBS, MinIO, Prometheus.Demande 32 Ă  48 Go de RAM pour ĂȘtre confortable.
CloudSe rapprocher du client final.EKS/AKS/GKE, CSI cloud, S3/Blob/GCS, KMS, Vault, ArgoCD.Coût et complexité plus élevés.

Architecture cible du lab VM

Control plane
API server, scheduler, controllers
+
Worker 1
PostgreSQL replica, ES data, Mongo secondary
+
Worker 2
PostgreSQL primary, MariaDB node, ES master
+
Worker 3
PostgreSQL replica, Mongo primary, backup jobs

Dimensionnement minimal conseillé

ComposantMinimumConfortableRemarque DBA
Control-plane2 vCPU / 4 Go2 vCPU / 8 GoÉviter d’y placer les DB.
Workers3 x 2 vCPU / 8 Go3 x 4 vCPU / 12-16 GoAnti-affinity et tests de perte de nƓud.
Disque200 Go SSD500 Go SSDPrévoir snapshots, WAL, index et backups.
Object storageMinIO localS3 compatibleIndispensable pour backup/restore réaliste.

Arborescence de travail

repo-tree.txt
db-k8s-platform/
                clusters/
                local/
                staging/
                production/
                platform/
                namespaces/
                rbac/
                quotas/
                storage/
                network-policies/
                observability/
                secrets/
                operators/
                cloudnative-pg/
                eck/
                opensearch/
                mariadb/
                mongodb/
                databases/
                postgres/
                elasticsearch/
                opensearch/
                mariadb/
                mongodb/
                backup/
                minio/
                policies/
                restore-tests/
                runbooks/
                postgres-pitr.md
                elasticsearch-restore.md
                mariadb-galera-recovery.md
                mongodb-election.md
                operator-upgrade.md

Commandes simples de bootstrap local

bootstrap-local.sh
#!/usr/bin/env bash
                set -euo pipefail

                kind create cluster --name db-lab --config kind-db-lab.yaml
                kubectl create namespace gitops
                kubectl create namespace db-operators
                kubectl create namespace db-postgres
                kubectl create namespace db-search
                kubectl create namespace db-mariadb
                kubectl create namespace db-mongodb
                kubectl create namespace observability
                kubectl create namespace security
Conseil entretien : explique que ton lab local sert Ă  valider les manifests et les procĂ©dures, mais que les sujets critiques comme IOPS, snapshots CSI, multi-AZ et chiffrement doivent ĂȘtre validĂ©s sur un vrai cluster.

3. Socle Kubernetes indispensable aux bases de données

Les bases de donnĂ©es sur Kubernetes reposent sur des primitives essentielles : namespace, RBAC, quotas, StatefulSet, PersistentVolumeClaim, StorageClass, VolumeSnapshot, NetworkPolicy, Secret et Service. Un DBA Kubernetes Native doit ĂȘtre capable de lire et diagnostiquer ces objets sans dĂ©pendre entiĂšrement de l’équipe plateforme.

Objets Kubernetes Ă  connaĂźtre

ObjetRÎleRisque si mal configuré
NamespaceIsolation logique des workloads et politiques.Mélange prod/dev, RBAC trop large, quotas absents.
StatefulSetIdentitĂ© stable des pods stateful.Perte d’ordre, mauvais rolling update, stockage incohĂ©rent.
PVCDemande de stockage persistant.Suppression accidentelle, saturation, mauvais IOPS.
StorageClassType de stockage offert au cluster.Stockage lent, non chiffré, non snapshotable.
RBACContrĂŽle des droits API Kubernetes.AccĂšs secrets ou suppression PVC par erreur.
ResourceQuotaLimite de consommation par namespace.Un moteur consomme tout le cluster.
NetworkPolicyContrÎle des flux réseau entre pods.Base exposée à trop de workloads.
VolumeSnapshotSnapshot CSI d’un volume persistant.Fausse impression de backup si non testĂ©.

Namespaces recommandés

namespaces.yaml
apiVersion: v1
                kind: Namespace
                metadata:
                name: db-postgres
                labels:
                platform.ideo-lab.com/domain: database
                platform.ideo-lab.com/engine: postgres
                ---
                apiVersion: v1
                kind: Namespace
                metadata:
                name: db-search
                labels:
                platform.ideo-lab.com/domain: search
                ---
                apiVersion: v1
                kind: Namespace
                metadata:
                name: db-mariadb
                labels:
                platform.ideo-lab.com/domain: database
                platform.ideo-lab.com/engine: mariadb
                ---
                apiVersion: v1
                kind: Namespace
                metadata:
                name: db-mongodb
                labels:
                platform.ideo-lab.com/domain: database
                platform.ideo-lab.com/engine: mongodb

Quota namespace database

resource-quota-db.yaml
apiVersion: v1
                kind: ResourceQuota
                metadata:
                name: db-namespace-quota
                namespace: db-postgres
                spec:
                hard:
                requests.cpu: "8"
                limits.cpu: "16"
                requests.memory: 32Gi
                limits.memory: 48Gi
                requests.storage: 500Gi
                persistentvolumeclaims: "20"
                pods: "40"
                secrets: "80"
                services: "20"

StorageClass production

storageclass-db-fast.yaml
apiVersion: storage.k8s.io/v1
                kind: StorageClass
                metadata:
                name: db-fast-retain
                provisioner: csi.example.com
                reclaimPolicy: Retain
                allowVolumeExpansion: true
                volumeBindingMode: WaitForFirstConsumer
                parameters:
                type: fast-ssd
                encrypted: "true"

RBAC DBA read-only

rbac-dba-readonly.yaml
apiVersion: rbac.authorization.k8s.io/v1
                kind: Role
                metadata:
                name: dba-readonly
                namespace: db-postgres
                rules:
                - apiGroups: [""]
                resources: ["pods", "services", "events", "persistentvolumeclaims", "configmaps"]
                verbs: ["get", "list", "watch"]
                - apiGroups: ["postgresql.cnpg.io"]
                resources: ["clusters", "backups", "scheduledbackups"]
                verbs: ["get", "list", "watch"]
                ---
                apiVersion: rbac.authorization.k8s.io/v1
                kind: RoleBinding
                metadata:
                name: dba-readonly-binding
                namespace: db-postgres
                subjects:
                - kind: Group
                name: dba-team
                apiGroup: rbac.authorization.k8s.io
                roleRef:
                kind: Role
                name: dba-readonly
                apiGroup: rbac.authorization.k8s.io
Point critique : pour les bases de donnĂ©es, reclaimPolicy: Retain est souvent prĂ©fĂ©rable Ă  Delete. La suppression d’un cluster ne doit pas dĂ©truire les volumes sans dĂ©cision explicite.

4. GitOps — ArgoCD / Flux pour les bases de donnĂ©es

En GitOps, Git devient la source de vĂ©ritĂ©. Les opĂ©rateurs Kubernetes rĂ©concilient l’état dĂ©sirĂ© depuis les manifests. Cela apporte auditabilitĂ©, rollback, revue de code, sĂ©paration des environnements et contrĂŽle du drift.

Principe de flux

Pull request
Review manifests
→
Merge Git
Desired state
→
ArgoCD / Flux
Sync controller
→
Operator
Database lifecycle
→
Cluster DB
Pods, PVC, backups

Arborescence GitOps recommandée

gitops-layout.txt
clusters/
                production/
                kustomization.yaml
                apps.yaml
                policies.yaml
                staging/
                kustomization.yaml
                operators/
                cloudnative-pg/
                base/
                overlays/production/
                eck/
                base/
                overlays/production/
                databases/
                postgres/payments/
                base/cluster.yaml
                base/scheduled-backup.yaml
                overlays/production/kustomization.yaml
                search/logs/
                base/elasticsearch.yaml
                base/kibana.yaml
                mongodb/customer360/
                base/replica-set.yaml
                policies/
                rbac/
                network/
                quotas/
                storage/

Exemple ArgoCD Application

argocd-postgres-app.yaml
apiVersion: argoproj.io/v1alpha1
                kind: Application
                metadata:
                name: postgres-payments
                namespace: argocd
                spec:
                project: databases
                source:
                repoURL: https://git.example.com/platform/db-k8s-platform.git
                targetRevision: main
                path: databases/postgres/payments/overlays/production
                destination:
                server: https://kubernetes.default.svc
                namespace: db-postgres
                syncPolicy:
                automated:
                prune: false
                selfHeal: true
                syncOptions:
                - CreateNamespace=false
                - ApplyOutOfSyncOnly=true

Exemple Flux HelmRelease

flux-cnpg-helmrelease.yaml
apiVersion: source.toolkit.fluxcd.io/v1
                kind: HelmRepository
                metadata:
                name: cnpg
                namespace: flux-system
                spec:
                interval: 1h
                url: https://cloudnative-pg.github.io/charts
                ---
                apiVersion: helm.toolkit.fluxcd.io/v2
                kind: HelmRelease
                metadata:
                name: cloudnative-pg
                namespace: db-operators
                spec:
                interval: 30m
                chart:
                spec:
                chart: cloudnative-pg
                version: "0.x.x"
                sourceRef:
                kind: HelmRepository
                name: cnpg
                namespace: flux-system
                install:
                crds: Create
                upgrade:
                crds: CreateReplace

RÚgles GitOps à défendre

RĂšglePourquoiException possible
Pas de modification manuelle en productionÉvite le drift invisible.Incident critique avec ticket et rĂ©conciliation ensuite.
Un changement DB = une pull requestTrace, review, rollback.Rotation urgente de secret via processus sécurité.
Les CRD sont gérées séparémentUn upgrade CRD peut casser des ressources existantes.Lab ou staging uniquement.
Prune contrÎléSupprimer un manifest peut supprimer des ressources sensibles.Namespaces non stateful ou composants stateless.
Attention : activer prune: true sans stratĂ©gie claire sur des ressources stateful peut provoquer la suppression d’objets critiques. MĂȘme si les PVC sont en Retain, l’incident opĂ©rationnel peut ĂȘtre sĂ©vĂšre.

5. PostgreSQL via CloudNativePG

PostgreSQL avec CloudNativePG est probablement le cƓur de cette mission. Le sujet ne se limite pas Ă  crĂ©er un cluster : il faut maĂźtriser rĂ©plication, failover, backups physiques, WAL archiving, PITR, switchover, services read/write, rolling upgrade et restauration testĂ©e.

Topologie cible

App write
Service rw
→
Primary
PostgreSQL instance 1 + PVC
↔
Replica 1
Streaming replication + PVC
↔
Replica 2
Read-only service + PVC
→
Object store
Base backup + WAL

Manifeste CNPG — cluster 3 instances

postgres-cluster.yaml
apiVersion: postgresql.cnpg.io/v1
                kind: Cluster
                metadata:
                name: pg-payments
                namespace: db-postgres
                spec:
                instances: 3
                imageName: ghcr.io/cloudnative-pg/postgresql:16

                primaryUpdateStrategy: unsupervised

                postgresql:
                parameters:
                max_connections: "300"
                shared_buffers: 512MB
                wal_compression: "on"
                log_min_duration_statement: "500"

                bootstrap:
                initdb:
                database: payments
                owner: payments_app
                secret:
                name: pg-payments-app-secret

                storage:
                size: 50Gi
                storageClass: db-fast-retain

                resources:
                requests:
                cpu: "1"
                memory: 2Gi
                limits:
                cpu: "2"
                memory: 4Gi

                monitoring:
                enablePodMonitor: true

Secret applicatif

pg-secret.yaml
apiVersion: v1
                kind: Secret
                metadata:
                name: pg-payments-app-secret
                namespace: db-postgres
                type: kubernetes.io/basic-auth
                stringData:
                username: payments_app
                password: change-me-in-vault

ScheduledBackup CNPG

postgres-scheduled-backup.yaml
apiVersion: postgresql.cnpg.io/v1
                kind: ScheduledBackup
                metadata:
                name: pg-payments-nightly
                namespace: db-postgres
                spec:
                schedule: "0 0 2 * * *"
                backupOwnerReference: self
                cluster:
                name: pg-payments
                method: barmanObjectStore
Note version : CNPG a historiquement supportĂ© Barman object store dans le manifeste du cluster. Les versions rĂ©centes introduisent le plugin Barman Cloud. En entretien, il faut dire : “je vĂ©rifie la matrice operator/version/plugin avant d’écrire le manifeste final”.

Tests indispensables

TestCommande / actionValidation attendue
État clusterkubectl get cluster -n db-postgres3 instances, primary identifiĂ©.
FailoverSupprimer le pod primary.Nouveau primary élu, service rw toujours disponible.
BackupCréer un Backup ou attendre ScheduledBackup.Backup présent dans object storage.
PITRRestaurer Ă  un timestamp prĂ©cis.DonnĂ©es restaurĂ©es avant l’erreur simulĂ©e.
Upgrade mineurChanger image PostgreSQL patch/minor compatible.Rolling update sans perte de service majeure.

Runbook express : perte du primary

  1. Identifier le primary courant avec kubectl get pods -n db-postgres -L role.
  2. Supprimer le pod primary pour simuler une panne.
  3. Observer les events du cluster CNPG.
  4. Valider que le service read-write pointe vers le nouveau primary.
  5. Mesurer le dĂ©lai d’indisponibilitĂ© applicative.
  6. Vérifier la réplication des anciennes replicas.
cnpg-failover-test.sh
#!/usr/bin/env bash
                set -euo pipefail

                kubectl get pods -n db-postgres
                kubectl get cluster pg-payments -n db-postgres

                PRIMARY_POD=$(kubectl get pods -n db-postgres -l cnpg.io/cluster=pg-payments,role=primary -o jsonpath='{.items[0].metadata.name}')
                echo "Primary pod: ${PRIMARY_POD}"

                kubectl delete pod "${PRIMARY_POD}" -n db-postgres
                kubectl wait --for=condition=Ready cluster/pg-payments -n db-postgres --timeout=300s
                kubectl get pods -n db-postgres
RĂ©ponse entretien : “Pour PostgreSQL, je considĂšre qu’un backup n’existe pas tant que je n’ai pas testĂ© une restauration complĂšte et, si possible, un PITR sur un cluster sĂ©parĂ©.”

6. Elasticsearch / OpenSearch — ECK, index lifecycle et snapshots

La fiche mĂ©lange “Elasticsearch / OpenSearch via ECK”. Il faut ĂȘtre prĂ©cis : ECK est l’opĂ©rateur Elastic pour Elasticsearch et son Ă©cosystĂšme. OpenSearch a son propre opĂ©rateur ou ses propres charts. Cette nuance est importante en entretien car elle montre que tu ne confonds pas les deux distributions.

Elasticsearch avec ECK

NodeSets, PVC, Kibana, TLS, snapshots, SLM, ILM, rolling upgrades.

OpenSearch avec OpenSearch Operator

Node pools, ISM, snapshots, Dashboards, security plugin, rolling operations.

Manifeste ECK multi-node

elasticsearch-eck.yaml
apiVersion: elasticsearch.k8s.elastic.co/v1
                kind: Elasticsearch
                metadata:
                name: es-logs
                namespace: db-search
                spec:
                version: 8.15.0
                nodeSets:
                - name: masters
                count: 3
                config:
                node.roles: ["master"]
                volumeClaimTemplates:
                - metadata:
                name: elasticsearch-data
                spec:
                accessModes: ["ReadWriteOnce"]
                storageClassName: db-fast-retain
                resources:
                requests:
                storage: 20Gi
                - name: data-hot
                count: 3
                config:
                node.roles: ["data_hot", "data_content", "ingest"]
                volumeClaimTemplates:
                - metadata:
                name: elasticsearch-data
                spec:
                accessModes: ["ReadWriteOnce"]
                storageClassName: db-fast-retain
                resources:
                requests:
                storage: 100Gi
                http:
                tls:
                selfSignedCertificate:
                disabled: false

ILM policy exemple

ilm-policy.json
{
                "policy": {
                "phases": {
                "hot": {
                "actions": {
                "rollover": {
                "max_age": "7d",
                "max_primary_shard_size": "40gb"
                }
                }
                },
                "warm": {
                "min_age": "14d",
                "actions": {
                "forcemerge": { "max_num_segments": 1 }
                }
                },
                "delete": {
                "min_age": "90d",
                "actions": { "delete": {} }
                }
                }
                }
                }

Snapshot repository S3/MinIO

snapshot-repository.json
{
                "type": "s3",
                "settings": {
                "bucket": "es-snapshots",
                "client": "default",
                "base_path": "production/es-logs",
                "compress": true
                }
                }

OpenSearch — ISM policy exemple

opensearch-ism-policy.json
{
                "policy": {
                "description": "Hot to delete lifecycle for logs",
                "default_state": "hot",
                "states": [
                {
                "name": "hot",
                "actions": [
                { "rollover": { "min_index_age": "7d", "min_size": "40gb" } }
                ],
                "transitions": [
                { "state_name": "delete", "conditions": { "min_index_age": "90d" } }
                ]
                },
                {
                "name": "delete",
                "actions": [ { "delete": {} } ],
                "transitions": []
                }
                ]
                }
                }

Diagnostics essentiels

SignalDiagnosticAction DBA/SRE
Cluster redShards primaires indisponibles.Identifier index, node, allocation explain, restore si nécessaire.
Cluster yellowReplicas non allouées.Vérifier capacité, anti-affinity, disk watermarks.
Heap JVM Ă©levĂ©ePression mĂ©moire ou requĂȘtes coĂ»teuses.VĂ©rifier queries, shards, mappings, fielddata.
Disk watermarkDisques trop pleins.Rollover, suppression, ajout capacité, relocation.
Snapshot failedRisque PRA immédiat.Corriger repository, droits, réseau, espace, relancer test restore.
Question entretien possible : “Pourquoi trop de shards est dangereux ?” RĂ©ponse : surcharge cluster state, heap, allocation, recovery plus lente, overhead fichier et latence. Le design d’index est une dĂ©cision d’architecture.

7. MariaDB — opĂ©rateur, Helm, Galera et PVC

MariaDB dans Kubernetes peut ĂȘtre dĂ©ployĂ© via opĂ©rateur ou via Helm. Le point le plus important est la comprĂ©hension du stockage persistant, du quorum Galera, des synchronisations SST/IST, des backups et du risque multi-primary.

Topologies MariaDB

TopologieUsageRisque principal
Single primary + replicasLecture scalable, modÚle classique.Failover et réplication à superviser.
Galera 3 nƓudsHA synchrone multi-primary.Quorum, conflits d’écriture, latence rĂ©seau.
Galera + MaxScaleRoutage, read/write split, HA plus propre.Composant supplémentaire à exploiter.
Helm chart simpleLab ou environnement non critique.Moins de logique opérateur.

Valeurs Helm Galera simplifiées

values-mariadb-galera.yaml
replicaCount: 3

                rootUser:
                password: change-me-in-vault

                persistence:
                enabled: true
                storageClass: db-fast-retain
                size: 50Gi

                resources:
                requests:
                cpu: 1000m
                memory: 2Gi
                limits:
                cpu: 2000m
                memory: 4Gi

                podAntiAffinityPreset: hard

                mariadbConfiguration: |
                [mysqld]
                innodb_buffer_pool_size=1G
                max_connections=300
                slow_query_log=1
                long_query_time=1
                wsrep_provider_options="gcache.size=2G"

ContrĂŽles Galera Ă  connaĂźtre

galera-checks.sql
SHOW STATUS LIKE 'wsrep_cluster_size';
                SHOW STATUS LIKE 'wsrep_cluster_status';
                SHOW STATUS LIKE 'wsrep_local_state_comment';
                SHOW STATUS LIKE 'wsrep_ready';
                SHOW STATUS LIKE 'wsrep_connected';
                SHOW STATUS LIKE 'wsrep_flow_control_paused';

Lecture opérationnelle

VariableValeur saineInterprétation
wsrep_cluster_size3Les 3 nƓuds sont membres du cluster.
wsrep_cluster_statusPrimaryLe cluster a le quorum.
wsrep_readyONLe nƓud accepte les requĂȘtes.
wsrep_local_state_commentSyncedLe nƓud est synchronisĂ©.
wsrep_flow_control_pausedBasUn niveau élevé signale une pression cluster.

Plan de test MariaDB

  1. DĂ©ployer le cluster 3 nƓuds.
  2. Créer une base et une table de test.
  3. Écrire sur le point d’entrĂ©e applicatif.
  4. Supprimer un pod MariaDB.
  5. Vérifier le retour à wsrep_cluster_size = 3.
  6. Provoquer un backup logique ou physique.
  7. Restaurer dans un namespace séparé.
Important : Galera permet le multi-primary, mais ce n’est pas une invitation Ă  Ă©crire n’importe oĂč. Beaucoup d’architectures gardent un writer contrĂŽlĂ© pour limiter les conflits et simplifier l’exploitation.

8. MongoDB — replica sets, sharding, secrets et opĂ©rateurs

MongoDB dans Kubernetes est généralement piloté via un opérateur. Il faut connaßtre les différences entre Community, Enterprise et Percona Operator, car les fonctions de backup, Ops Manager, monitoring ou sharding varient selon le choix.

Choix opérateur

OptionUsageÀ vĂ©rifier
MongoDB Community OperatorReplica sets Community.Fonctions avancées backup/ops limitées.
MongoDB Enterprise OperatorEntreprise, Ops Manager, Cloud Manager.Licences, backup, TLS, sharding.
Percona Operator for MongoDBAlternative open source orientée production.Compatibilité version, backup, PITR.

Architecture replica set

Application
Connection string replica set
→
Primary
Writes + oplog
↔
Secondary 1
Replication + reads optional
↔
Secondary 2
Election candidate

Exemple conceptuel MongoDBCommunity

mongodb-replicaset.yaml
apiVersion: mongodbcommunity.mongodb.com/v1
                kind: MongoDBCommunity
                metadata:
                name: customer360
                namespace: db-mongodb
                spec:
                members: 3
                type: ReplicaSet
                version: "7.0.0"
                security:
                authentication:
                modes: ["SCRAM"]
                users:
                - name: app_user
                db: admin
                passwordSecretRef:
                name: customer360-app-password
                roles:
                - name: readWrite
                db: customer360
                scramCredentialsSecretName: customer360-app-scram
                statefulSet:
                spec:
                volumeClaimTemplates:
                - metadata:
                name: data-volume
                spec:
                accessModes: ["ReadWriteOnce"]
                storageClassName: db-fast-retain
                resources:
                requests:
                storage: 50Gi

Sharding — composants à expliquer

ComposantRîlePoint d’attention
Shard replica setStocke une partie des donnĂ©es.Chaque shard doit ĂȘtre HA.
Config serversStockent la metadata du cluster sharded.Critiques, doivent ĂȘtre replica set.
mongosRouteur de requĂȘtes.Point d’entrĂ©e applicatif scalable.
Shard keyDétermine la distribution.Mauvais choix = hotspot ou déséquilibre.
BalancerDéplace les chunks.Surveiller impact performance.

Commandes MongoDB utiles

mongodb-checks.js
rs.status()
                rs.printReplicationInfo()
                rs.printSecondaryReplicationInfo()
                db.adminCommand({ replSetGetStatus: 1 })
                db.serverStatus().connections
                db.serverStatus().wiredTiger.cache
                sh.status()
                db.adminCommand({ balancerStatus: 1 })

Plan de test MongoDB

  1. Déployer un replica set 3 membres.
  2. Créer un user applicatif via Secret.
  3. Tester l’élection en supprimant le primary.
  4. ContrÎler la réplication et le retard secondaire.
  5. Activer TLS si l’opĂ©rateur et l’environnement le permettent.
  6. Tester backup et restore dans un namespace séparé.
  7. Déployer un sharded cluster en lab si la fiche insiste sur le sharding.
Question entretien possible : “Quel est le risque d’une mauvaise shard key ?” RĂ©ponse : mauvaise distribution, hotspot d’écriture, chunks dĂ©sĂ©quilibrĂ©s, migrations coĂ»teuses et performance imprĂ©visible.

9. SĂ©curitĂ© des donnĂ©es — secrets, Vault, TLS, chiffrement

La sécurité est transverse : secrets Kubernetes, Vault, External Secrets, TLS client/serveur, chiffrement au repos, chiffrement en transit, RBAC, NetworkPolicy, audit logs et rotation des credentials.

Les 4 couches de sécurité

CoucheObjectifExemples
Kubernetes APIProtéger les Secrets et les actions API.RBAC, audit, encryption config, least privilege.
StorageChiffrer les volumes et snapshots.StorageClass encrypted, KMS, CSI cloud.
DatabaseContrĂŽler utilisateurs, rĂŽles, audit et TLS.pg_hba, roles, SCRAM, x509, audit logs.
NetworkLimiter les flux clients et inter-nƓuds.NetworkPolicy, mTLS, namespace isolation.

ExternalSecret avec Vault

external-secret-postgres.yaml
apiVersion: external-secrets.io/v1beta1
                kind: SecretStore
                metadata:
                name: vault-db-store
                namespace: db-postgres
                spec:
                provider:
                vault:
                server: https://vault.security.svc:8200
                path: secret
                version: v2
                auth:
                kubernetes:
                mountPath: kubernetes
                role: db-postgres-reader
                serviceAccountRef:
                name: external-secrets
                ---
                apiVersion: external-secrets.io/v1beta1
                kind: ExternalSecret
                metadata:
                name: pg-payments-app-secret
                namespace: db-postgres
                spec:
                refreshInterval: 1h
                secretStoreRef:
                name: vault-db-store
                kind: SecretStore
                target:
                name: pg-payments-app-secret
                creationPolicy: Owner
                data:
                - secretKey: username
                remoteRef:
                key: postgres/payments/app
                property: username
                - secretKey: password
                remoteRef:
                key: postgres/payments/app
                property: password

NetworkPolicy restrictive

networkpolicy-postgres.yaml
apiVersion: networking.k8s.io/v1
                kind: NetworkPolicy
                metadata:
                name: allow-app-to-postgres
                namespace: db-postgres
                spec:
                podSelector:
                matchLabels:
                cnpg.io/cluster: pg-payments
                policyTypes:
                - Ingress
                ingress:
                - from:
                - namespaceSelector:
                matchLabels:
                platform.ideo-lab.com/domain: application
                ports:
                - protocol: TCP
                port: 5432

Checklist sécurité

  • Activer le chiffrement des Secrets au niveau API server/etcd.
  • Utiliser Vault, External Secrets ou Secret Store CSI Driver pour les secrets sensibles.
  • Limiter les droits get/list/watch secrets aux seuls composants nĂ©cessaires.
  • Chiffrer les volumes via StorageClass ou fournisseur cloud.
  • Activer TLS cĂŽtĂ© client et, si possible, entre nƓuds du cluster DB.
  • Utiliser NetworkPolicy pour limiter les flux aux namespaces applicatifs autorisĂ©s.
  • PrĂ©parer une procĂ©dure de rotation credentials et certificats.
  • Ne jamais afficher de mot de passe dans Git, logs, Helm values ou dashboards.
Erreur classique : croire qu’un Kubernetes Secret est automatiquement chiffrĂ© de bout en bout. Il faut vĂ©rifier l’encryption at rest, les droits RBAC, les logs applicatifs et la maniĂšre dont le secret est montĂ© dans le pod.

10. ObservabilitĂ© — mĂ©triques, logs, alertes et dashboards

L’observabilitĂ© d’une plateforme DBA Kubernetes doit couvrir Ă  la fois Kubernetes, les opĂ©rateurs, le stockage, les moteurs de base, les backups et les restaurations. Une base “verte” cĂŽtĂ© pod peut ĂȘtre dĂ©gradĂ©e cĂŽtĂ© moteur.

Stack recommandée

Prometheus

Collecte métriques Kubernetes, DB, opérateurs et storage.

Grafana

Dashboards DBA : lag, WAL, heap, disque, connexions, backups.

Alertmanager

Routage alertes vers mail, Slack, Teams, PagerDuty.

Loki / OpenSearch

Logs opérateurs, pods DB, events Kubernetes et traces incident.

Exporters

postgres-exporter, mysqld-exporter, mongodb-exporter, elastic metrics.

Dashboards opérateurs

CNPG, ECK, MongoDB, MariaDB, CSI driver, object storage.

Alertes prioritaires par moteur

MoteurAlertes critiquesPourquoi
PostgreSQLPrimary down, replica lag, WAL archive failed, backup failed, disk > 80%.Risque HA, perte RPO, saturation WAL.
Elasticsearch/OpenSearchCluster red, unassigned shards, disk watermark, heap > 75%, snapshot failed.Risque perte index, indisponibilité recherche.
MariaDB/GaleraCluster size incorrect, wsrep not primary, SST long, slow queries, backup failed.Risque quorum et cohérence.
MongoDBNo primary, replication lag, oplog window small, cache pressure, backup failed.Risque indisponibilité et perte capacité PITR.
KubernetesPVC nearly full, pod crashloop, node pressure, CSI errors, quota exceeded.Risque plateforme sous-jacent.

PrometheusRule PostgreSQL exemple

postgres-alerts.yaml
apiVersion: monitoring.coreos.com/v1
                kind: PrometheusRule
                metadata:
                name: postgres-critical-alerts
                namespace: observability
                spec:
                groups:
                - name: postgres.rules
                rules:
                - alert: PostgresReplicationLagHigh
                expr: cnpg_pg_replication_lag_seconds > 60
                for: 5m
                labels:
                severity: warning
                annotations:
                summary: PostgreSQL replication lag is high
                description: Replica lag is above 60 seconds for more than 5 minutes.
                - alert: PostgresBackupFailed
                expr: cnpg_collector_last_available_backup_timestamp == 0
                for: 10m
                labels:
                severity: critical
                annotations:
                summary: PostgreSQL backup is not available
                description: No valid backup timestamp was reported by the cluster.

Dashboard minimal DBA

PanneauMesureDécision possible
DisponibilitéPods ready, primary, replicas, cluster health.Incident ou dégradation.
StockagePVC usage, IOPS, latency, disk pressure.Extension volume ou purge.
BackupDernier backup, durée, taille, erreurs.Blocage release si backup absent.
PerformanceConnexions, requĂȘtes lentes, heap/cache, locks.Tuning ou investigation applicative.
RéplicationLag, oplog, WAL, cluster size.Risque RPO ou failover.
Bonne pratique : associer chaque alerte critique à un runbook. Une alerte sans procédure crée du bruit, pas de la résilience.

11. Runbooks — procĂ©dures d’exploitation Ă  prĂ©parer

Les runbooks sont une preuve de maturité. Ils montrent que tu ne te contentes pas de déployer des bases, mais que tu sais les opérer, diagnostiquer, restaurer et sécuriser sous pression.

Structure standard d’un runbook

runbook-template.md
# Runbook title

                ## Scope
                Database engine, namespace, environment, owner.

                ## Symptoms
                Observable signals, alerts, logs, metrics.

                ## Impact
                Application impact, data risk, RPO/RTO risk.

                ## Immediate checks
                Commands and dashboards to open first.

                ## Decision matrix
                Go/no-go conditions and escalation path.

                ## Procedure
                Step-by-step remediation.

                ## Rollback
                How to return to the previous safe state.

                ## Validation
                Technical and business checks.

                ## Post-incident
                Evidence, timeline, root cause and preventive actions.

Runbooks minimum à écrire

RunbookObjectifTest associé
PostgreSQL failoverPerte primary CNPG.Suppression pod primary.
PostgreSQL PITRRestauration à un timestamp précis.Créer erreur, restaurer avant erreur.
Elasticsearch snapshot restoreRestaurer un index supprimé.Delete index puis restore snapshot.
MariaDB Galera recoveryRĂ©cupĂ©rer quorum ou nƓud dĂ©synchronisĂ©.Perte d’un pod, resync IST/SST.
MongoDB electionGérer perte du primary.Suppression primary et validation election.
PVC fullSaturation disque DB.Remplissage contrÎlé en lab.
Secret rotationRotation mot de passe/certificat.Changer secret et valider app.
Operator upgradeUpgrade opérateur sans rupture.Staging puis production.

Exemple : runbook PVC presque plein

  1. Identifier le PVC, le pod et le moteur impacté.
  2. VĂ©rifier si la StorageClass autorise l’expansion.
  3. VĂ©rifier si le moteur supporte l’extension Ă  chaud.
  4. ContrÎler la cause : WAL, index, snapshots internes, logs, données applicatives.
  5. Étendre le PVC ou purger selon procĂ©dure moteur.
  6. Valider métriques aprÚs action.
  7. Créer une action préventive : seuil alerting, lifecycle, purge, capacité.
expand-pvc.yaml
apiVersion: v1
                kind: PersistentVolumeClaim
                metadata:
                name: pg-payments-1
                namespace: db-postgres
                spec:
                resources:
                requests:
                storage: 100Gi
RĂšgle : un runbook de restauration doit ĂȘtre testĂ© avant l’incident. Le jour de la panne, on exĂ©cute une procĂ©dure validĂ©e, on n’improvise pas une stratĂ©gie de rĂ©cupĂ©ration.

12. MontĂ©es de version — moteurs, opĂ©rateurs, CRD et Kubernetes

Les upgrades sont un sujet central. Il faut sĂ©parer l’upgrade de l’opĂ©rateur, des CRD, du moteur de base, des images conteneur, du chart Helm, du CSI driver et du cluster Kubernetes lui-mĂȘme.

Ce qu’il ne faut jamais mĂ©langer

ÉlĂ©mentExempleRisque
OperatorCNPG 1.x, ECK 2.x.Changement de logique de réconciliation.
CRDNouvelle version d’API custom resource.IncompatibilitĂ© manifest existant.
Moteur DBPostgreSQL 16.x, ES 8.x, MongoDB 7.x.Migration de format, compatibilité client.
Chart HelmTemplates et values.Ressources renommées ou options supprimées.
Storage/CSIDriver volume, snapshot controller.Impact PVC/snapshot/restore.
Kubernetes1.29 vers 1.30, etc.Compatibilité API, PodSecurity, scheduler.

ProcĂ©dure d’upgrade saine

  1. Lire release notes opérateur, moteur, chart et Kubernetes.
  2. Vérifier matrice de compatibilité.
  3. Valider que les backups récents sont restaurables.
  4. Rejouer l’upgrade en lab puis staging.
  5. Upgrader l’opĂ©rateur seul.
  6. Observer la réconciliation sans changement moteur.
  7. Upgrader le moteur en suivant la procédure officielle.
  8. ContrÎler métriques, logs, performances, backup post-upgrade.
  9. Documenter rollback et points de non-retour.

Matrice go / no-go

ConditionGoNo-go
BackupDernier backup validé et restore testé.Backup absent ou restore jamais testé.
CompatibilitéMatrice confirmée.Version opérateur/moteur incertaine.
StagingUpgrade rejoué avec succÚs.Pas de staging iso-prod.
MonitoringDashboards et alertes actifs.Pas de visibilité pendant opération.
RollbackPlan écrit et validé.Rollback impossible ou non compris.

Exemple de checklist release

upgrade-checklist.md
# Upgrade checklist

                - [ ] Target operator version identified
                - [ ] Target engine version identified
                - [ ] CRD changes reviewed
                - [ ] Backup completed
                - [ ] Restore test completed
                - [ ] Staging upgrade completed
                - [ ] Application smoke tests completed
                - [ ] Metrics baseline captured
                - [ ] Rollback procedure reviewed
                - [ ] Change window approved
                - [ ] Post-upgrade backup scheduled
Phrase entretien : “Je n’upgrade jamais opĂ©rateur, CRD, moteur et Kubernetes dans la mĂȘme fenĂȘtre. Je dĂ©coupe, je teste, je mesure, puis je documente le rollback.”

13. Questions Ă  poser au recruteur ou au client

Ces questions montrent une comprĂ©hension production. Elles permettent aussi d’identifier si le poste est plutĂŽt DBA, SRE, Platform Engineer, DevOps ou un mĂ©lange des quatre.

Questions infrastructure

QuestionPourquoi la poser
Kubernetes est-il on-prem, EKS, AKS, GKE ou OpenShift ?Impact storage, IAM, réseau, upgrades, sécurité.
Quel CSI driver et quelles StorageClasses sont utilisés ?Détermine performance, snapshots, expansion, chiffrement.
Les VolumeSnapshots sont-ils supportés et testés ?Crucial pour PRA et clones rapides.
Les bases sont-elles multi-AZ ou mono-cluster ?Impact HA réel et tolérance panne zone.
Existe-t-il un staging iso-prod ?Indispensable pour upgrades et restore tests.

Questions DBA/PRA

QuestionLecture attendue
Quels sont les RPO/RTO par moteur ?Sans RPO/RTO, la stratégie backup est floue.
Les restores sont-ils testĂ©s rĂ©guliĂšrement ?Un backup non restaurĂ© n’est pas une garantie.
Qui est owner des index Elasticsearch/OpenSearch ?DBA, dev, data, plateforme ou équipe logs.
MongoDB utilise-t-il Community, Enterprise ou Percona ?Change la stratégie backup/opérateur.
MariaDB est-il Galera, primary/replica ou MaxScale ?Change complùtement le modùle d’exploitation.

Questions sécurité/GitOps

QuestionPourquoi
GitOps est-il ArgoCD ou Flux ?Différence de modÚle, Helm, sync, drift.
Qui peut merger les manifests database ?Gouvernance des changements production.
Vault, External Secrets ou K8s Secrets simples ?Risque sécurité et rotation.
Les volumes sont-ils chiffrés par défaut ?Compliance et données sensibles.
Les accĂšs DBA sont-ils namespace-only ou cluster-wide ?ResponsabilitĂ© et limites d’intervention.
Question trĂšs utile : “Quelle est la derniĂšre restauration rĂ©ellement testĂ©e en staging ou production-like ?” Cette question montre immĂ©diatement une maturitĂ© PRA.

14. Priorités de préparation

Pour ĂȘtre prĂȘt rapidement, il faut prioriser. Tu n’as pas besoin de maĂźtriser tout au mĂȘme niveau dĂšs le premier jour. En revanche, tu dois ĂȘtre solide sur le socle Kubernetes stateful, PostgreSQL/CNPG, GitOps, sĂ©curitĂ© et restauration.

Plan 10 jours de préparation intensive

JourObjectifLivrable
1Installer lab Kubernetes + namespaces + storage.Cluster prĂȘt, StorageClass, quotas.
2Installer ArgoCD ou Flux.Repo GitOps synchronisé.
3Installer CNPG et PostgreSQL 3 nƓuds.Cluster Postgres fonctionnel.
4Backups CNPG vers MinIO et restore.Runbook backup/restore.
5Failover CNPG et PITR.Preuves de tests et logs.
6ECK Elasticsearch + ILM + snapshots.Cluster search + restore index.
7MariaDB/Galera.ContrĂŽles wsrep + test perte pod.
8MongoDB replica set.Élection primary + secrets.
9Sécurité : Vault/External Secrets/TLS/RBAC.Manifests sécurité.
10ObservabilitĂ© + runbooks + simulation entretien.Dashboards et rĂ©ponses prĂȘtes.

Compétences à classer

Priorité absolue

StatefulSet, PVC, StorageClass, CNPG, backup/restore, RBAC, GitOps.

Priorité forte

ECK, ILM, snapshots, MariaDB Galera, MongoDB replica set, Prometheus.

Priorité complémentaire

Sharding MongoDB, OpenSearch Operator avancé, Vault avancé, multi-cluster.

Tableau de maturité personnelle

DomaineNiveau attenduPreuve concrĂšte
Kubernetes storageTrÚs bonCréer PVC, StorageClass, snapshot, extension volume.
CNPGTrĂšs bonFailover, backup, restore, PITR.
GitOpsBonArgoCD/Flux synchronise un cluster DB.
Elasticsearch/OpenSearchBonCluster health, ILM/ISM, snapshot restore.
MariaDBIntermédiaire+Galera status, quorum, backup/restore.
MongoDBIntermédiaire+Replica set, election, lag, secrets.
SécuritéBonVault/ExternalSecret, RBAC, NetworkPolicy, TLS.
Stratégie réaliste : sois trÚs fort sur PostgreSQL/CNPG et Kubernetes stateful. Pour MariaDB/MongoDB/Search, montre une compréhension opérationnelle solide et une capacité à lire la documentation opérateur/version.

15. PrĂ©paration entretien — discours, questions et rĂ©ponses

L’objectif en entretien est de montrer que tu as une vision production, pas seulement une connaissance des commandes. Il faut parler risque, RPO/RTO, restore, sĂ©curitĂ©, storage, GitOps et procĂ©dures.

Pitch de 60 secondes

interview-pitch.txt
Je vois ce poste comme une fonction DBA Platform. Mon rĂŽle n'est pas seulement
                installer un moteur de base de données, mais garantir son cycle de vie complet
                dans Kubernetes : provisioning déclaratif, stockage persistant, haute disponibilité,
                backup, restauration testée, sécurité, observabilité, GitOps et upgrades contrÎlés.

                Je sépare toujours les sujets : opérateur, CRD, moteur, storage, secrets et cluster
                Kubernetes. Et je considĂšre qu'un backup n'existe pas tant qu'une restauration n'a
                pas été testée dans un environnement séparé.

Questions classiques et réponses

QuestionRéponse courte attendue
Pourquoi utiliser un opérateur DB ?Pour automatiser le cycle de vie : provisioning, failover, backup, upgrade, monitoring et réconciliation.
Pourquoi un StatefulSet ?Identité stable des pods et association durable pod/PVC.
Différence PVC et backup ?Un PVC stocke les données courantes ; un backup est une copie récupérable, idéalement testée et indépendante.
Que fais-tu avant un upgrade ?Release notes, compatibilité, backup, restore staging, plan rollback, monitoring.
Comment sécuriser les secrets ?RBAC strict, encryption at rest, Vault/External Secrets, rotation, pas de secrets en Git.
Comment valider un PRA ?Restaurer dans un environnement séparé, mesurer RTO/RPO et documenter la procédure.
ECK pour OpenSearch ?ECK est pour Elastic Stack ; OpenSearch utilise plutÎt OpenSearch Operator ou Helm dédié.

Exemples de réponses fortes

Sur les backups

“Je distingue snapshot volume, backup physique, backup logique et PITR. Le choix dĂ©pend du RPO/RTO et du moteur.”

Sur GitOps

“Git est la source de vĂ©ritĂ©. En production, je limite les modifications manuelles et je rĂ©concilie toute correction d’urgence.”

Sur le stockage

“Je vĂ©rifie StorageClass, reclaimPolicy, expansion, snapshots, encryption, latency et IOPS avant de parler production.”

Sur les upgrades

“Je n’upgrade jamais tout en mĂȘme temps. Je dĂ©coupe opĂ©rateur, CRD, moteur, storage et Kubernetes.”

Posture : parle comme quelqu’un qui protĂšge la donnĂ©e. Le recruteur doit sentir que tu penses incident, rollback, preuve, restauration et responsabilitĂ© production.

16. Synthùse — plateforme cible et livrables

La préparation idéale consiste à construire une mini plateforme DBA Kubernetes Native, documentée, testée et présentable. Elle doit prouver que tu sais déployer, sauvegarder, restaurer, sécuriser, surveiller et upgrader des bases dans Kubernetes.

Plateforme cible

BlocLivrableStatut attendu
KubernetesNamespaces, RBAC, quotas, StorageClasses, snapshots.Obligatoire
GitOpsRepo ArgoCD ou Flux synchronisé.Obligatoire
PostgreSQLCNPG 3 instances + backup + restore + failover.Obligatoire
SearchECK Elasticsearch + ILM + snapshot restore.Fortement conseillé
OpenSearchNuance opĂ©rateur OpenSearch + ISM.À savoir expliquer
MariaDBGalera 3 nƓuds + contrĂŽles wsrep.ConseillĂ©
MongoDBReplica set + election + secrets.Conseillé
SécuritéVault/External Secrets, TLS, RBAC, NetworkPolicy.Obligatoire
ObservabilitéPrometheus, Grafana, Alertmanager, logs.Obligatoire
RunbooksFailover, restore, PITR, upgrade, PVC full.Obligatoire

Checklist finale avant entretien

  • Je sais expliquer la diffĂ©rence entre opĂ©rateur, CRD, StatefulSet, PVC et StorageClass.
  • Je sais dĂ©ployer un cluster PostgreSQL CNPG 3 instances.
  • Je sais expliquer failover, switchover, backup physique, WAL et PITR.
  • Je sais expliquer ECK, ILM, snapshot repository et cluster health.
  • Je sais expliquer la nuance entre Elasticsearch/ECK et OpenSearch Operator.
  • Je sais diagnostiquer Galera avec les variables wsrep.
  • Je sais expliquer MongoDB replica set, election, oplog et sharding.
  • Je sais dĂ©fendre une stratĂ©gie de secrets avec Vault/External Secrets.
  • Je sais parler RPO/RTO et restauration testĂ©e.
  • Je sais expliquer pourquoi un upgrade doit ĂȘtre dĂ©coupĂ©.
  • Je dispose de runbooks Ă©crits et de manifests exemples.
Conclusion opérationnelle

Le poste vise un profil DBA capable de travailler avec les Ă©quipes plateforme. Le cƓur de la valeur n’est pas seulement la connaissance des moteurs, mais la capacitĂ© Ă  garantir la donnĂ©e dans un environnement Kubernetes dĂ©claratif, automatisĂ©, sĂ©curisĂ©, observable et restaurable.

DerniĂšre phrase Ă  retenir : “Mon objectif n’est pas de faire tourner des pods de base de donnĂ©es. Mon objectif est de garantir que la donnĂ©e est disponible, cohĂ©rente, sauvegardĂ©e, restaurable, sĂ©curisĂ©e et opĂ©rable.”