0007 — Hyperconvergence : control plane portant OSDs + charges
Contexte
Section intitulée « Contexte »Avec 4 nœuds identiques (HPE XL420 Gen10+, 251 GiB RAM, 40 cœurs, 12 HDD 5,5 TiB + NVMe), deux topologies sont possibles :
- Dédiée : N nœuds control plane + (4-N) workers. Ceph OSDs uniquement sur les workers. Les control planes ne portent ni OSDs ni charges applicatives.
- Hyperconvergée : tous les nœuds portent tout — control plane, etcd, OSDs Ceph, charges applicatives. La séparation est logique (taints/tolerations) plutôt que physique.
ADR 0002 a déjà acté un seul control plane. Reste à savoir si ce control plane héberge aussi des OSDs et des pods utilisateurs.
Décision
Section intitulée « Décision »Hyperconvergence assumée : cp1 porte le control plane, 12 OSDs, et est
détainté pour accepter les pods (rôle
k8s-initialization :
kubectl taint nodes --all node-role.kubernetes.io/control-plane-).
Tous les nœuds (cp1/node1-3) font tourner :
kubelet+containerd;- les OSDs Ceph (12 HDD par nœud + block.db sur NVMe) ;
- les pods Cilium ;
- les charges applicatives (registry, RStudio, datalake gateways…).
Seul cp1 ajoute en plus : kube-apiserver, kube-scheduler,
kube-controller-manager, etcd.
Accepted (2026-05-28).
Conséquences
Section intitulée « Conséquences »Bénéfices.
- Aucun nœud “gâché” : un cluster de 4 nœuds, c’est déjà petit ; en retirer un de la pool de calcul pour le dédier au control plane réduit la capacité utilisable de 25 %.
- Cluster Ceph plein 4 nœuds : 48 OSDs au lieu de 36 → plus de capacité brute, meilleure distribution de la charge I/O.
- Toutes les machines sont rigoureusement identiques côté inventaire.
Coûts assumés.
- Contention CPU/RAM sur
cp1: le control plane (etcd surtout, sensible aux latences disque) cohabite avec 12 OSDs et des pods applicatifs. Mitigation :/var/lib/etcdsur LV dédié (10 GiB, isole les I/O), 251 GiB RAM laisse de la marge. - Maintenance de
cp1plus délicate : le drain le retire de la pool de calcul (OK) mais aussi de l’API (impact API jusqu’au reboot). Voir ADR 0002. - etcd I/O sensible au comportement des autres charges : si une app sature
/var, etcd peut se mettre enslow-apply. Compensation : LV/var/lib/etcdséparé.
Garde-fous.
- Partitionnement LVM dédié pour
/var/lib/etcd(10 GiB, ext4). requests/limitssur les OSDs (storage/ceph/cluster.yaml:osd: {requests: 200m/2Gi, limits: 2/4Gi}).- Sauvegarde etcd horaire (cf. ADR 0002).