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
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.
Carte des responsabilités
| Domaine | Responsabilité attendue | Preuve à préparer |
|---|---|---|
| Provisioning | Dé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. |
| Sauvegarde | Choisir 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. |
| Exploitation | Surveiller 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.
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
| Niveau | Objectif | Stack recommandée | Limite |
|---|---|---|---|
| Local | Apprendre les manifests et opĂ©rateurs. | kind ou k3d, MinIO, ArgoCD, CNPG, ECK, External Secrets. | Storage non reprĂ©sentatif dâune production. |
| VM sĂ©rieux | Tester failover, PVC, snapshots, quotas, anti-affinity. | 1 control-plane, 3 workers, Longhorn/OpenEBS, MinIO, Prometheus. | Demande 32 Ă 48 Go de RAM pour ĂȘtre confortable. |
| Cloud | Se 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
Dimensionnement minimal conseillé
| Composant | Minimum | Confortable | Remarque DBA |
|---|---|---|---|
| Control-plane | 2 vCPU / 4 Go | 2 vCPU / 8 Go | Ăviter dây placer les DB. |
| Workers | 3 x 2 vCPU / 8 Go | 3 x 4 vCPU / 12-16 Go | Anti-affinity et tests de perte de nĆud. |
| Disque | 200 Go SSD | 500 Go SSD | Prévoir snapshots, WAL, index et backups. |
| Object storage | MinIO local | S3 compatible | Indispensable pour backup/restore réaliste. |
Arborescence de travail
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.mdCommandes simples de bootstrap local
#!/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 security3. 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
| Objet | RÎle | Risque si mal configuré |
|---|---|---|
| Namespace | Isolation logique des workloads et politiques. | Mélange prod/dev, RBAC trop large, quotas absents. |
| StatefulSet | IdentitĂ© stable des pods stateful. | Perte dâordre, mauvais rolling update, stockage incohĂ©rent. |
| PVC | Demande de stockage persistant. | Suppression accidentelle, saturation, mauvais IOPS. |
| StorageClass | Type de stockage offert au cluster. | Stockage lent, non chiffré, non snapshotable. |
| RBAC | ContrĂŽle des droits API Kubernetes. | AccĂšs secrets ou suppression PVC par erreur. |
| ResourceQuota | Limite de consommation par namespace. | Un moteur consomme tout le cluster. |
| NetworkPolicy | ContrÎle des flux réseau entre pods. | Base exposée à trop de workloads. |
| VolumeSnapshot | Snapshot CSI dâun volume persistant. | Fausse impression de backup si non testĂ©. |
Namespaces recommandés
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: mongodbQuota namespace database
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
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
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.ioreclaimPolicy: 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
Arborescence GitOps recommandée
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
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=trueExemple Flux HelmRelease
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: CreateReplaceRÚgles GitOps à défendre
| RĂšgle | Pourquoi | Exception possible |
|---|---|---|
| Pas de modification manuelle en production | Ăvite le drift invisible. | Incident critique avec ticket et rĂ©conciliation ensuite. |
| Un changement DB = une pull request | Trace, review, rollback. | Rotation urgente de secret via processus sécurité. |
| Les CRD sont gérées séparément | Un 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. |
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
Manifeste CNPG â cluster 3 instances
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: trueSecret applicatif
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-vaultScheduledBackup CNPG
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: barmanObjectStoreTests indispensables
| Test | Commande / action | Validation attendue |
|---|---|---|
| Ătat cluster | kubectl get cluster -n db-postgres | 3 instances, primary identifiĂ©. |
| Failover | Supprimer le pod primary. | Nouveau primary élu, service rw toujours disponible. |
| Backup | Créer un Backup ou attendre ScheduledBackup. | Backup présent dans object storage. |
| PITR | Restaurer Ă un timestamp prĂ©cis. | DonnĂ©es restaurĂ©es avant lâerreur simulĂ©e. |
| Upgrade mineur | Changer image PostgreSQL patch/minor compatible. | Rolling update sans perte de service majeure. |
Runbook express : perte du primary
- Identifier le primary courant avec
kubectl get pods -n db-postgres -L role. - Supprimer le pod primary pour simuler une panne.
- Observer les events du cluster CNPG.
- Valider que le service read-write pointe vers le nouveau primary.
- Mesurer le dĂ©lai dâindisponibilitĂ© applicative.
- Vérifier la réplication des anciennes replicas.
#!/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-postgres6. 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.
NodeSets, PVC, Kibana, TLS, snapshots, SLM, ILM, rolling upgrades.
Node pools, ISM, snapshots, Dashboards, security plugin, rolling operations.
Manifeste ECK multi-node
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: falseILM policy exemple
{
"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
{
"type": "s3",
"settings": {
"bucket": "es-snapshots",
"client": "default",
"base_path": "production/es-logs",
"compress": true
}
}OpenSearch â ISM policy exemple
{
"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
| Signal | Diagnostic | Action DBA/SRE |
|---|---|---|
| Cluster red | Shards primaires indisponibles. | Identifier index, node, allocation explain, restore si nécessaire. |
| Cluster yellow | Replicas non allouées. | Vérifier capacité, anti-affinity, disk watermarks. |
| Heap JVM Ă©levĂ©e | Pression mĂ©moire ou requĂȘtes coĂ»teuses. | VĂ©rifier queries, shards, mappings, fielddata. |
| Disk watermark | Disques trop pleins. | Rollover, suppression, ajout capacité, relocation. |
| Snapshot failed | Risque PRA immédiat. | Corriger repository, droits, réseau, espace, relancer test restore. |
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
| Topologie | Usage | Risque principal |
|---|---|---|
| Single primary + replicas | Lecture scalable, modÚle classique. | Failover et réplication à superviser. |
| Galera 3 nĆuds | HA synchrone multi-primary. | Quorum, conflits dâĂ©criture, latence rĂ©seau. |
| Galera + MaxScale | Routage, read/write split, HA plus propre. | Composant supplémentaire à exploiter. |
| Helm chart simple | Lab ou environnement non critique. | Moins de logique opérateur. |
Valeurs Helm Galera simplifiées
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
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
| Variable | Valeur saine | Interprétation |
|---|---|---|
wsrep_cluster_size | 3 | Les 3 nĆuds sont membres du cluster. |
wsrep_cluster_status | Primary | Le cluster a le quorum. |
wsrep_ready | ON | Le nĆud accepte les requĂȘtes. |
wsrep_local_state_comment | Synced | Le nĆud est synchronisĂ©. |
wsrep_flow_control_paused | Bas | Un niveau élevé signale une pression cluster. |
Plan de test MariaDB
- DĂ©ployer le cluster 3 nĆuds.
- Créer une base et une table de test.
- Ăcrire sur le point dâentrĂ©e applicatif.
- Supprimer un pod MariaDB.
- VĂ©rifier le retour Ă
wsrep_cluster_size = 3. - Provoquer un backup logique ou physique.
- Restaurer dans un namespace séparé.
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
| Option | Usage | à vérifier |
|---|---|---|
| MongoDB Community Operator | Replica sets Community. | Fonctions avancées backup/ops limitées. |
| MongoDB Enterprise Operator | Entreprise, Ops Manager, Cloud Manager. | Licences, backup, TLS, sharding. |
| Percona Operator for MongoDB | Alternative open source orientée production. | Compatibilité version, backup, PITR. |
Architecture replica set
Exemple conceptuel MongoDBCommunity
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: 50GiSharding â composants Ă expliquer
| Composant | RĂŽle | Point dâattention |
|---|---|---|
| Shard replica set | Stocke une partie des donnĂ©es. | Chaque shard doit ĂȘtre HA. |
| Config servers | Stockent la metadata du cluster sharded. | Critiques, doivent ĂȘtre replica set. |
| mongos | Routeur de requĂȘtes. | Point dâentrĂ©e applicatif scalable. |
| Shard key | Détermine la distribution. | Mauvais choix = hotspot ou déséquilibre. |
| Balancer | Déplace les chunks. | Surveiller impact performance. |
Commandes MongoDB utiles
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
- Déployer un replica set 3 membres.
- Créer un user applicatif via Secret.
- Tester lâĂ©lection en supprimant le primary.
- ContrÎler la réplication et le retard secondaire.
- Activer TLS si lâopĂ©rateur et lâenvironnement le permettent.
- Tester backup et restore dans un namespace séparé.
- Déployer un sharded cluster en lab si la fiche insiste sur le sharding.
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é
| Couche | Objectif | Exemples |
|---|---|---|
| Kubernetes API | Protéger les Secrets et les actions API. | RBAC, audit, encryption config, least privilege. |
| Storage | Chiffrer les volumes et snapshots. | StorageClass encrypted, KMS, CSI cloud. |
| Database | ContrĂŽler utilisateurs, rĂŽles, audit et TLS. | pg_hba, roles, SCRAM, x509, audit logs. |
| Network | Limiter les flux clients et inter-nĆuds. | NetworkPolicy, mTLS, namespace isolation. |
ExternalSecret avec Vault
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: passwordNetworkPolicy restrictive
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: 5432Checklist 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 secretsaux 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.
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
Collecte métriques Kubernetes, DB, opérateurs et storage.
Dashboards DBA : lag, WAL, heap, disque, connexions, backups.
Routage alertes vers mail, Slack, Teams, PagerDuty.
Logs opérateurs, pods DB, events Kubernetes et traces incident.
postgres-exporter, mysqld-exporter, mongodb-exporter, elastic metrics.
CNPG, ECK, MongoDB, MariaDB, CSI driver, object storage.
Alertes prioritaires par moteur
| Moteur | Alertes critiques | Pourquoi |
|---|---|---|
| PostgreSQL | Primary down, replica lag, WAL archive failed, backup failed, disk > 80%. | Risque HA, perte RPO, saturation WAL. |
| Elasticsearch/OpenSearch | Cluster red, unassigned shards, disk watermark, heap > 75%, snapshot failed. | Risque perte index, indisponibilité recherche. |
| MariaDB/Galera | Cluster size incorrect, wsrep not primary, SST long, slow queries, backup failed. | Risque quorum et cohérence. |
| MongoDB | No primary, replication lag, oplog window small, cache pressure, backup failed. | Risque indisponibilité et perte capacité PITR. |
| Kubernetes | PVC nearly full, pod crashloop, node pressure, CSI errors, quota exceeded. | Risque plateforme sous-jacent. |
PrometheusRule PostgreSQL exemple
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
| Panneau | Mesure | Décision possible |
|---|---|---|
| Disponibilité | Pods ready, primary, replicas, cluster health. | Incident ou dégradation. |
| Stockage | PVC usage, IOPS, latency, disk pressure. | Extension volume ou purge. |
| Backup | Dernier backup, durée, taille, erreurs. | Blocage release si backup absent. |
| Performance | Connexions, requĂȘtes lentes, heap/cache, locks. | Tuning ou investigation applicative. |
| Réplication | Lag, oplog, WAL, cluster size. | Risque RPO ou failover. |
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 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
| Runbook | Objectif | Test associé |
|---|---|---|
| PostgreSQL failover | Perte primary CNPG. | Suppression pod primary. |
| PostgreSQL PITR | Restauration à un timestamp précis. | Créer erreur, restaurer avant erreur. |
| Elasticsearch snapshot restore | Restaurer un index supprimé. | Delete index puis restore snapshot. |
| MariaDB Galera recovery | RĂ©cupĂ©rer quorum ou nĆud dĂ©synchronisĂ©. | Perte dâun pod, resync IST/SST. |
| MongoDB election | Gérer perte du primary. | Suppression primary et validation election. |
| PVC full | Saturation disque DB. | Remplissage contrÎlé en lab. |
| Secret rotation | Rotation mot de passe/certificat. | Changer secret et valider app. |
| Operator upgrade | Upgrade opérateur sans rupture. | Staging puis production. |
Exemple : runbook PVC presque plein
- Identifier le PVC, le pod et le moteur impacté.
- VĂ©rifier si la StorageClass autorise lâexpansion.
- VĂ©rifier si le moteur supporte lâextension Ă chaud.
- ContrÎler la cause : WAL, index, snapshots internes, logs, données applicatives.
- Ătendre le PVC ou purger selon procĂ©dure moteur.
- Valider métriques aprÚs action.
- Créer une action préventive : seuil alerting, lifecycle, purge, capacité.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pg-payments-1
namespace: db-postgres
spec:
resources:
requests:
storage: 100Gi12. 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Ă©ment | Exemple | Risque |
|---|---|---|
| Operator | CNPG 1.x, ECK 2.x. | Changement de logique de réconciliation. |
| CRD | Nouvelle version dâAPI custom resource. | IncompatibilitĂ© manifest existant. |
| Moteur DB | PostgreSQL 16.x, ES 8.x, MongoDB 7.x. | Migration de format, compatibilité client. |
| Chart Helm | Templates et values. | Ressources renommées ou options supprimées. |
| Storage/CSI | Driver volume, snapshot controller. | Impact PVC/snapshot/restore. |
| Kubernetes | 1.29 vers 1.30, etc. | Compatibilité API, PodSecurity, scheduler. |
ProcĂ©dure dâupgrade saine
- Lire release notes opérateur, moteur, chart et Kubernetes.
- Vérifier matrice de compatibilité.
- Valider que les backups récents sont restaurables.
- Rejouer lâupgrade en lab puis staging.
- Upgrader lâopĂ©rateur seul.
- Observer la réconciliation sans changement moteur.
- Upgrader le moteur en suivant la procédure officielle.
- ContrÎler métriques, logs, performances, backup post-upgrade.
- Documenter rollback et points de non-retour.
Matrice go / no-go
| Condition | Go | No-go |
|---|---|---|
| Backup | Dernier backup validé et restore testé. | Backup absent ou restore jamais testé. |
| Compatibilité | Matrice confirmée. | Version opérateur/moteur incertaine. |
| Staging | Upgrade rejoué avec succÚs. | Pas de staging iso-prod. |
| Monitoring | Dashboards et alertes actifs. | Pas de visibilité pendant opération. |
| Rollback | Plan écrit et validé. | Rollback impossible ou non compris. |
Exemple de checklist release
# 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 scheduled13. 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
| Question | Pourquoi 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
| Question | Lecture 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
| Question | Pourquoi |
|---|---|
| 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. |
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
| Jour | Objectif | Livrable |
|---|---|---|
| 1 | Installer lab Kubernetes + namespaces + storage. | Cluster prĂȘt, StorageClass, quotas. |
| 2 | Installer ArgoCD ou Flux. | Repo GitOps synchronisé. |
| 3 | Installer CNPG et PostgreSQL 3 nĆuds. | Cluster Postgres fonctionnel. |
| 4 | Backups CNPG vers MinIO et restore. | Runbook backup/restore. |
| 5 | Failover CNPG et PITR. | Preuves de tests et logs. |
| 6 | ECK Elasticsearch + ILM + snapshots. | Cluster search + restore index. |
| 7 | MariaDB/Galera. | ContrĂŽles wsrep + test perte pod. |
| 8 | MongoDB replica set. | Ălection primary + secrets. |
| 9 | Sécurité : Vault/External Secrets/TLS/RBAC. | Manifests sécurité. |
| 10 | ObservabilitĂ© + runbooks + simulation entretien. | Dashboards et rĂ©ponses prĂȘtes. |
Compétences à classer
StatefulSet, PVC, StorageClass, CNPG, backup/restore, RBAC, GitOps.
ECK, ILM, snapshots, MariaDB Galera, MongoDB replica set, Prometheus.
Sharding MongoDB, OpenSearch Operator avancé, Vault avancé, multi-cluster.
Tableau de maturité personnelle
| Domaine | Niveau attendu | Preuve concrĂšte |
|---|---|---|
| Kubernetes storage | TrÚs bon | Créer PVC, StorageClass, snapshot, extension volume. |
| CNPG | TrĂšs bon | Failover, backup, restore, PITR. |
| GitOps | Bon | ArgoCD/Flux synchronise un cluster DB. |
| Elasticsearch/OpenSearch | Bon | Cluster health, ILM/ISM, snapshot restore. |
| MariaDB | Intermédiaire+ | Galera status, quorum, backup/restore. |
| MongoDB | Intermédiaire+ | Replica set, election, lag, secrets. |
| Sécurité | Bon | Vault/ExternalSecret, RBAC, NetworkPolicy, TLS. |
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
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
| Question | Ré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
âJe distingue snapshot volume, backup physique, backup logique et PITR. Le choix dĂ©pend du RPO/RTO et du moteur.â
âGit est la source de vĂ©ritĂ©. En production, je limite les modifications manuelles et je rĂ©concilie toute correction dâurgence.â
âJe vĂ©rifie StorageClass, reclaimPolicy, expansion, snapshots, encryption, latency et IOPS avant de parler production.â
âJe nâupgrade jamais tout en mĂȘme temps. Je dĂ©coupe opĂ©rateur, CRD, moteur, storage et Kubernetes.â
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
| Bloc | Livrable | Statut attendu |
|---|---|---|
| Kubernetes | Namespaces, RBAC, quotas, StorageClasses, snapshots. | Obligatoire |
| GitOps | Repo ArgoCD ou Flux synchronisé. | Obligatoire |
| PostgreSQL | CNPG 3 instances + backup + restore + failover. | Obligatoire |
| Search | ECK Elasticsearch + ILM + snapshot restore. | Fortement conseillé |
| OpenSearch | Nuance opérateur OpenSearch + ISM. | à savoir expliquer |
| MariaDB | Galera 3 nĆuds + contrĂŽles wsrep. | ConseillĂ© |
| MongoDB | Replica set + election + secrets. | Conseillé |
| Sécurité | Vault/External Secrets, TLS, RBAC, NetworkPolicy. | Obligatoire |
| Observabilité | Prometheus, Grafana, Alertmanager, logs. | Obligatoire |
| Runbooks | Failover, 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.
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.
Ce guide est imprimable. Le bouton âImprimerâ affiche tous les onglets dans lâordre pour produire une documentation complĂšte.
