Aller au contenu

bootstrap

bootstrap

Playbooks Ansible et scripts d’installation initiale de Kubernetes sur un parc de serveurs Debian.

Prérequis du poste de contrôle

Les playbooks plateforme/Ceph (dataops, ceph-*, monitoring, metrics-server, local-path, cnpg-secrets, gitops) pilotent l’API Kubernetes via la collection kubernetes.core depuis le poste de contrôle (localhost), pas depuis un nœud. Cette collection exige le client Python kubernetes (+ certifi). Ces libs sont versionnées (pyproject.toml, uv.lock) et provisionnées dans le .venv du dépôt — y compris sur un contrôleur macOS « externally-managed » où le pip système échoue (ADR 0006/0023, #277). Avant de jouer ces playbooks :

Fenêtre de terminal
uv sync # à la racine du dépôt — crée/maj .venv avec kubernetes + certifi

L’interpréteur Python de localhost est dirigé vers ce .venv par le groupe control_host (group_vars/control_host.yaml). L’inventaire d’exemple (hosts.example.yaml) montre la déclaration de ce groupe ; un .venv placé ailleurs se surcharge par hôte. Si les libs manquent, ces playbooks échouent tôt avec un rappel uv sync (garde en pre_tasks).

Contenu

Index par phase (lisibilité — ADR 0070). L’ordre canonique d’exécution vit dans le RUNBOOK.md et le DAG des couches (ADR 0069) ; ce tableau regroupe les playbooks par rôle, il ne prescrit pas la séquence.

Installation (socle k8s)

FichierRôle
hosts.example.yamlModèle d’inventaire générique (l’inventaire réel est dérivé de la topologie active par nestor ansible, plus de hosts.yaml persistant — ADR 0098)
checks.yamlVérifications préalables
cri.yamlInstallation de la runtime conteneur
kubeadm.yamlInstallation des paquets kubeadm/kubelet/kubectl
control-planes.yamlConfiguration des nœuds control plane
initialisation.yamlInitialisation du cluster avec kubeadm init
cni.shInstallation du CNI Cilium (à lancer sur le control plane)

Extension HA / join

FichierRôle
kube-vip.yamlVIP de l’API control plane (kube-vip) — topologie HA (ADR 0047)
join-control-plane.yamlPromotion d’un nœud en control plane supplémentaire (etcd 2/3)
join-workers.yamlAjout des nœuds workers

Storage & platform

FichierRôle
local-path.yamlStorageClass local-path (profil léger sans Ceph)
ceph-checks.yamlVérifications préalables Rook-Ceph (devices, prérequis)
ceph-cluster.yamlDéploiement du cluster Rook-Ceph
ceph-storageclasses.yamlStorageClasses bloc/CephFS (ADR 0001)
ceph-datalake.yamlDatalake S3 (RGW, erasure coding 2+1 — ADR 0004)
metrics-server.yamlmetrics-server (kubectl top, HPA — ADR 0016/0068)
monitoring.yamlPile d’observabilité (Prometheus/Grafana/Loki)
gitops.yamlSocle GitOps : Gitea (forge intra-banc) + Argo CD — ADR 0022/0044
dataops.yamlChaîne DataOps (Dagster, Marquez — ADR 0026/0028)
cnpg-secrets.yamlSecrets CloudNativePG (PostgreSQL managé — ADR 0024)

Ops & maintenance

FichierRôle
os-upgrade.yamlMise à jour OS de l’ensemble du parc
k8s-upgrade.yamlUpgrade Kubernetes in-place, séquencé (ADR 0015)
etcd-backup.yamlSauvegarde etcd horaire (timer systemd) — control plane
etcd-fetch.yamlCopie hors-nœud du dernier snapshot etcd (audit P1 #3)
audit-log-baseline.yamlInitialise le journal d’audit-log sur des nœuds existants
rollback.yamlRollback du bootstrap K8s (DESTRUCTIF — -e confirm=yes)
state.shClassification d’état d’un nœud/hôte (couche bootstrap)
roles/Rôles Ansible utilisés par les playbooks

Les quatre « topology » du dépôt

Quatre objets portent le mot topology, à ne pas confondre :

  • nestor/ — le paquet Python (logique pure : chargement, dérivation, rendu d’une topologie).
  • scripts/topology.py — la façade CLI (l’outil cluster).
  • topologies/ — le catalogue de données (les *.example.yaml).
  • topology.yaml — le symlink d’activation (gitignoré) qui désigne la topologie active du déploiement courant.

Procédure complète

Voir RUNBOOK.md.